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 block Executed by:
| 4 | ||||||||||||
164 | elem.mValue += pBuffer; | - | ||||||||||||
165 | } executed 7 times by 1 test: end of block Executed 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 block Executed by:
| 21 | ||||||||||||
279 | } executed 33 times by 1 test: end of block Executed by:
| 33 | ||||||||||||
280 | } executed 6 times by 1 test: end of block Executed 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 |