diff options
author | Russ Housley <housley@vigilsec.com> | 2019-08-13 17:17:52 -0400 |
---|---|---|
committer | Ilya Etingof <etingof@gmail.com> | 2019-08-13 23:17:52 +0200 |
commit | 283db3c96dfbbbc8bb9459e5923e01c04752f65e (patch) | |
tree | 488b0147abad94e78829342025a8f83d16ded425 | |
parent | cfc044568ad1d2958bcb037d827a3c58a1099d52 (diff) | |
download | pyasn1-modules-283db3c96dfbbbc8bb9459e5923e01c04752f65e.tar.gz |
Add map for opentype to RFC 3565 (#55)
-rw-r--r-- | CHANGES.txt | 2 | ||||
-rw-r--r-- | pyasn1_modules/rfc3565.py | 23 | ||||
-rw-r--r-- | tests/test_rfc3565.py | 19 |
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) |