blob: 915f791f78598aab3c6eb7c4d49f5b17477a35ce [file] [log] [blame]
Russ Housley5fde2a42019-10-14 12:22:53 -04001#
2# This file is part of pyasn1-modules software.
3#
4# Created by Russ Housley
5# Copyright (c) 2019, Vigil Security, LLC
6# License: http://snmplabs.com/pyasn1/license.html
7#
8
9import sys
10
11from pyasn1.codec.der.decoder import decode as der_decode
12from pyasn1.codec.der.encoder import encode as der_encode
13
14from pyasn1_modules import pem
15from pyasn1_modules import rfc3281
16
17try:
18 import unittest2 as unittest
19
20except ImportError:
21 import unittest
22
23
24class AttributeCertificateTestCase(unittest.TestCase):
25 pem_text = """\
26MIIDBTCCAm4CAQEwgY+gUTBKpEgwRjEjMCEGA1UEAwwaQUNNRSBJbnRlcm1lZGlh
27dGUgRUNEU0EgQ0ExCzAJBgNVBAYTAkZJMRIwEAYDVQQKDAlBQ01FIEx0ZC4CAx7N
28WqE6pDgwNjETMBEGA1UEAwwKQUNNRSBFQ0RTQTELMAkGA1UEBhMCRkkxEjAQBgNV
29BAoMCUFDTUUgTHRkLqA9MDukOTA3MRQwEgYDVQQDDAtleGFtcGxlLmNvbTELMAkG
30A1UEBhMCRkkxEjAQBgNVBAoMCUFDTUUgTHRkLjANBgkqhkiG9w0BAQsFAAIEC63K
31/jAiGA8yMDE2MDEwMTEyMDAwMFoYDzIwMTYwMzAxMTIwMDAwWjCB8jA8BggrBgEF
32BQcKATEwMC6GC3VybjpzZXJ2aWNlpBUwEzERMA8GA1UEAwwIdXNlcm5hbWUECHBh
33c3N3b3JkMDIGCCsGAQUFBwoCMSYwJIYLdXJuOnNlcnZpY2WkFTATMREwDwYDVQQD
34DAh1c2VybmFtZTA1BggrBgEFBQcKAzEpMCegGKQWMBQxEjAQBgNVBAMMCUFDTUUg
35THRkLjALDAlBQ01FIEx0ZC4wIAYIKwYBBQUHCgQxFDASMBAMBmdyb3VwMQwGZ3Jv
36dXAyMCUGA1UESDEeMA2hC4YJdXJuOnJvbGUxMA2hC4YJdXJuOnJvbGUyMGowHwYD
37VR0jBBgwFoAUgJCMhskAsEBzvklAX8yJBOXO500wCQYDVR04BAIFADA8BgNVHTcB
38Af8EMjAwMB2gCoYIdXJuOnRlc3SgD4INKi5leGFtcGxlLmNvbTAPoA2GC3Vybjph
39bm90aGVyMA0GCSqGSIb3DQEBCwUAA4GBACygfTs6TkPurZQTLufcE3B1H2707OXK
40sJlwRpuodR2oJbunSHZ94jcJHs5dfbzFs6vNfVLlBiDBRieX4p+4JcQ2P44bkgyi
41UTJu7g1b6C1liB3vO6yH5hOZicOAaKd+c/myuGb9uJ4n6y2oLNxnk/fDzpuZUe2h
42Q4eikPk4LQey
43"""
44
45 def setUp(self):
46 self.asn1Spec = rfc3281.AttributeCertificate()
47
48 def testDerCodec(self):
49 substrate = pem.readBase64fromText(self.pem_text)
50 asn1Object, rest = der_decode(substrate, asn1Spec=self.asn1Spec)
51 assert not rest
52 assert asn1Object.prettyPrint()
53 assert der_encode(asn1Object) == substrate
54
55 assert asn1Object['acinfo']['version'] == 1
56
57 attributeMap = {
58 rfc3281.id_at_role: rfc3281.RoleSyntax(),
59 rfc3281.id_aca_authenticationInfo: rfc3281.SvceAuthInfo(),
60 rfc3281.id_aca_accessIdentity: rfc3281.SvceAuthInfo(),
61 rfc3281.id_aca_chargingIdentity: rfc3281.IetfAttrSyntax(),
62 rfc3281.id_aca_group: rfc3281.IetfAttrSyntax(),
63 }
64
65 count = 0
66 for attr in asn1Object['acinfo']['attributes']:
67 assert attr['type'] in attributeMap
68 av, rest = der_decode(attr['values'][0],
69 asn1Spec=attributeMap[attr['type']])
70 assert not rest
71 assert av.prettyPrint()
72 assert der_encode(av) == attr['values'][0]
73 count += 1
74
75 assert count == 5
76
77
78suite = unittest.TestLoader().loadTestsFromModule(sys.modules[__name__])
79
80if __name__ == '__main__':
81 import sys
82
83 result = unittest.TextTestRunner(verbosity=2).run(suite)
84 sys.exit(not result.wasSuccessful())