blob: 932cab98595547263eaa456617bbb7c62a47a175 [file] [log] [blame]
wbond3855a152015-07-13 10:47:32 -04001# coding: utf-8
2from __future__ import unicode_literals
3
4import unittest
5import sys
6import os
7from collections import OrderedDict
8
9from asn1crypto import csr
10
11if sys.version_info < (3,):
12 byte_cls = str
13 num_cls = long #pylint: disable=E0602
14else:
15 byte_cls = bytes
16 num_cls = int
17
18
19tests_root = os.path.dirname(__file__)
20fixtures_dir = os.path.join(tests_root, 'fixtures')
21
22
23class CSRTests(unittest.TestCase):
24
25 def test_parse_csr(self):
26 with open(os.path.join(fixtures_dir, 'test-inter-der.csr'), 'rb') as f:
27 certification_request = csr.CertificationRequest.load(f.read())
28
29 cri = certification_request['certification_request_info']
30
31 self.assertEqual(
32 'v1',
33 cri['version'].native
34 )
35
36 self.assertEqual(
37 OrderedDict([
38 ('country_name', 'US'),
39 ('state_or_province_name', 'Massachusetts'),
40 ('locality_name', 'Newbury'),
41 ('organization_name', 'Codex Non Sufficit LC'),
42 ('organizational_unit_name', 'Testing Intermediate'),
43 ('common_name', 'Will Bond'),
44 ('email_address', 'will@codexns.io'),
45 ]),
46 cri['subject'].native
47 )
48 self.assertEqual(
49 OrderedDict([
50 ('algorithm', 'rsa'),
51 ('parameters', None),
52 ]),
53 cri['subject_pk_info']['algorithm'].native
54 )
55 self.assertEqual(
56 24141757533938720807477509823483015516687050697622322097001928034085434547050399731881871694642845241206788286795830006142635608141713689209738431462004600429798152826994774062467402648660593454536565119527837471261495586474194846971065722669734666949739228862107500673350843489920495869942508240779131331715037662761414997889327943217889802893638175792326783316531272170879284118280173511200768884738639370318760377047837471530387161553030663446359575963736475504659902898072137674205021477968813148345198711103071746476009234601299344030395455052526948041544669303473529511160643491569274897838845918784633403435929,
57 cri['subject_pk_info']['public_key'].parsed['modulus'].native
58 )
59 self.assertEqual(
60 65537,
61 cri['subject_pk_info']['public_key'].parsed['public_exponent'].native
62 )
63 self.assertEqual(
64 [],
65 cri['attributes'].native
66 )
67
68
69 def test_parse_csr2(self):
70 with open(os.path.join(fixtures_dir, 'test-third-der.csr'), 'rb') as f:
71 certification_request = csr.CertificationRequest.load(f.read())
72
73 cri = certification_request['certification_request_info']
74
75 self.assertEqual(
76 'v1',
77 cri['version'].native
78 )
79
80 self.assertEqual(
81 OrderedDict([
82 ('country_name', 'US'),
83 ('state_or_province_name', 'Massachusetts'),
84 ('locality_name', 'Newbury'),
85 ('organization_name', 'Codex Non Sufficit LC'),
86 ('organizational_unit_name', 'Test Third-Level Certificate'),
87 ('common_name', 'Will Bond'),
88 ('email_address', 'will@codexns.io'),
89 ]),
90 cri['subject'].native
91 )
92 self.assertEqual(
93 OrderedDict([
94 ('algorithm', 'rsa'),
95 ('parameters', None),
96 ]),
97 cri['subject_pk_info']['algorithm'].native
98 )
99 self.assertEqual(
100 24242772097421005542208203320016703216069397492249392798445262959177221203301502279838173203064357049006693856302147277901773700963054800321566171864477088538775137040886151390015408166478059887940234405152693144166884492162723776487601158833605063151869850475289834250129252480954724818505034734280077580919995584375189497366089269712298471489896645221362055822887892887126082288043106492130176555423739906252380437817155678204772878611148787130925042126257401487070141904017757131876614711613405231164930930771261221451019736883391322299033324412671768599041417705072563016759224152503535867541947310239343903761461,
101 cri['subject_pk_info']['public_key'].parsed['modulus'].native
102 )
103 self.assertEqual(
104 65537,
105 cri['subject_pk_info']['public_key'].parsed['public_exponent'].native
106 )
107 self.assertEqual(
108 [
109 OrderedDict([
110 ('type', 'extension_request'),
111 (
112 'values',
113 [
114 [
115 OrderedDict([
116 ('extn_id', 'basic_constraints'),
117 ('critical', False),
118 (
119 'extn_value',
120 OrderedDict([
121 ('ca', False),
122 ('path_len_constraint', None),
123 ])
124 ),
125 ]),
126 OrderedDict([
127 ('extn_id', 'key_usage'),
128 ('critical', False),
129 (
130 'extn_value',
131 (1, 1, 1),
132 ),
133 ])
134 ]
135 ]
136 ),
137 ]),
138 ],
139 cri['attributes'].native
140 )