diff --git a/asn1crypto/algos.py b/asn1crypto/algos.py index ff05626..f77f042 100644 --- a/asn1crypto/algos.py +++ b/asn1crypto/algos.py @@ -285,6 +285,10 @@ class SignedDigestAlgorithmId(ObjectIdentifier): '0.4.0.127.0.7.1.1.4.1.9': 'sha3_256_ecdsa_plain', '0.4.0.127.0.7.1.1.4.1.10': 'sha3_384_ecdsa_plain', '0.4.0.127.0.7.1.1.4.1.11': 'sha3_512_ecdsa_plain', + # GOST + '1.2.643.2.2.3': 'gost2001', + '1.2.643.7.1.1.3.2': 'gost2012_256', + '1.2.643.7.1.1.3.3': 'gost2012_512', } _reverse_map = { @@ -333,6 +337,10 @@ class SignedDigestAlgorithmId(ObjectIdentifier): 'sha3_256_ecdsa_plain': '0.4.0.127.0.7.1.1.4.1.9', 'sha3_384_ecdsa_plain': '0.4.0.127.0.7.1.1.4.1.10', 'sha3_512_ecdsa_plain': '0.4.0.127.0.7.1.1.4.1.11', + # GOST + 'gost2001': '1.2.643.2.2.3', + 'gost2012_256': '1.2.643.7.1.1.3.2', + 'gost2012_512': '1.2.643.7.1.1.3.3', } @@ -386,6 +394,10 @@ class SignedDigestAlgorithm(_ForceNullParameters, Sequence): 'sha3_256_rsa': 'sha3_256', 'sha3_384_rsa': 'sha3_384', 'sha3_512_rsa': 'sha3_512', + # GOST + 'gost2001': 'ГОСТ Р 34.11-94 256 бит', + 'gost2012_256': 'ГОСТ Р 34.11-2012 256 бит', + 'gost2012_512': 'ГОСТ Р 34.11-2012 512 бит', } @property @@ -443,6 +455,10 @@ def signature_algo(self): 'ecdsa': 'ecdsa', 'ed25519': 'ed25519', 'ed448': 'ed448', + # GOST + 'gost2001': 'ГОСТ Р 34.11-94/34.10-2001 256 бит', + 'gost2012_256': 'ГОСТ Р 34.11-2012/34.10-2012 256 бит', + 'gost2012_512': 'ГОСТ Р 34.11-2012/34.10-2012 512 бит', } if algorithm in algo_map: return algo_map[algorithm] diff --git a/asn1crypto/keys.py b/asn1crypto/keys.py index b4a87ae..c21499f 100644 --- a/asn1crypto/keys.py +++ b/asn1crypto/keys.py @@ -1033,6 +1033,9 @@ class PublicKeyAlgorithmId(ObjectIdentifier): '1.3.101.111': 'x448', '1.3.101.112': 'ed25519', '1.3.101.113': 'ed448', + '1.2.643.2.2.19': 'gost2001', + '1.2.643.7.1.1.1.1': 'gost2012_256', + '1.2.643.7.1.1.1.2': 'gost2012_512', } @@ -1085,6 +1088,9 @@ def _public_key_spec(self): 'x448': (OctetBitString, None), 'ed25519': (OctetBitString, None), 'ed448': (OctetBitString, None), + 'gost2001': (OctetBitString, None), + 'gost2012_256': (OctetBitString, None), + 'gost2012_512': (OctetBitString, None), }[algorithm] _spec_callbacks = { diff --git a/asn1crypto/x509.py b/asn1crypto/x509.py index 38aa770..99af152 100644 --- a/asn1crypto/x509.py +++ b/asn1crypto/x509.py @@ -543,6 +543,12 @@ class NameType(ObjectIdentifier): '0.9.2342.19200300.100.1.25': 'domain_component', # http://www.alvestrand.no/objectid/0.2.262.1.10.7.20.html '0.2.262.1.10.7.20': 'name_distinguisher', + # GOST + '1.2.643.100.1': 'ogrn', + '1.2.643.100.3': 'snils', + '1.2.643.100.4': 'innle', + '1.2.643.100.5': 'ogrnip', + '1.2.643.3.131.1.1': 'inn', } # This order is largely based on observed order seen in EV certs from @@ -582,6 +588,11 @@ class NameType(ObjectIdentifier): 'platform_manufacturer', 'platform_model', 'platform_version', + 'ogrn', + 'ogrnip', + 'inn', + 'innle', + 'snils', ] @classmethod @@ -646,6 +657,12 @@ def human_friendly(self): 'platform_model': 'Platform Model', 'platform_version': 'Platform Version', 'user_id': 'User ID', + # GOST + 'ogrn': 'ОГРН', + 'ogrnip': 'ОГРНИП', + 'inn': 'ИНН', + 'innle': 'ИНН ЮЛ', + 'snils': 'СНИЛС', }.get(self.native, self.native) @@ -693,6 +710,12 @@ class NameTypeAndValue(Sequence): 'platform_model': UTF8String, 'platform_version': UTF8String, 'user_id': DirectoryString, + # GOST + 'ogrn': NumericString, + 'ogrnip': NumericString, + 'inn': NumericString, + 'innle': NumericString, + 'snils': NumericString, } _prepped = None