| Absolute File Name: | /home/qt/qt5_coco/qt5/qtbase/src/network/ssl/qasn1element.cpp |
| Switch to Source code | Preprocessed file |
| Line | Source | Count | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | - | |||||||||||||
| 2 | - | |||||||||||||
| 3 | - | |||||||||||||
| 4 | - | |||||||||||||
| 5 | typedef QMap<QByteArray, QByteArray> OidNameMap; | - | ||||||||||||
| 6 | static OidNameMap createOidMap() | - | ||||||||||||
| 7 | { | - | ||||||||||||
| 8 | OidNameMap oids; | - | ||||||||||||
| 9 | - | |||||||||||||
| 10 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("0.9.2342.19200300.100.1.5") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "0.9.2342.19200300.100.1.5" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("favouriteDrink") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "favouriteDrink" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 11 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("1.2.840.113549.1.9.1") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "1.2.840.113549.1.9.1" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("emailAddress") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "emailAddress" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 12 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("1.3.6.1.5.5.7.1.1") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "1.3.6.1.5.5.7.1.1" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("authorityInfoAccess") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "authorityInfoAccess" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 13 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("1.3.6.1.5.5.7.48.1") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "1.3.6.1.5.5.7.48.1" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("OCSP") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "OCSP" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 14 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("1.3.6.1.5.5.7.48.2") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "1.3.6.1.5.5.7.48.2" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("caIssuers") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "caIssuers" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 15 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.29.14") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.29.14" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("subjectKeyIdentifier") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "subjectKeyIdentifier" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 16 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.29.15") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.29.15" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("keyUsage") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "keyUsage" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 17 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.29.17") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.29.17" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("subjectAltName") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "subjectAltName" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 18 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.29.19") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.29.19" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("basicConstraints") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "basicConstraints" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 19 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.29.35") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.29.35" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("authorityKeyIdentifier") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "authorityKeyIdentifier" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 20 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.10") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.10" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("O") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "O" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 21 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.11") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.11" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("OU") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "OU" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 22 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.12") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.12" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("title") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "title" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 23 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.13") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.13" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("description") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "description" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 24 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.17") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.17" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("postalCode") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "postalCode" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 25 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.3") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.3" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("CN") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "CN" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 26 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.4") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.4" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("SN") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "SN" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 27 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.41") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.41" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("name") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "name" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 28 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.42") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.42" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("GN") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "GN" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 29 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.43") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.43" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("initials") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "initials" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 30 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.46") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.46" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("dnQualifier") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "dnQualifier" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 31 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.5") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.5" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("serialNumber") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "serialNumber" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 32 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.6") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.6" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("C") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "C" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 33 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.7") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.7" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("L") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "L" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 34 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.8") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.8" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("ST") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "ST" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 35 | oids.insert(oids.cend(), ([]() -> QByteArray { enum { Size = sizeof("2.5.4.9") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "2.5.4.9" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }()), ([]() -> QByteArray { enum { Size = sizeof("street") - 1 }; static const QStaticByteArrayData<Size> qbytearray_literal = { { { { -1 } }, Size, 0, 0, sizeof(QByteArrayData) }, "street" }; QByteArrayDataPtr holder = { qbytearray_literal.data_ptr() }; const QByteArray ba(holder); return ba; }())); | - | ||||||||||||
| 36 | return oids; | - | ||||||||||||
| 37 | } | - | ||||||||||||
| 38 | namespace { namespace Q_QGS_oidNameMap { typedef OidNameMap Type; QBasicAtomicInt guard = { QtGlobalStatic::Uninitialized }; __attribute__((visibility("hidden"))) inline Type *innerFunction() { struct HolderBase { ~HolderBase() noexcept { if (guard.load() == QtGlobalStatic::Initialized) guard.store(QtGlobalStatic::Destroyed); } }; static struct Holder : public HolderBase { Type value; Holder() noexcept(noexcept(Type (createOidMap()))) : value (createOidMap()) { guard.store(QtGlobalStatic::Initialized); } } holder; return &holder.value; } } } static QGlobalStatic<OidNameMap, Q_QGS_oidNameMap::innerFunction, Q_QGS_oidNameMap::guard> oidNameMap; | - | ||||||||||||
| 39 | - | |||||||||||||
| 40 | QAsn1Element::QAsn1Element(quint8 type, const QByteArray &value) | - | ||||||||||||
| 41 | : mType(type) | - | ||||||||||||
| 42 | , mValue(value) | - | ||||||||||||
| 43 | { | - | ||||||||||||
| 44 | } | - | ||||||||||||
| 45 | - | |||||||||||||
| 46 | bool QAsn1Element::read(QDataStream &stream) | - | ||||||||||||
| 47 | { | - | ||||||||||||
| 48 | - | |||||||||||||
| 49 | quint8 tmpType; | - | ||||||||||||
| 50 | stream >> tmpType; | - | ||||||||||||
| 51 | if (!tmpType) | - | ||||||||||||
| 52 | return false; | - | ||||||||||||
| 53 | - | |||||||||||||
| 54 | - | |||||||||||||
| 55 | qint64 length = 0; | - | ||||||||||||
| 56 | quint8 first; | - | ||||||||||||
| 57 | stream >> first; | - | ||||||||||||
| 58 | if (first & 0x80) { | - | ||||||||||||
| 59 | - | |||||||||||||
| 60 | const quint8 bytes = (first & 0x7f); | - | ||||||||||||
| 61 | if (bytes > 7) | - | ||||||||||||
| 62 | return false; | - | ||||||||||||
| 63 | - | |||||||||||||
| 64 | quint8 b; | - | ||||||||||||
| 65 | for (int i = 0; i < bytes; i++) { | - | ||||||||||||
| 66 | stream >> b; | - | ||||||||||||
| 67 | length = (length << 8) | b; | - | ||||||||||||
| 68 | } | - | ||||||||||||
| 69 | } else { | - | ||||||||||||
| 70 | - | |||||||||||||
| 71 | length = (first & 0x7f); | - | ||||||||||||
| 72 | } | - | ||||||||||||
| 73 | - | |||||||||||||
| 74 | - | |||||||||||||
| 75 | QByteArray tmpValue; | - | ||||||||||||
| 76 | tmpValue.resize(length); | - | ||||||||||||
| 77 | int count = stream.readRawData(tmpValue.data(), tmpValue.size()); | - | ||||||||||||
| 78 | if (count != length) | - | ||||||||||||
| 79 | return false; | - | ||||||||||||
| 80 | - | |||||||||||||
| 81 | mType = tmpType; | - | ||||||||||||
| 82 | mValue.swap(tmpValue); | - | ||||||||||||
| 83 | return true; | - | ||||||||||||
| 84 | } | - | ||||||||||||
| 85 | - | |||||||||||||
| 86 | bool QAsn1Element::read(const QByteArray &data) | - | ||||||||||||
| 87 | { | - | ||||||||||||
| 88 | QDataStream stream(data); | - | ||||||||||||
| 89 | return read(stream); | - | ||||||||||||
| 90 | } | - | ||||||||||||
| 91 | - | |||||||||||||
| 92 | void QAsn1Element::write(QDataStream &stream) const | - | ||||||||||||
| 93 | { | - | ||||||||||||
| 94 | - | |||||||||||||
| 95 | stream << mType; | - | ||||||||||||
| 96 | - | |||||||||||||
| 97 | - | |||||||||||||
| 98 | qint64 length = mValue.size(); | - | ||||||||||||
| 99 | if (length >= 128) { | - | ||||||||||||
| 100 | - | |||||||||||||
| 101 | quint8 encodedLength = 0x80; | - | ||||||||||||
| 102 | QByteArray ba; | - | ||||||||||||
| 103 | while (length) { | - | ||||||||||||
| 104 | ba.prepend(quint8((length & 0xff))); | - | ||||||||||||
| 105 | length >>= 8; | - | ||||||||||||
| 106 | encodedLength += 1; | - | ||||||||||||
| 107 | } | - | ||||||||||||
| 108 | stream << encodedLength; | - | ||||||||||||
| 109 | stream.writeRawData(ba.data(), ba.size()); | - | ||||||||||||
| 110 | } else { | - | ||||||||||||
| 111 | - | |||||||||||||
| 112 | stream << quint8(length); | - | ||||||||||||
| 113 | } | - | ||||||||||||
| 114 | - | |||||||||||||
| 115 | - | |||||||||||||
| 116 | stream.writeRawData(mValue.data(), mValue.size()); | - | ||||||||||||
| 117 | } | - | ||||||||||||
| 118 | - | |||||||||||||
| 119 | QAsn1Element QAsn1Element::fromBool(bool val) | - | ||||||||||||
| 120 | { | - | ||||||||||||
| 121 | return QAsn1Element(QAsn1Element::BooleanType, | - | ||||||||||||
| 122 | QByteArray(1, val ? 0xff : 0x00)); | - | ||||||||||||
| 123 | } | - | ||||||||||||
| 124 | - | |||||||||||||
| 125 | QAsn1Element QAsn1Element::fromInteger(unsigned int val) | - | ||||||||||||
| 126 | { | - | ||||||||||||
| 127 | QAsn1Element elem(QAsn1Element::IntegerType); | - | ||||||||||||
| 128 | while (val > 127) { | - | ||||||||||||
| 129 | elem.mValue.prepend(val & 0xff); | - | ||||||||||||
| 130 | val >>= 8; | - | ||||||||||||
| 131 | } | - | ||||||||||||
| 132 | elem.mValue.prepend(val & 0x7f); | - | ||||||||||||
| 133 | return elem; | - | ||||||||||||
| 134 | } | - | ||||||||||||
| 135 | - | |||||||||||||
| 136 | QAsn1Element QAsn1Element::fromVector(const QVector<QAsn1Element> &items) | - | ||||||||||||
| 137 | { | - | ||||||||||||
| 138 | QAsn1Element seq; | - | ||||||||||||
| 139 | seq.mType = SequenceType; | - | ||||||||||||
| 140 | QDataStream stream(&seq.mValue, QIODevice::WriteOnly); | - | ||||||||||||
| 141 | for (QVector<QAsn1Element>::const_iterator it = items.cbegin(), end = items.cend(); it != end; ++it) | - | ||||||||||||
| 142 | it->write(stream); | - | ||||||||||||
| 143 | return seq; | - | ||||||||||||
| 144 | } | - | ||||||||||||
| 145 | - | |||||||||||||
| 146 | QAsn1Element QAsn1Element::fromObjectId(const QByteArray &id) | - | ||||||||||||
| 147 | { | - | ||||||||||||
| 148 | QAsn1Element elem; | - | ||||||||||||
| 149 | elem.mType = ObjectIdentifierType; | - | ||||||||||||
| 150 | const QList<QByteArray> bits = id.split('.'); | - | ||||||||||||
| 151 | ((!(bits.size() > 2)) ? qt_assert("bits.size() > 2",__FILE__,190196) : qt_noop()); | - | ||||||||||||
| 152 | elem.mValue += quint8((bits[0].toUInt() * 40 + bits[1].toUInt())); | - | ||||||||||||
| 153 | for (int i = 2; i < bits.size()
| 2-7 | ||||||||||||
| 154 | char buffer[std::numeric_limits<unsigned int>::digits / 7 + 2]; | - | ||||||||||||
| 155 | char *pBuffer = buffer + sizeof(buffer); | - | ||||||||||||
| 156 | *--pBuffer = '\0'; | - | ||||||||||||
| 157 | unsigned int node = bits[i].toUInt(); | - | ||||||||||||
| 158 | *--pBuffer = quint8((node & 0x7f)); | - | ||||||||||||
| 159 | node >>= 7; | - | ||||||||||||
| 160 | while (node
| 4-7 | ||||||||||||
| 161 | *--pBuffer = quint8(((node & 0x7f) | 0x80)); | - | ||||||||||||
| 162 | node >>= 7; | - | ||||||||||||
| 163 | } executed 4 times by 1 test: end of blockExecuted by:
| 4 | ||||||||||||
| 164 | elem.mValue += pBuffer; | - | ||||||||||||
| 165 | } executed 7 times by 1 test: end of blockExecuted by:
| 7 | ||||||||||||
| 166 | return executed 2 times by 1 test: elem;return elem;Executed by:
executed 2 times by 1 test: return elem;Executed by:
| 2 | ||||||||||||
| 167 | } | - | ||||||||||||
| 168 | - | |||||||||||||
| 169 | bool QAsn1Element::toBool(bool *ok) const | - | ||||||||||||
| 170 | { | - | ||||||||||||
| 171 | if (*this == fromBool(true)) { | - | ||||||||||||
| 172 | if (ok) | - | ||||||||||||
| 173 | *ok = true; | - | ||||||||||||
| 174 | return true; | - | ||||||||||||
| 175 | } else if (*this == fromBool(false)) { | - | ||||||||||||
| 176 | if (ok) | - | ||||||||||||
| 177 | *ok = true; | - | ||||||||||||
| 178 | return false; | - | ||||||||||||
| 179 | } else { | - | ||||||||||||
| 180 | if (ok) | - | ||||||||||||
| 181 | *ok = false; | - | ||||||||||||
| 182 | return false; | - | ||||||||||||
| 183 | } | - | ||||||||||||
| 184 | } | - | ||||||||||||
| 185 | - | |||||||||||||
| 186 | QDateTime QAsn1Element::toDateTime() const | - | ||||||||||||
| 187 | { | - | ||||||||||||
| 188 | if (mValue.endsWith('Z')) { | - | ||||||||||||
| 189 | if (mType == UtcTimeType && mValue.size() == 13) | - | ||||||||||||
| 190 | return QDateTime(QDate(2000 + mValue.mid(0, 2).toInt(), | - | ||||||||||||
| 191 | mValue.mid(2, 2).toInt(), | - | ||||||||||||
| 192 | mValue.mid(4, 2).toInt()), | - | ||||||||||||
| 193 | QTime(mValue.mid(6, 2).toInt(), | - | ||||||||||||
| 194 | mValue.mid(8, 2).toInt(), | - | ||||||||||||
| 195 | mValue.mid(10, 2).toInt()), | - | ||||||||||||
| 196 | Qt::UTC); | - | ||||||||||||
| 197 | else if (mType == GeneralizedTimeType && mValue.size() == 15) | - | ||||||||||||
| 198 | return QDateTime(QDate(mValue.mid(0, 4).toInt(), | - | ||||||||||||
| 199 | mValue.mid(4, 2).toInt(), | - | ||||||||||||
| 200 | mValue.mid(6, 2).toInt()), | - | ||||||||||||
| 201 | QTime(mValue.mid(8, 2).toInt(), | - | ||||||||||||
| 202 | mValue.mid(10, 2).toInt(), | - | ||||||||||||
| 203 | mValue.mid(12, 2).toInt()), | - | ||||||||||||
| 204 | Qt::UTC); | - | ||||||||||||
| 205 | } | - | ||||||||||||
| 206 | return QDateTime(); | - | ||||||||||||
| 207 | } | - | ||||||||||||
| 208 | - | |||||||||||||
| 209 | QMultiMap<QByteArray, QString> QAsn1Element::toInfo() const | - | ||||||||||||
| 210 | { | - | ||||||||||||
| 211 | QMultiMap<QByteArray, QString> info; | - | ||||||||||||
| 212 | QAsn1Element elem; | - | ||||||||||||
| 213 | QDataStream issuerStream(mValue); | - | ||||||||||||
| 214 | while (elem.read(issuerStream) && elem.mType == QAsn1Element::SetType) { | - | ||||||||||||
| 215 | QAsn1Element issuerElem; | - | ||||||||||||
| 216 | QDataStream setStream(elem.mValue); | - | ||||||||||||
| 217 | if (issuerElem.read(setStream) && issuerElem.mType == QAsn1Element::SequenceType) { | - | ||||||||||||
| 218 | QVector<QAsn1Element> elems = issuerElem.toVector(); | - | ||||||||||||
| 219 | if (elems.size() == 2) { | - | ||||||||||||
| 220 | const QByteArray key = elems.front().toObjectName(); | - | ||||||||||||
| 221 | if (!key.isEmpty()) | - | ||||||||||||
| 222 | info.insert(key, elems.back().toString()); | - | ||||||||||||
| 223 | } | - | ||||||||||||
| 224 | } | - | ||||||||||||
| 225 | } | - | ||||||||||||
| 226 | return info; | - | ||||||||||||
| 227 | } | - | ||||||||||||
| 228 | - | |||||||||||||
| 229 | qint64 QAsn1Element::toInteger(bool *ok) const | - | ||||||||||||
| 230 | { | - | ||||||||||||
| 231 | if (mType != QAsn1Element::IntegerType || mValue.isEmpty()) { | - | ||||||||||||
| 232 | if (ok) | - | ||||||||||||
| 233 | *ok = false; | - | ||||||||||||
| 234 | return 0; | - | ||||||||||||
| 235 | } | - | ||||||||||||
| 236 | - | |||||||||||||
| 237 | - | |||||||||||||
| 238 | if (mValue.at(0) & 0x80) { | - | ||||||||||||
| 239 | if (ok) | - | ||||||||||||
| 240 | *ok = false; | - | ||||||||||||
| 241 | return 0; | - | ||||||||||||
| 242 | } | - | ||||||||||||
| 243 | - | |||||||||||||
| 244 | qint64 value = mValue.at(0) & 0x7f; | - | ||||||||||||
| 245 | for (int i = 1; i < mValue.size(); ++i) | - | ||||||||||||
| 246 | value = (value << 8) | quint8(mValue.at(i)); | - | ||||||||||||
| 247 | - | |||||||||||||
| 248 | if (ok) | - | ||||||||||||
| 249 | *ok = true; | - | ||||||||||||
| 250 | return value; | - | ||||||||||||
| 251 | } | - | ||||||||||||
| 252 | - | |||||||||||||
| 253 | QVector<QAsn1Element> QAsn1Element::toVector() const | - | ||||||||||||
| 254 | { | - | ||||||||||||
| 255 | QVector<QAsn1Element> items; | - | ||||||||||||
| 256 | if (mType == SequenceType) { | - | ||||||||||||
| 257 | QAsn1Element elem; | - | ||||||||||||
| 258 | QDataStream stream(mValue); | - | ||||||||||||
| 259 | while (elem.read(stream)) | - | ||||||||||||
| 260 | items << elem; | - | ||||||||||||
| 261 | } | - | ||||||||||||
| 262 | return items; | - | ||||||||||||
| 263 | } | - | ||||||||||||
| 264 | - | |||||||||||||
| 265 | QByteArray QAsn1Element::toObjectId() const | - | ||||||||||||
| 266 | { | - | ||||||||||||
| 267 | QByteArray key; | - | ||||||||||||
| 268 | if (mType == ObjectIdentifierType
| 0-6 | ||||||||||||
| 269 | quint8 b = mValue[.at(0];); | - | ||||||||||||
| 270 | key += QByteArray::number(b / 40) + '.' + QByteArray::number (b % 40); | - | ||||||||||||
| 271 | unsigned int val = 0; | - | ||||||||||||
| 272 | for (int i = 1; i < mValue.size()
| 6-33 | ||||||||||||
| 273 | b = mValue[.at(i];); | - | ||||||||||||
| 274 | val = (val << 7) | (b & 0x7f); | - | ||||||||||||
| 275 | if (!(b & 0x80)
| 12-21 | ||||||||||||
| 276 | key += '.' + QByteArray::number(val); | - | ||||||||||||
| 277 | val = 0; | - | ||||||||||||
| 278 | } executed 21 times by 1 test: end of blockExecuted by:
| 21 | ||||||||||||
| 279 | } executed 33 times by 1 test: end of blockExecuted by:
| 33 | ||||||||||||
| 280 | } executed 6 times by 1 test: end of blockExecuted by:
| 6 | ||||||||||||
| 281 | return executed 6 times by 1 test: key;return key;Executed by:
executed 6 times by 1 test: return key;Executed by:
| 6 | ||||||||||||
| 282 | } | - | ||||||||||||
| 283 | - | |||||||||||||
| 284 | QByteArray QAsn1Element::toObjectName() const | - | ||||||||||||
| 285 | { | - | ||||||||||||
| 286 | QByteArray key = toObjectId(); | - | ||||||||||||
| 287 | return oidNameMap->value(key, key); | - | ||||||||||||
| 288 | } | - | ||||||||||||
| 289 | - | |||||||||||||
| 290 | QString QAsn1Element::toString() const | - | ||||||||||||
| 291 | { | - | ||||||||||||
| 292 | - | |||||||||||||
| 293 | if (qstrlen(mValue) < uint(mValue.size())) | - | ||||||||||||
| 294 | return QString(); | - | ||||||||||||
| 295 | - | |||||||||||||
| 296 | if (mType == PrintableStringType || mType == TeletexStringType | - | ||||||||||||
| 297 | || mType == Rfc822NameType || mType == DnsNameType | - | ||||||||||||
| 298 | || mType == UniformResourceIdentifierType) | - | ||||||||||||
| 299 | return QString::fromLatin1(mValue, mValue.size()); | - | ||||||||||||
| 300 | if (mType == Utf8StringType) | - | ||||||||||||
| 301 | return QString::fromUtf8(mValue, mValue.size()); | - | ||||||||||||
| 302 | - | |||||||||||||
| 303 | return QString(); | - | ||||||||||||
| 304 | } | - | ||||||||||||
| 305 | - | |||||||||||||
| 306 | - | |||||||||||||
| Switch to Source code | Preprocessed file |