]> Cypherpunks.ru repositories - pygost.git/commitdiff
Simplify OctetString wrapping
authorSergey Matveev <stargrave@stargrave.org>
Mon, 7 Jan 2019 17:42:33 +0000 (20:42 +0300)
committerSergey Matveev <stargrave@stargrave.org>
Mon, 7 Jan 2019 17:42:33 +0000 (20:42 +0300)
pygost/asn1schemas/pfx.py
pygost/test_pfx.py

index 1f5350c02fbffe779e925d3c0eacc0ea0fd17397..acc7787d6d7d61570072b859794ed1fe06f93367 100644 (file)
@@ -169,9 +169,7 @@ class SafeContents(SequenceOf):
     schema = SafeBag()
 
 
-class OctetStringSafeContents(Sequence):
-    tag_default = OctetString.tag_default
-    schema = (("safeContents", SafeContents()),)
+OctetStringSafeContents = SafeContents(expl=OctetString.tag_default)
 
 
 class AuthSafe(Sequence):
index fe5b1649cf209012d5691eabf9b46bfdfa2ede6a..ec300f9849745f7e2fab10410a3d464d20f8b155 100644 (file)
@@ -30,6 +30,7 @@ try:
     from pygost.asn1schemas.pfx import OctetStringSafeContents
     from pygost.asn1schemas.pfx import PFX
     from pygost.asn1schemas.pfx import PKCS8ShroudedKeyBag
+    from pygost.asn1schemas.pfx import SafeContents
 except ImportError:
     pyderasn_exists = False
 else:
@@ -83,13 +84,12 @@ G2ki9enTqos4KpUU0j9IDpl1UXiaA1YDIwUjlAp+81GkLmyt8Fw6Gt/X5JZySAY=
 
         pfx, tail = PFX().decode(self.pfx_raw)
         self.assertSequenceEqual(tail, b"")
-        _, octet_string_safe_contents = pfx["authSafe"]["content"].defined
-        outer_safe_contents = octet_string_safe_contents["safeContents"]
-        octet_string_safe_contents, tail = OctetStringSafeContents().decode(
+        _, outer_safe_contents = pfx["authSafe"]["content"].defined
+        safe_contents, tail = OctetStringSafeContents().decode(
             bytes(outer_safe_contents[0]["bagValue"]),
         )
         self.assertSequenceEqual(tail, b"")
-        safe_bag = octet_string_safe_contents["safeContents"][0]
+        safe_bag = safe_contents[0]
         shrouded_key_bag, tail = PKCS8ShroudedKeyBag().decode(
             bytes(safe_bag["bagValue"]),
         )
@@ -136,8 +136,7 @@ ATAMBggqhQMHAQEDAgUAA0EA9oq0Vvk8kkgIwkp0x0J5eKtia4MNTiwKAm7jgnCZIx3O98BThaTX
 
         pfx, tail = PFX().decode(self.pfx_raw)
         self.assertSequenceEqual(tail, b"")
-        _, octet_string_safe_contents = pfx["authSafe"]["content"].defined
-        outer_safe_contents = octet_string_safe_contents["safeContents"]
+        _, outer_safe_contents = pfx["authSafe"]["content"].defined
         _, encrypted_data = outer_safe_contents[1]["bagValue"].defined
         _, pbes2_params = encrypted_data["encryptedContentInfo"]["contentEncryptionAlgorithm"]["parameters"].defined
         _, pbkdf2_params = pbes2_params["keyDerivationFunc"]["parameters"].defined
@@ -162,8 +161,7 @@ ATAMBggqhQMHAQEDAgUAA0EA9oq0Vvk8kkgIwkp0x0J5eKtia4MNTiwKAm7jgnCZIx3O98BThaTX
     def test_mac(self):
         pfx, tail = PFX().decode(self.pfx_raw)
         self.assertSequenceEqual(tail, b"")
-        _, octet_string_safe_contents = pfx["authSafe"]["content"].defined
-        outer_safe_contents = octet_string_safe_contents["safeContents"]
+        _, outer_safe_contents = pfx["authSafe"]["content"].defined
         mac_data = pfx["macData"]
         mac_key = gost34112012_pbkdf2(
             password=self.password.encode('utf-8'),
@@ -175,7 +173,7 @@ ATAMBggqhQMHAQEDAgUAA0EA9oq0Vvk8kkgIwkp0x0J5eKtia4MNTiwKAm7jgnCZIx3O98BThaTX
         self.assertSequenceEqual(
             hmac_new(
                 key=mac_key,
-                msg=outer_safe_contents.encode(),
+                msg=SafeContents(outer_safe_contents).encode(),
                 digestmod=GOST34112012512,
             ).digest(),
             bytes(mac_data["mac"]["digest"]),