Merge "Add unit tests for managed objects"
Jenkins authored 8 years ago
Gerrit Code Review committed 8 years ago
19 | 19 | |
20 | 20 | class TestCase(base.BaseTestCase): |
21 | 21 | |
22 | """Test case base class for all tests.""" | |
22 | """Test case base class for all unit tests.""" | |
23 | ||
24 | ||
25 | class CertificateTestCase(TestCase): | |
26 | ||
27 | def _create_cert(self): | |
28 | raise NotImplementedError() | |
29 | ||
30 | def setUp(self): | |
31 | super(CertificateTestCase, self).setUp() | |
32 | ||
33 | self.cert = self._create_cert() | |
34 | ||
35 | ||
36 | class KeyTestCase(TestCase): | |
37 | ||
38 | def _create_key(self): | |
39 | raise NotImplementedError() | |
40 | ||
41 | def setUp(self): | |
42 | super(KeyTestCase, self).setUp() | |
43 | ||
44 | self.key = self._create_key() |
0 | # Copyright (c) 2015 The Johns Hopkins University/Applied Physics Laboratory | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | """ | |
16 | Test cases for the symmetric key class. | |
17 | """ | |
18 | ||
19 | from castellan.common.objects import symmetric_key as sym_key | |
20 | from castellan.tests import base | |
21 | ||
22 | ||
23 | class KeyTestCase(base.TestCase): | |
24 | ||
25 | def _create_key(self): | |
26 | raise NotImplementedError() | |
27 | ||
28 | def setUp(self): | |
29 | super(KeyTestCase, self).setUp() | |
30 | ||
31 | self.key = self._create_key() | |
32 | ||
33 | ||
34 | class SymmetricKeyTestCase(KeyTestCase): | |
35 | ||
36 | def _create_key(self): | |
37 | return sym_key.SymmetricKey(self.algorithm, | |
38 | self.bit_length, | |
39 | self.encoded) | |
40 | ||
41 | def setUp(self): | |
42 | self.algorithm = 'AES' | |
43 | self.encoded = bytes(b'0' * 64) | |
44 | self.bit_length = len(self.encoded) * 8 | |
45 | ||
46 | super(SymmetricKeyTestCase, self).setUp() | |
47 | ||
48 | def test_get_format(self): | |
49 | self.assertEqual('RAW', self.key.format) | |
50 | ||
51 | def test_get_encoded(self): | |
52 | self.assertEqual(self.encoded, self.key.get_encoded()) | |
53 | ||
54 | def test_get_algorithm(self): | |
55 | self.assertEqual(self.algorithm, self.key.algorithm) | |
56 | ||
57 | def test_get_bit_length(self): | |
58 | self.assertEqual(self.bit_length, self.key.bit_length) | |
59 | ||
60 | def test___eq__(self): | |
61 | self.assertTrue(self.key == self.key) | |
62 | ||
63 | self.assertFalse(self.key is None) | |
64 | self.assertFalse(None == self.key) | |
65 | ||
66 | def test___ne__(self): | |
67 | self.assertFalse(self.key != self.key) | |
68 | ||
69 | self.assertTrue(self.key is not None) | |
70 | self.assertTrue(None != self.key) |
0 | # Copyright (c) 2015 The Johns Hopkins University/Applied Physics Laboratory | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | """ | |
16 | Test cases for the opaque data class. | |
17 | """ | |
18 | ||
19 | from castellan.common.objects import opaque_data | |
20 | from castellan.tests import base | |
21 | ||
22 | ||
23 | class OpaqueDataTestCase(base.TestCase): | |
24 | ||
25 | def _create_data(self): | |
26 | return opaque_data.OpaqueData(self.data) | |
27 | ||
28 | def setUp(self): | |
29 | self.data = bytes(b"secret opaque data") | |
30 | self.opaque_data = self._create_data() | |
31 | ||
32 | super(OpaqueDataTestCase, self).setUp() | |
33 | ||
34 | def test_get_format(self): | |
35 | self.assertEqual('Opaque', self.opaque_data.format) | |
36 | ||
37 | def test_get_encoded(self): | |
38 | self.assertEqual(self.data, self.opaque_data.get_encoded()) | |
39 | ||
40 | def test___eq__(self): | |
41 | self.assertTrue(self.opaque_data == self.opaque_data) | |
42 | ||
43 | self.assertFalse(self.opaque_data is None) | |
44 | self.assertFalse(None == self.opaque_data) | |
45 | ||
46 | def test___ne__(self): | |
47 | self.assertFalse(self.opaque_data != self.opaque_data) | |
48 | ||
49 | self.assertTrue(self.opaque_data is not None) | |
50 | self.assertTrue(None != self.opaque_data) |
0 | # Copyright (c) 2015 The Johns Hopkins University/Applied Physics Laboratory | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | """ | |
16 | Test cases for the passphrase class. | |
17 | """ | |
18 | ||
19 | from castellan.common.objects import passphrase | |
20 | from castellan.tests import base | |
21 | ||
22 | ||
23 | class PassphraseTestCase(base.TestCase): | |
24 | ||
25 | def _create_passphrase(self): | |
26 | return passphrase.Passphrase(self.passphrase_data) | |
27 | ||
28 | def setUp(self): | |
29 | self.passphrase_data = bytes(b"secret passphrase") | |
30 | self.passphrase = self._create_passphrase() | |
31 | ||
32 | super(PassphraseTestCase, self).setUp() | |
33 | ||
34 | def test_get_format(self): | |
35 | self.assertEqual('RAW', self.passphrase.format) | |
36 | ||
37 | def test_get_encoded(self): | |
38 | self.assertEqual(self.passphrase_data, self.passphrase.get_encoded()) | |
39 | ||
40 | def test___eq__(self): | |
41 | self.assertTrue(self.passphrase == self.passphrase) | |
42 | ||
43 | self.assertFalse(self.passphrase is None) | |
44 | self.assertFalse(None == self.passphrase) | |
45 | ||
46 | def test___ne__(self): | |
47 | self.assertFalse(self.passphrase != self.passphrase) | |
48 | ||
49 | self.assertTrue(self.passphrase is not None) | |
50 | self.assertTrue(None != self.passphrase) |
0 | # Copyright (c) 2015 The Johns Hopkins University/Applied Physics Laboratory | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | """ | |
16 | Test cases for the private key class. | |
17 | """ | |
18 | ||
19 | from castellan.common.objects import private_key | |
20 | from castellan.tests import base | |
21 | from castellan.tests import utils | |
22 | ||
23 | ||
24 | class PrivateKeyTestCase(base.KeyTestCase): | |
25 | ||
26 | def _create_key(self): | |
27 | return private_key.PrivateKey(self.algorithm, | |
28 | self.length, | |
29 | self.encoded) | |
30 | ||
31 | def setUp(self): | |
32 | self.algorithm = 'RSA' | |
33 | self.length = 2048 | |
34 | self.encoded = bytes(utils.get_private_key_der()) | |
35 | ||
36 | super(PrivateKeyTestCase, self).setUp() | |
37 | ||
38 | def test_get_algorithm(self): | |
39 | self.assertEqual(self.algorithm, self.key.algorithm) | |
40 | ||
41 | def test_get_length(self): | |
42 | self.assertEqual(self.length, self.key.bit_length) | |
43 | ||
44 | def test_get_format(self): | |
45 | self.assertEqual('PKCS8', self.key.format) | |
46 | ||
47 | def test_get_encoded(self): | |
48 | self.assertEqual(self.encoded, self.key.get_encoded()) | |
49 | ||
50 | def test___eq__(self): | |
51 | self.assertTrue(self.key == self.key) | |
52 | ||
53 | self.assertFalse(self.key is None) | |
54 | self.assertFalse(None == self.key) | |
55 | ||
56 | def test___ne__(self): | |
57 | self.assertFalse(self.key != self.key) | |
58 | ||
59 | self.assertTrue(self.key is not None) | |
60 | self.assertTrue(None != self.key) |
0 | # Copyright (c) 2015 The Johns Hopkins University/Applied Physics Laboratory | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | """ | |
16 | Test cases for the public key class. | |
17 | """ | |
18 | ||
19 | from castellan.common.objects import public_key | |
20 | from castellan.tests import base | |
21 | from castellan.tests import utils | |
22 | ||
23 | ||
24 | class PublicKeyTestCase(base.KeyTestCase): | |
25 | ||
26 | def _create_key(self): | |
27 | return public_key.PublicKey(self.algorithm, self.length, self.encoded) | |
28 | ||
29 | def setUp(self): | |
30 | self.algorithm = 'RSA' | |
31 | self.length = 2048 | |
32 | self.encoded = bytes(utils.get_public_key_der()) | |
33 | ||
34 | super(PublicKeyTestCase, self).setUp() | |
35 | ||
36 | def test_get_algorithm(self): | |
37 | self.assertEqual(self.algorithm, self.key.algorithm) | |
38 | ||
39 | def test_get_length(self): | |
40 | self.assertEqual(self.length, self.key.bit_length) | |
41 | ||
42 | def test_get_format(self): | |
43 | self.assertEqual('SubjectPublicKeyInfo', self.key.format) | |
44 | ||
45 | def test_get_encoded(self): | |
46 | self.assertEqual(self.encoded, self.key.get_encoded()) | |
47 | ||
48 | def test___eq__(self): | |
49 | self.assertTrue(self.key == self.key) | |
50 | ||
51 | self.assertFalse(self.key is None) | |
52 | self.assertFalse(None == self.key) | |
53 | ||
54 | def test___ne__(self): | |
55 | self.assertFalse(self.key != self.key) | |
56 | ||
57 | self.assertTrue(self.key is not None) | |
58 | self.assertTrue(None != self.key) |
0 | # Copyright (c) 2015 The Johns Hopkins University/Applied Physics Laboratory | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | """ | |
16 | Test cases for the symmetric key class. | |
17 | """ | |
18 | ||
19 | from castellan.common.objects import symmetric_key as sym_key | |
20 | from castellan.tests import base | |
21 | ||
22 | ||
23 | class SymmetricKeyTestCase(base.KeyTestCase): | |
24 | ||
25 | def _create_key(self): | |
26 | return sym_key.SymmetricKey(self.algorithm, | |
27 | self.bit_length, | |
28 | self.encoded) | |
29 | ||
30 | def setUp(self): | |
31 | self.algorithm = 'AES' | |
32 | self.encoded = bytes(b'0' * 64) | |
33 | self.bit_length = len(self.encoded) * 8 | |
34 | ||
35 | super(SymmetricKeyTestCase, self).setUp() | |
36 | ||
37 | def test_get_format(self): | |
38 | self.assertEqual('RAW', self.key.format) | |
39 | ||
40 | def test_get_encoded(self): | |
41 | self.assertEqual(self.encoded, self.key.get_encoded()) | |
42 | ||
43 | def test_get_algorithm(self): | |
44 | self.assertEqual(self.algorithm, self.key.algorithm) | |
45 | ||
46 | def test_get_bit_length(self): | |
47 | self.assertEqual(self.bit_length, self.key.bit_length) | |
48 | ||
49 | def test___eq__(self): | |
50 | self.assertTrue(self.key == self.key) | |
51 | ||
52 | self.assertFalse(self.key is None) | |
53 | self.assertFalse(None == self.key) | |
54 | ||
55 | def test___ne__(self): | |
56 | self.assertFalse(self.key != self.key) | |
57 | ||
58 | self.assertTrue(self.key is not None) | |
59 | self.assertTrue(None != self.key) |
0 | # Copyright (c) 2015 The Johns Hopkins University/Applied Physics Laboratory | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | """ | |
16 | Test cases for the X.509 certificate class. | |
17 | """ | |
18 | ||
19 | from castellan.common.objects import x_509 | |
20 | from castellan.tests import base | |
21 | from castellan.tests import utils | |
22 | ||
23 | ||
24 | class X509TestCase(base.CertificateTestCase): | |
25 | ||
26 | def _create_cert(self): | |
27 | return x_509.X509(self.data) | |
28 | ||
29 | def setUp(self): | |
30 | self.data = utils.get_certificate_der() | |
31 | ||
32 | super(X509TestCase, self).setUp() | |
33 | ||
34 | def test_get_format(self): | |
35 | self.assertEqual('X.509', self.cert.format) | |
36 | ||
37 | def test_get_encoded(self): | |
38 | self.assertEqual(self.data, self.cert.get_encoded()) | |
39 | ||
40 | def test___eq__(self): | |
41 | self.assertTrue(self.cert == self.cert) | |
42 | ||
43 | self.assertFalse(self.cert is None) | |
44 | self.assertFalse(None == self.cert) | |
45 | ||
46 | def test___ne__(self): | |
47 | self.assertFalse(self.cert != self.cert) | |
48 | ||
49 | self.assertTrue(self.cert is not None) | |
50 | self.assertTrue(None != self.cert) |
0 | # Copyright (c) 2015 | |
1 | # All Rights Reserved. | |
2 | # | |
3 | # Licensed under the Apache License, Version 2.0 (the "License"); you may | |
4 | # not use this file except in compliance with the License. You may obtain | |
5 | # a copy of the License at | |
6 | # | |
7 | # http://www.apache.org/licenses/LICENSE-2.0 | |
8 | # | |
9 | # Unless required by applicable law or agreed to in writing, software | |
10 | # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
11 | # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
12 | # License for the specific language governing permissions and limitations | |
13 | # under the License. | |
14 | ||
15 | ||
16 | """ | |
17 | These utilility functions are borrowed from Barbican's testing utilites. | |
18 | """ | |
19 | ||
20 | ||
21 | def get_certificate_der(): | |
22 | """Returns an X509 certificate in DER format | |
23 | ||
24 | This certificate was created by issuing the following openssl commands: | |
25 | openssl genrsa -out private.pem 2048 | |
26 | openssl req -new -x509 -key private.pem -out cert.pem \ | |
27 | -days 1000 -subj '/CN=example.com' | |
28 | openssl x509 -outform der -in cert.pem -out cert.der | |
29 | The byte string returned by this function is the contents | |
30 | of the cert.der file. | |
31 | """ | |
32 | cert_der = ( | |
33 | b'\x30\x82\x02\xff\x30\x82\x01\xe7\xa0\x03\x02\x01\x02\x02\x09' | |
34 | b'\x00\xe2\xea\x5c\xa2\x7d\xab\xdf\xe7\x30\x0d\x06\x09\x2a\x86' | |
35 | b'\x48\x86\xf7\x0d\x01\x01\x0b\x05\x00\x30\x16\x31\x14\x30\x12' | |
36 | b'\x06\x03\x55\x04\x03\x0c\x0b\x65\x78\x61\x6d\x70\x6c\x65\x2e' | |
37 | b'\x63\x6f\x6d\x30\x1e\x17\x0d\x31\x35\x30\x34\x31\x31\x30\x32' | |
38 | b'\x31\x35\x32\x39\x5a\x17\x0d\x31\x38\x30\x31\x30\x35\x30\x32' | |
39 | b'\x31\x35\x32\x39\x5a\x30\x16\x31\x14\x30\x12\x06\x03\x55\x04' | |
40 | b'\x03\x0c\x0b\x65\x78\x61\x6d\x70\x6c\x65\x2e\x63\x6f\x6d\x30' | |
41 | b'\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01' | |
42 | b'\x01\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a\x02\x82\x01' | |
43 | b'\x01\x00\xb3\x6b\x65\x68\x0d\x79\x81\x50\xc9\xb0\x8c\x5b\xbd' | |
44 | b'\x17\xa3\x0c\xe6\xaf\xc0\x67\x55\xa3\x9d\x60\x36\x60\xd7\x4d' | |
45 | b'\xcb\x6d\xfb\x4e\xb1\x8d\xfe\x7a\x1b\x0c\x3b\xfc\x14\x10\x69' | |
46 | b'\x50\xf9\x87\x35\x9d\x38\x1f\x52\xf2\xc4\x57\x0f\xf1\x17\x85' | |
47 | b'\xad\xc2\x17\xa6\x27\xec\x45\xeb\xb6\x94\x05\x9a\xa9\x13\xf1' | |
48 | b'\xa2\xfb\xb9\x0a\xe0\x21\x7d\xe7\x0a\xbf\xe4\x61\x8c\xb5\x4b' | |
49 | b'\x27\x42\x3e\x31\x92\x1b\xef\x64\x4e\x2a\x97\xd9\x4e\x66\xfb' | |
50 | b'\x76\x19\x45\x80\x60\xf7\xbe\x40\xb9\xd4\x10\x9f\x84\x65\x56' | |
51 | b'\xdf\x9c\x39\xd8\xe6\x3f\xdb\x7c\x79\x31\xe3\xb8\xca\xfc\x79' | |
52 | b'\x9b\x23\xdc\x72\x7c\x4c\x55\x0e\x36\x2a\xe0\xeb\xcc\xaa\xa3' | |
53 | b'\x06\x54\xa3\x98\x19\xdc\xa4\x66\x31\xd0\x98\x02\x4f\xeb\x32' | |
54 | b'\x16\x61\xec\x97\xca\xce\x92\xa0\x8f\x3c\x52\xe8\xdb\x86\x10' | |
55 | b'\x9f\xee\x3f\xa6\xbd\x40\x63\x06\x99\x01\xb3\x13\x97\xdc\xe8' | |
56 | b'\x2e\xd1\x10\x8f\xab\x31\x49\xcb\x87\x71\x2f\x5e\xf2\x78\xa9' | |
57 | b'\xb4\x3c\x65\xb1\xb2\xd0\x82\xa1\x95\x68\x67\x44\xd7\x5e\xec' | |
58 | b'\xb4\x2f\x79\x40\x7e\xd4\xbc\x84\xdb\xb9\x8c\xdd\x8d\x9c\x01' | |
59 | b'\x15\xcd\x52\x83\x3f\x06\x67\xfd\xa1\x2d\x2b\x07\xba\x32\x62' | |
60 | b'\x21\x07\x2f\x02\x03\x01\x00\x01\xa3\x50\x30\x4e\x30\x1d\x06' | |
61 | b'\x03\x55\x1d\x0e\x04\x16\x04\x14\x94\xab\x60\x34\x6f\x65\xe8' | |
62 | b'\xfa\xc2\xaf\x98\xa8\x0d\xf1\x6a\xbc\x97\xa8\xfc\xda\x30\x1f' | |
63 | b'\x06\x03\x55\x1d\x23\x04\x18\x30\x16\x80\x14\x94\xab\x60\x34' | |
64 | b'\x6f\x65\xe8\xfa\xc2\xaf\x98\xa8\x0d\xf1\x6a\xbc\x97\xa8\xfc' | |
65 | b'\xda\x30\x0c\x06\x03\x55\x1d\x13\x04\x05\x30\x03\x01\x01\xff' | |
66 | b'\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01\x01\x0b\x05\x00' | |
67 | b'\x03\x82\x01\x01\x00\x63\x8a\xea\xa1\x97\x33\x55\x39\x52\xeb' | |
68 | b'\x1c\x34\x32\x1a\xbd\x1f\x4c\x00\x85\x25\xd0\xd1\x12\x7b\xa1' | |
69 | b'\x66\x9e\x1d\xf7\x5f\xbe\x0e\x63\x02\x4f\xe6\xdc\x4c\x6d\x3e' | |
70 | b'\x18\x2a\x77\xad\xf1\x4e\xb8\x45\xa9\x24\xb2\xcb\x3d\xd4\x8e' | |
71 | b'\x9c\x8b\x27\x89\xbb\x0e\xb3\x22\x8f\x5e\xe0\x41\x5f\x99\x26' | |
72 | b'\x75\x82\x28\x8d\xb7\x63\x51\x34\xb0\x9e\x17\x31\xf4\x94\xc0' | |
73 | b'\x7c\xa4\xa6\xc5\x75\x92\x0b\x4a\xe7\x28\x27\x9f\x01\xfe\x38' | |
74 | b'\x32\x6e\x9f\xaa\xfa\x13\xc9\x36\xde\x19\x24\x0f\xea\x71\xf3' | |
75 | b'\x73\xb7\x8b\x68\xaf\xde\x7d\xca\xcc\xbd\x87\x5c\xb7\xe4\xde' | |
76 | b'\x4e\x41\xe3\xa9\x1f\x0b\xbb\x8a\x63\x66\xf4\x5d\x51\x06\x9d' | |
77 | b'\x40\x78\x43\xc8\xdf\x8e\x34\xa7\x4a\x0f\xd4\xeb\x8e\xf7\xcf' | |
78 | b'\x8a\x6d\x1b\xec\x0a\xbc\xf3\x93\xe3\x48\xde\x90\xa3\x86\x7d' | |
79 | b'\x1d\x74\x7a\xfa\x72\xbe\x6d\x3c\xfd\x1f\x25\x00\x4c\xc7\xc3' | |
80 | b'\x18\xd4\x2d\xd0\xbd\xef\xc9\xf5\x71\x6c\xd3\xb1\x90\x20\x5c' | |
81 | b'\x60\x8e\x21\x16\xd1\x9f\x90\xec\xdd\xe8\x1e\xeb\xda\xc6\x35' | |
82 | b'\xc0\x62\x9d\x4c\xb1\xe4\xb9\x3e\x26\xe3\xff\x40\xfd\x23\xb3' | |
83 | b'\xbe\x71\xfe\x7a\x99\xc9\xa8\x84\xbd\x8f\x0f\xb5\x89\x18\xfc' | |
84 | b'\xc5\xc0\xc0\xe8\xf3\x53') | |
85 | return cert_der | |
86 | ||
87 | ||
88 | def get_private_key_der(): | |
89 | """Returns a private key in DER format | |
90 | ||
91 | This key was created by issuing the following openssl commands: | |
92 | openssl genrsa -out private.pem 2048 | |
93 | openssl pkcs8 -in private.pem -topk8 -nocrypt \ | |
94 | -outform DER -out private_pk8.der | |
95 | The byte string returned by this function is the contents | |
96 | of the private_pk8.der file. | |
97 | """ | |
98 | key_der = ( | |
99 | b'\x30\x82\x04\xbf\x02\x01\x00\x30\x0d\x06\x09\x2a\x86\x48\x86' | |
100 | b'\xf7\x0d\x01\x01\x01\x05\x00\x04\x82\x04\xa9\x30\x82\x04\xa5' | |
101 | b'\x02\x01\x00\x02\x82\x01\x01\x00\xb3\x6b\x65\x68\x0d\x79\x81' | |
102 | b'\x50\xc9\xb0\x8c\x5b\xbd\x17\xa3\x0c\xe6\xaf\xc0\x67\x55\xa3' | |
103 | b'\x9d\x60\x36\x60\xd7\x4d\xcb\x6d\xfb\x4e\xb1\x8d\xfe\x7a\x1b' | |
104 | b'\x0c\x3b\xfc\x14\x10\x69\x50\xf9\x87\x35\x9d\x38\x1f\x52\xf2' | |
105 | b'\xc4\x57\x0f\xf1\x17\x85\xad\xc2\x17\xa6\x27\xec\x45\xeb\xb6' | |
106 | b'\x94\x05\x9a\xa9\x13\xf1\xa2\xfb\xb9\x0a\xe0\x21\x7d\xe7\x0a' | |
107 | b'\xbf\xe4\x61\x8c\xb5\x4b\x27\x42\x3e\x31\x92\x1b\xef\x64\x4e' | |
108 | b'\x2a\x97\xd9\x4e\x66\xfb\x76\x19\x45\x80\x60\xf7\xbe\x40\xb9' | |
109 | b'\xd4\x10\x9f\x84\x65\x56\xdf\x9c\x39\xd8\xe6\x3f\xdb\x7c\x79' | |
110 | b'\x31\xe3\xb8\xca\xfc\x79\x9b\x23\xdc\x72\x7c\x4c\x55\x0e\x36' | |
111 | b'\x2a\xe0\xeb\xcc\xaa\xa3\x06\x54\xa3\x98\x19\xdc\xa4\x66\x31' | |
112 | b'\xd0\x98\x02\x4f\xeb\x32\x16\x61\xec\x97\xca\xce\x92\xa0\x8f' | |
113 | b'\x3c\x52\xe8\xdb\x86\x10\x9f\xee\x3f\xa6\xbd\x40\x63\x06\x99' | |
114 | b'\x01\xb3\x13\x97\xdc\xe8\x2e\xd1\x10\x8f\xab\x31\x49\xcb\x87' | |
115 | b'\x71\x2f\x5e\xf2\x78\xa9\xb4\x3c\x65\xb1\xb2\xd0\x82\xa1\x95' | |
116 | b'\x68\x67\x44\xd7\x5e\xec\xb4\x2f\x79\x40\x7e\xd4\xbc\x84\xdb' | |
117 | b'\xb9\x8c\xdd\x8d\x9c\x01\x15\xcd\x52\x83\x3f\x06\x67\xfd\xa1' | |
118 | b'\x2d\x2b\x07\xba\x32\x62\x21\x07\x2f\x02\x03\x01\x00\x01\x02' | |
119 | b'\x82\x01\x00\x30\xe9\x54\x29\xbb\x92\xa6\x28\x29\xf3\x91\x2f' | |
120 | b'\xe9\x2a\xaa\x6e\x77\xec\xed\x9c\xbe\x01\xee\x83\x2e\x0f\xd4' | |
121 | b'\x62\x06\xd5\x22\xaf\x5f\x44\x00\x5d\xb5\x45\xee\x8c\x57\xc3' | |
122 | b'\xe9\x92\x03\x94\x52\x8f\x5b\x9f\x5e\x73\x84\x06\xdf\xf7\xaf' | |
123 | b'\x9b\xe7\xb4\x83\xd1\xee\x0c\x41\x3b\x72\xf8\x83\x56\x98\x45' | |
124 | b'\x31\x98\x66\xdb\x19\x15\xe4\xcb\x77\xd2\xbc\x61\x3c\x1e\xa9' | |
125 | b'\xc5\xa5\x1c\x2f\xec\x3f\x92\x91\xfe\x5c\x38\xcc\x50\x97\x49' | |
126 | b'\x07\xc0\x38\x3f\x74\x31\xfb\x17\xc8\x79\x60\x50\x6f\xcc\x1d' | |
127 | b'\xfc\x42\xd5\x4a\x07\xd1\x2d\x13\x5e\xa9\x82\xf4\xd0\xa5\xd5' | |
128 | b'\xb3\x4e\x3f\x14\xe0\x44\x86\xa4\xa2\xaa\x2f\xe8\x1d\x82\x78' | |
129 | b'\x83\x13\x6b\x4a\x82\x0d\x5f\xbd\x4f\x1d\x56\xda\x12\x29\x08' | |
130 | b'\xca\x0c\xe2\xe0\x76\x55\xc8\xcb\xad\xdc\xb1\x3a\x71\xe1\xf3' | |
131 | b'\x7d\x28\xfb\xd5\xfb\x67\xf9\x48\xb4\x4f\x39\x0b\x39\xbf\x8d' | |
132 | b'\xa0\x13\xf7\xd6\x16\x87\x0b\xfb\x1f\x0a\xba\x4a\x83\xb4\x2d' | |
133 | b'\x50\xff\x6a\xf5\xd4\x6a\xe9\xd6\x5c\x23\x5e\xea\xe5\xde\xe8' | |
134 | b'\x11\xd1\x13\x78\x34\x4a\x85\x3d\xaf\x9b\xb6\xf1\xd9\xb2\xc6' | |
135 | b'\x78\x5d\x70\xd8\x7f\x41\xfd\x5f\x35\xba\x98\xe2\x01\xa8\x76' | |
136 | b'\x45\x59\xde\x71\x02\x81\x81\x00\xec\x7c\x74\xa3\x47\x58\x1d' | |
137 | b'\xf9\x21\xf0\xff\x60\x3d\x49\xa5\xd2\xd6\x4f\x4b\x79\x72\xed' | |
138 | b'\xf9\x46\xc3\x41\xd6\xe3\x60\xeb\x21\xe4\xba\x13\xf8\x43\x7f' | |
139 | b'\xba\xd3\xbb\xd1\x1c\x83\x62\xa8\xe5\x87\x3a\x89\xcd\xc8\x8a' | |
140 | b'\x4e\xe0\x16\xe5\x25\x4f\x0b\xa8\x10\xb8\x2a\x69\x03\x6f\x4a' | |
141 | b'\x9e\xda\xbb\xc7\x5f\x8b\xc3\xfe\x30\x1b\xde\x3b\xa6\x85\xdb' | |
142 | b'\xeb\x4b\x4b\x76\x0d\xc1\x2b\x99\x81\x15\x33\x91\x93\x90\x13' | |
143 | b'\xa8\x0c\x15\xab\xbb\x7e\xd8\xdb\x52\xe5\x2f\xc9\xba\x7c\xec' | |
144 | b'\xe7\x1a\xd1\xa2\x50\xc5\x9d\x25\xf8\x2a\x7b\xd5\x97\xa2\x63' | |
145 | b'\xdd\x02\x81\x81\x00\xc2\x39\x76\x53\x55\x74\x4f\x10\x58\x67' | |
146 | b'\xaa\x7a\x8b\x12\xb6\x5e\xe8\x42\x64\xc9\x2c\x06\xf3\x08\x2d' | |
147 | b'\x39\xd0\xa6\xaf\xae\xb4\x6e\x87\x18\xd6\x2f\x6f\x57\xe4\x5a' | |
148 | b'\x33\x58\x80\x44\x75\xfa\xbb\xfb\x2e\x32\x19\x33\xfb\x72\x91' | |
149 | b'\x8a\x7c\xf1\x20\x6e\x60\x42\xcc\xa2\x5a\x64\xe9\x15\x5d\xbd' | |
150 | b'\xf1\x6f\x6f\x91\x1b\x66\xb0\x24\x03\x9f\x69\xb2\xf7\x4c\xaf' | |
151 | b'\xe1\xee\xac\x2c\x8d\x27\x83\xb9\x7f\x37\x7a\xfb\x0b\x02\xcb' | |
152 | b'\x34\x85\x7f\x0a\xa7\xb2\x68\xde\x34\xb2\xec\xc4\xf0\x08\xe0' | |
153 | b'\x12\x06\xb9\x8d\x3b\x9a\xe9\xb3\xf9\x9b\xec\x7c\x7b\x02\x81' | |
154 | b'\x81\x00\x9e\xb9\x6d\xc3\xc5\x77\xe4\x2e\x39\xd4\xba\x63\x0a' | |
155 | b'\xdf\xaa\x97\xd7\x55\xc3\x6f\x91\x6f\x1e\x37\x9b\x88\x4e\x45' | |
156 | b'\xb0\xe0\x40\x90\x77\x40\x3e\x0a\x77\xe9\x9a\x81\x5d\xfa\x08' | |
157 | b'\x49\x28\xd9\x5d\xa9\x31\xa2\xd7\xed\xd4\xc0\xdd\x3d\x11\x8c' | |
158 | b'\x7b\x63\x63\x4d\x68\xd1\xb1\x07\x7a\x8b\x22\x7e\x94\x73\x91' | |
159 | b'\xa8\x8b\xac\x18\x98\x51\x6b\x14\x3f\x26\x2f\x14\x47\xf9\x35' | |
160 | b'\x65\x21\x13\x9d\x7a\x4e\x44\x3f\x98\xa1\xda\xf2\x94\xa0\x34' | |
161 | b'\xa4\x32\x98\xf1\xd0\xe0\x51\xf5\xd5\x3f\xcc\x25\x56\x0f\x66' | |
162 | b'\x83\x72\x5f\x9d\x8c\x1e\x31\x37\x42\x55\x02\x81\x81\x00\xb1' | |
163 | b'\xd7\x7d\xe2\x36\x68\x26\x91\x37\xf1\xcc\x67\x22\xfb\x02\x64' | |
164 | b'\x8a\xd5\x68\x85\xd0\x3b\x98\xc3\x8e\xed\xd6\x81\x1a\x72\xa5' | |
165 | b'\x22\x63\xaf\xb9\x47\x7b\xf3\x85\xd3\x96\x1a\x5e\x70\xd1\x7a' | |
166 | b'\xc2\x2f\xf0\x0f\xcd\x86\x0c\xa2\xce\x63\x79\x9e\x2c\xed\x04' | |
167 | b'\x55\x86\x1c\xcf\x1a\x81\x56\xa0\x1c\x71\x7b\x71\x33\xf4\x5c' | |
168 | b'\x25\xc3\x04\x52\x2e\xad\xc1\xc5\xc5\x72\xe2\x61\x62\xf5\xe9' | |
169 | b'\x0d\xb3\x87\xaa\x5c\x80\x8c\x87\x85\x5b\xd5\x35\x0b\xa3\x9c' | |
170 | b'\x38\x6b\xe6\xe3\x42\xeb\xdd\x42\xb3\x31\xae\x58\xae\xda\xba' | |
171 | b'\x31\x6e\x2b\x8b\xbb\x92\x0b\x02\x81\x81\x00\xdf\x76\xa5\x63' | |
172 | b'\x4f\x8b\x97\x98\x6c\x0e\x87\x5c\xf8\x3f\x3b\xfa\x18\x2a\x1c' | |
173 | b'\xfb\xa1\xa8\x6d\x78\x38\x0e\xfb\xc2\x52\x33\xfd\x31\x1f\xb6' | |
174 | b'\xfb\x9b\x17\xd0\x06\x3f\x7f\xe6\x95\x08\x3d\x39\xfc\xd8\xf4' | |
175 | b'\x46\xaa\x40\xc1\x47\x34\xdf\x36\x54\xe5\x9b\x4b\xda\xe3\x5e' | |
176 | b'\xe9\x70\xe3\x12\xe8\x1f\x16\xd9\x73\x79\xae\xbe\xad\xb0\xfa' | |
177 | b'\x2a\x91\x52\xfa\x7c\x4f\x24\x0f\x18\xc9\x66\x11\xa4\xd8\x69' | |
178 | b'\x45\x61\x96\x41\xa9\x07\x79\xda\xf7\x06\xd3\x2d\x1a\xcd\x21' | |
179 | b'\xa4\xa3\x40\x40\x6e\xf6\x1c\xa5\xad\x49\xf2\x50\x31\x7b\xe7' | |
180 | b'\xd9\x19\x62\x70') | |
181 | return key_der | |
182 | ||
183 | ||
184 | def get_public_key_der(): | |
185 | """Returns a public key in DER format | |
186 | ||
187 | This key was created by issuing the following openssl commands: | |
188 | openssl genrsa -out private.pem 2048 | |
189 | openssl rsa -in private.pem -pubout > public.pem | |
190 | The byte string returned by this function is the contents | |
191 | of the public.der file. | |
192 | """ | |
193 | key_der = ( | |
194 | b'\x30\x82\x01\x22\x30\x0d\x06\x09\x2a\x86\x48\x86\xf7\x0d\x01' | |
195 | b'\x01\x01\x05\x00\x03\x82\x01\x0f\x00\x30\x82\x01\x0a\x02\x82' | |
196 | b'\x01\x01\x00\xb3\x6b\x65\x68\x0d\x79\x81\x50\xc9\xb0\x8c\x5b' | |
197 | b'\xbd\x17\xa3\x0c\xe6\xaf\xc0\x67\x55\xa3\x9d\x60\x36\x60\xd7' | |
198 | b'\x4d\xcb\x6d\xfb\x4e\xb1\x8d\xfe\x7a\x1b\x0c\x3b\xfc\x14\x10' | |
199 | b'\x69\x50\xf9\x87\x35\x9d\x38\x1f\x52\xf2\xc4\x57\x0f\xf1\x17' | |
200 | b'\x85\xad\xc2\x17\xa6\x27\xec\x45\xeb\xb6\x94\x05\x9a\xa9\x13' | |
201 | b'\xf1\xa2\xfb\xb9\x0a\xe0\x21\x7d\xe7\x0a\xbf\xe4\x61\x8c\xb5' | |
202 | b'\x4b\x27\x42\x3e\x31\x92\x1b\xef\x64\x4e\x2a\x97\xd9\x4e\x66' | |
203 | b'\xfb\x76\x19\x45\x80\x60\xf7\xbe\x40\xb9\xd4\x10\x9f\x84\x65' | |
204 | b'\x56\xdf\x9c\x39\xd8\xe6\x3f\xdb\x7c\x79\x31\xe3\xb8\xca\xfc' | |
205 | b'\x79\x9b\x23\xdc\x72\x7c\x4c\x55\x0e\x36\x2a\xe0\xeb\xcc\xaa' | |
206 | b'\xa3\x06\x54\xa3\x98\x19\xdc\xa4\x66\x31\xd0\x98\x02\x4f\xeb' | |
207 | b'\x32\x16\x61\xec\x97\xca\xce\x92\xa0\x8f\x3c\x52\xe8\xdb\x86' | |
208 | b'\x10\x9f\xee\x3f\xa6\xbd\x40\x63\x06\x99\x01\xb3\x13\x97\xdc' | |
209 | b'\xe8\x2e\xd1\x10\x8f\xab\x31\x49\xcb\x87\x71\x2f\x5e\xf2\x78' | |
210 | b'\xa9\xb4\x3c\x65\xb1\xb2\xd0\x82\xa1\x95\x68\x67\x44\xd7\x5e' | |
211 | b'\xec\xb4\x2f\x79\x40\x7e\xd4\xbc\x84\xdb\xb9\x8c\xdd\x8d\x9c' | |
212 | b'\x01\x15\xcd\x52\x83\x3f\x06\x67\xfd\xa1\x2d\x2b\x07\xba\x32' | |
213 | b'\x62\x21\x07\x2f\x02\x03\x01\x00\x01') | |
214 | return key_der |