aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRuss Housley <housley@vigilsec.com>2019-08-13 17:17:52 -0400
committerIlya Etingof <etingof@gmail.com>2019-08-13 23:17:52 +0200
commit283db3c96dfbbbc8bb9459e5923e01c04752f65e (patch)
tree488b0147abad94e78829342025a8f83d16ded425
parentcfc044568ad1d2958bcb037d827a3c58a1099d52 (diff)
downloadpyasn1-modules-283db3c96dfbbbc8bb9459e5923e01c04752f65e.tar.gz
Add map for opentype to RFC 3565 (#55)
-rw-r--r--CHANGES.txt2
-rw-r--r--pyasn1_modules/rfc3565.py23
-rw-r--r--tests/test_rfc3565.py19
3 files changed, 38 insertions, 6 deletions
diff --git a/CHANGES.txt b/CHANGES.txt
index 141822d..4127ee3 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -2,7 +2,7 @@
Revision 0.2.7, released XX-08-2019
-----------------------------------
-No changes yet
+- Added maps for use with openType to RFC 3565
Revision 0.2.6, released 31-07-2019
-----------------------------------
diff --git a/pyasn1_modules/rfc3565.py b/pyasn1_modules/rfc3565.py
index c4b742d..ec75e23 100644
--- a/pyasn1_modules/rfc3565.py
+++ b/pyasn1_modules/rfc3565.py
@@ -1,3 +1,8 @@
+# This file is being contributed to pyasn1-modules software.
+#
+# Created by Russ Housley.
+# Modified by Russ Housley to add maps for use with opentypes.
+#
# Copyright (c) 2019, Vigil Security, LLC
# License: http://snmplabs.com/pyasn1/license.html
#
@@ -7,6 +12,7 @@
# ASN.1 source from:
# https://www.rfc-editor.org/rfc/rfc3565.txt
+
from pyasn1.type import constraint
from pyasn1.type import univ
@@ -20,17 +26,32 @@ class AlgorithmIdentifier(rfc5280.AlgorithmIdentifier):
class AES_IV(univ.OctetString):
pass
-
AES_IV.subtypeSpec = constraint.ValueSizeConstraint(16, 16)
+
id_aes128_CBC = univ.ObjectIdentifier('2.16.840.1.101.3.4.1.2')
id_aes192_CBC = univ.ObjectIdentifier('2.16.840.1.101.3.4.1.22')
id_aes256_CBC = univ.ObjectIdentifier('2.16.840.1.101.3.4.1.42')
+
id_aes128_wrap = univ.ObjectIdentifier('2.16.840.1.101.3.4.1.5')
id_aes192_wrap = univ.ObjectIdentifier('2.16.840.1.101.3.4.1.25')
id_aes256_wrap = univ.ObjectIdentifier('2.16.840.1.101.3.4.1.45')
+
+
+# Update the Algorithm Identifier map
+
+_algorithmIdentifierMapUpdate = {
+ id_aes128_CBC: AES_IV(),
+ id_aes192_CBC: AES_IV(),
+ id_aes256_CBC: AES_IV(),
+ id_aes128_wrap: univ.Null(),
+ id_aes192_wrap: univ.Null(),
+ id_aes256_wrap: univ.Null(),
+}
+
+rfc5280.algorithmIdentifierMap.update(_algorithmIdentifierMapUpdate)
diff --git a/tests/test_rfc3565.py b/tests/test_rfc3565.py
index 99cb567..f69e392 100644
--- a/tests/test_rfc3565.py
+++ b/tests/test_rfc3565.py
@@ -11,6 +11,8 @@ import sys
from pyasn1.codec.der import decoder as der_decoder
from pyasn1.codec.der import encoder as der_encoder
+from pyasn1.type import univ
+
from pyasn1_modules import pem
from pyasn1_modules import rfc3565
@@ -50,11 +52,20 @@ class AESCBCTestCase(unittest.TestCase):
assert asn1Object[1].isValue
assert der_encoder.encode(asn1Object) == substrate
+ def testOpenTypes(self):
+ substrate = pem.readBase64fromText(self.aes_alg_id_pem_text)
+ asn1Object, rest = der_decoder.decode(substrate,
+ asn1Spec=self.asn1Spec,
+ decodeOpenTypes=True)
+ assert not rest
+ assert asn1Object.prettyPrint()
+ assert asn1Object[0] == rfc3565.id_aes256_CBC
+ aes_iv = univ.OctetString(hexValue='108996ba850e3f0339993bb5878a0e37')
+ assert asn1Object[1] == aes_iv
+ assert der_encoder.encode(asn1Object) == substrate
+
suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
if __name__ == '__main__':
- import sys
-
- result = unittest.TextTestRunner(verbosity=2).run(suite)
- sys.exit(not result.wasSuccessful())
+ unittest.TextTestRunner(verbosity=2).run(suite)