1# Copyright (c) 2020, The MITRE Corporation. All rights reserved. 2# See LICENSE.txt for complete terms. 3 4import unittest 5 6from mixbox.vendor.six import u 7 8from cybox.objects.x509_certificate_object import (SubjectPublicKey, 9 RSAPublicKey, Validity, 10 X509Cert, X509Certificate, 11 X509CertificateSignature, 12 X509NonStandardExtensions, 13 X509V3Extensions) 14from cybox.test import EntityTestCase 15from cybox.test.objects import ObjectTestCase 16 17 18class TestValidity(EntityTestCase, unittest.TestCase): 19 klass = Validity 20 21 _full_dict = { 22 'not_before': '2006-11-17T00:00:00+00:00', 23 'not_after': '2036-07-16T23:59:59+00:00', 24 } 25 26 27class TestRSAPublicKey(EntityTestCase, unittest.TestCase): 28 klass = RSAPublicKey 29 30 _full_dict = { 31 'modulus': u('00:ac:a0:f0:fb:80:59:d4:9c:c7:a4:cf:9d:a1:59:73:09:10:45:0c:0d:2c:6e:68:f1:6c:5b:48:68:49:59:37:fc:0b:33:19:c2:77:7f:cc:10:2d:95:34:1c:e6:eb:4d:09:a7:1c:d2:b8:c9:97:36:02:b7:89:d4:24:5f:06:c0:cc:44:94:94:8d:02:62:6f:eb:5a:dd:11:8d:28:9a:5c:84:90:10:7a:0d:bd:74:66:2f:6a:38:a0:e2:d5:54:44:eb:1d:07:9f:07:ba:6f:ee:e9:fd:4e:0b:29:f5:3e:84:a0:01:f1:9c:ab:f8:1c:7e:89:a4:e8:a1:d8:71:65:0d:a3:51:7b:ee:bc:d2:22:60:0d:b9:5b:9d:df:ba:fc:51:5b:0b:af:98:b2:e9:2e:e9:04:e8:62:87:de:2b:c8:d7:4e:c1:4c:64:1e:dd:cf:87:58:ba:4a:4f:ca:68:07:1d:1c:9d:4a:c6:d5:2f:91:cc:7c:71:72:1c:c5:c0:67:eb:32:fd:c9:92:5c:94:da:85:c0:9b:bf:53:7d:2b:09:f4:8c:9d:91:1f:97:6a:52:cb:de:09:36:a4:77:d8:7b:87:50:44:d5:3e:6e:29:69:fb:39:49:26:1e:09:a5:80:7b:40:2d:eb:e8:27:85:c9:fe:61:fd:7e:e6:7c:97:1d:d5:9d'), 32 'exponent': 65537, 33 } 34 35 36class TestSubjectPublicKey(EntityTestCase, unittest.TestCase): 37 klass = SubjectPublicKey 38 39 _full_dict = { 40 'public_key_algorithm': u('rsaEncryption'), 41 'rsa_public_key': TestRSAPublicKey._full_dict, 42 } 43 44 45class TestX509NonStandardExtensions(EntityTestCase, unittest.TestCase): 46 klass = X509NonStandardExtensions 47 48 _full_dict = { 49 'netscape_comment': u('some netscape comment'), 50 'netscape_certificate_type': u('cert type'), 51 'old_authority_key_identifier': u('CE:CB'), 52 'old_primary_key_attributes': u('CA:TRUE'), 53 } 54 55 56class TestX509V3Extensions(EntityTestCase, unittest.TestCase): 57 klass = X509V3Extensions 58 59 _full_dict = { 60 'basic_constraints': u('CA:TRUE'), 61 'key_usage': u('Certificate Sign, CRL Sign'), 62 'subject_key_identifier': u('7B:5B:45:CF:AF:CE:CB:7A:FD:31:92:1A:6A:B6:F3:46:EB:57:48:50') 63 } 64 65 66class TestX509Cert(EntityTestCase, unittest.TestCase): 67 klass = X509Cert 68 69 _full_dict = { 70 'version': 3, 71 'serial_number': u('34:4e:d5:57:20:d5:ed:ec:49:f4:2f:ce:37:db:2b:6d'), 72 'signature_algorithm': u('sha1WithRSAEncryption'), 73 'issuer': u('C = US, O = "thawte, Inc.", OU = Certification Services Division, OU = "(c) 2006 thawte, Inc. - For authorized use only", CN = thawte Primary Root CA'), 74 'validity': TestValidity._full_dict, 75 'subject': u('C = US, O = "thawte, Inc.", OU = Certification Services Division, OU = "(c) 2006 thawte, Inc. - For authorized use only", CN = thawte Primary Root CA'), 76 'subject_public_key': TestSubjectPublicKey._full_dict, 77 'standard_extensions': TestX509V3Extensions._full_dict, 78 } 79 80 81class TestX509CertificateSignature(EntityTestCase, unittest.TestCase): 82 klass = X509CertificateSignature 83 84 _full_dict = { 85 'signature_algorithm': u('sha1WithRSAEncryption'), 86 'signature': u('79:11:c0:4b:b3:91:b6:fc:f0:e9:67:d4:0d:6e:45:be:55:e8:93:d2:ce:03:3f:ed:da:25:b0:1d:57:cb:1e:3a:76:a0:4c:ec:50:76:e8:64:72:0c:a4:a9:f1:b8:8b:d6:d6:87:84:bb:32:e5:41:11:c0:77:d9:b3:60:9d:eb:1b:d5:d1:6e:44:44:a9:a6:01:ec:55:62:1d:77:b8:5c:8e:48:49:7c:9c:3b:57:11:ac:ad:73:37:8e:2f:78:5c:90:68:47:d9:60:60:e6:fc:07:3d:22:20:17:c4:f7:16:e9:c4:d8:72:f9:c8:73:7c:df:16:2f:15:a9:3e:fd:6a:27:b6:a1:eb:5a:ba:98:1f:d5:e3:4d:64:0a:9d:13:c8:61:ba:f5:39:1c:87:ba:b8:bd:7b:22:7f:f6:fe:ac:40:79:e5:ac:10:6f:3d:8f:1b:79:76:8b:c4:37:b3:21:18:84:e5:36:00:eb:63:20:99:b9:e9:fe:33:04:bb:41:c8:c1:02:f9:44:63:20:9e:81:ce:42:d3:d6:3f:2c:76:d3:63:9c:59:dd:8f:a6:e1:0e:a0:2e:41:f7:2e:95:47:cf:bc:fd:33:f3:f6:0b:61:7e:7e:91:2b:81:47:c2:27:30:ee:a7:10:5d:37:8f:5c:39:2b:e4:04:f0:7b:8d:56:8c:68'), 87 } 88 89 90class TestX509Certificate(ObjectTestCase, unittest.TestCase): 91 object_type = "X509CertificateObjectType" 92 klass = X509Certificate 93 94 _full_dict = { 95 'certificate': TestX509Cert._full_dict, 96 'raw_certificate': u('''-----BEGIN CERTIFICATE----- 97MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB 98qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf 99Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw 100MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV 101BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw 102NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j 103LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG 104A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl 105IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG 106SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs 107W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta 1083RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk 1096KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6 110Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J 111NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA 112MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP 113r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU 114DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz 115YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX 116xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2 117/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/ 118LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7 119jVaMaA== 120-----END CERTIFICATE-----'''), 121 'certificate_signature': TestX509CertificateSignature._full_dict, 122 'xsi:type': object_type, 123 } 124 125 126if __name__ == "__main__": 127 unittest.main() 128