Index: tools/telemetry/third_party/gsutilz/third_party/rsa/rsa/asn1.py |
diff --git a/tools/telemetry/third_party/gsutilz/third_party/rsa/rsa/asn1.py b/tools/telemetry/third_party/gsutilz/third_party/rsa/rsa/asn1.py |
new file mode 100644 |
index 0000000000000000000000000000000000000000..706e6cf228e826a5c0fe1ded352ae4e351136522 |
--- /dev/null |
+++ b/tools/telemetry/third_party/gsutilz/third_party/rsa/rsa/asn1.py |
@@ -0,0 +1,35 @@ |
+'''ASN.1 definitions. |
+ |
+Not all ASN.1-handling code use these definitions, but when it does, they should be here. |
+''' |
+ |
+from pyasn1.type import univ, namedtype, tag |
+ |
+class PubKeyHeader(univ.Sequence): |
+ componentType = namedtype.NamedTypes( |
+ namedtype.NamedType('oid', univ.ObjectIdentifier()), |
+ namedtype.NamedType('parameters', univ.Null()), |
+ ) |
+ |
+class OpenSSLPubKey(univ.Sequence): |
+ componentType = namedtype.NamedTypes( |
+ namedtype.NamedType('header', PubKeyHeader()), |
+ |
+ # This little hack (the implicit tag) allows us to get a Bit String as Octet String |
+ namedtype.NamedType('key', univ.OctetString().subtype( |
+ implicitTag=tag.Tag(tagClass=0, tagFormat=0, tagId=3))), |
+ ) |
+ |
+ |
+class AsnPubKey(univ.Sequence): |
+ '''ASN.1 contents of DER encoded public key: |
+ |
+ RSAPublicKey ::= SEQUENCE { |
+ modulus INTEGER, -- n |
+ publicExponent INTEGER, -- e |
+ ''' |
+ |
+ componentType = namedtype.NamedTypes( |
+ namedtype.NamedType('modulus', univ.Integer()), |
+ namedtype.NamedType('publicExponent', univ.Integer()), |
+ ) |