diff options
author | Jeremy Lainé <jeremy.laine@m4x.org> | 2014-09-02 09:34:11 +0200 |
---|---|---|
committer | Jeremy Lainé <jeremy.laine@m4x.org> | 2014-09-02 09:52:08 +0200 |
commit | 31938846aec24970e4a53771db201a7f0ac9ac3a (patch) | |
tree | cffadcc57ac270c2815f399369b80a05ebb93a16 /src/network/ssl/qasn1element.cpp | |
parent | b366d0d0166bbb114ccf9a8e8be7d3c6c45e313e (diff) | |
download | qtbase-31938846aec24970e4a53771db201a7f0ac9ac3a.tar.gz |
qasn1element: add QAsn1Element::toInteger
This change adds the ability to decode ASN.1 INTEGER fields,
provided they represent a positive number of less than 64-bit.
This is needed for PKCS#12 decoding.
Change-Id: Iafb76f22383278d6773b9e879a8f3ef43c8d2c8f
Reviewed-by: Oliver Wolff <oliver.wolff@digia.com>
Diffstat (limited to 'src/network/ssl/qasn1element.cpp')
-rw-r--r-- | src/network/ssl/qasn1element.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/src/network/ssl/qasn1element.cpp b/src/network/ssl/qasn1element.cpp index d282a02827..cd8ebed501 100644 --- a/src/network/ssl/qasn1element.cpp +++ b/src/network/ssl/qasn1element.cpp @@ -242,6 +242,30 @@ QMultiMap<QByteArray, QString> QAsn1Element::toInfo() const return info; } +qint64 QAsn1Element::toInteger(bool *ok) const +{ + if (mType != QAsn1Element::IntegerType || mValue.isEmpty()) { + if (ok) + *ok = false; + return 0; + } + + // NOTE: negative numbers are not handled + if (mValue.at(0) & 0x80) { + if (ok) + *ok = false; + return 0; + } + + qint64 value = mValue.at(0) & 0x7f; + for (int i = 1; i < mValue.size(); ++i) + value = (value << 8) | quint8(mValue.at(i)); + + if (ok) + *ok = true; + return value; +} + QVector<QAsn1Element> QAsn1Element::toVector() const { QVector<QAsn1Element> items; |