diff options
Diffstat (limited to 'tests/test_tsp.py')
-rw-r--r-- | tests/test_tsp.py | 245 |
1 files changed, 245 insertions, 0 deletions
diff --git a/tests/test_tsp.py b/tests/test_tsp.py new file mode 100644 index 0000000..ee6a2e1 --- /dev/null +++ b/tests/test_tsp.py @@ -0,0 +1,245 @@ +# coding: utf-8 +from __future__ import unicode_literals, division, absolute_import, print_function + +import unittest +import os +from datetime import datetime + +from asn1crypto import tsp, cms, util +from ._unittest_compat import patch + +patch() + +tests_root = os.path.dirname(__file__) +fixtures_dir = os.path.join(tests_root, 'fixtures') + + +class TSPTests(unittest.TestCase): + + def test_parse_request(self): + with open(os.path.join(fixtures_dir, 'tsp_request'), 'rb') as f: + request = tsp.TimeStampReq.load(f.read()) + + self.assertEqual( + 'v1', + request['version'].native + ) + self.assertEqual( + 'sha1', + request['message_imprint']['hash_algorithm']['algorithm'].native + ) + self.assertEqual( + None, + request['message_imprint']['hash_algorithm']['parameters'].native + ) + self.assertEqual( + b'\x53\xC9\xDB\xC1\x6D\xDB\x34\x3B\x28\x4E\xEF\xA6\x03\x0E\x02\x64\x79\x31\xAF\xFB', + request['message_imprint']['hashed_message'].native + ) + self.assertEqual( + 17842879675353045770, + request['nonce'].native + ) + + def test_parse_response(self): + with open(os.path.join(fixtures_dir, 'tsp_response'), 'rb') as f: + response = tsp.TimeStampResp.load(f.read()) + + status_info = response['status'] + token = response['time_stamp_token'] + signed_data = token['content'] + encap_content_info = signed_data['encap_content_info'] + tst_info = encap_content_info['content'].parsed + signer_infos = signed_data['signer_infos'] + signer_info = signer_infos[0] + signed_attrs = signer_info['signed_attrs'] + + self.assertEqual( + 'granted', + status_info['status'].native + ) + self.assertEqual( + None, + status_info['status_string'].native + ) + self.assertEqual( + None, + status_info['fail_info'].native + ) + self.assertEqual( + 'signed_data', + token['content_type'].native + ) + self.assertIsInstance( + signed_data, + cms.SignedData + ) + self.assertEqual( + 'v3', + signed_data['version'].native + ) + self.assertEqual( + 'sha1', + signed_data['digest_algorithms'][0]['algorithm'].native + ) + self.assertEqual( + 'tst_info', + encap_content_info['content_type'].native + ) + self.assertIsInstance( + tst_info, + tsp.TSTInfo + ) + self.assertEqual( + 'v1', + tst_info['version'].native + ) + self.assertEqual( + '1.1.2', + tst_info['policy'].native + ) + self.assertEqual( + 'sha1', + tst_info['message_imprint']['hash_algorithm']['algorithm'].native + ) + self.assertEqual( + None, + tst_info['message_imprint']['hash_algorithm']['parameters'].native + ) + self.assertEqual( + b'\x53\xC9\xDB\xC1\x6D\xDB\x34\x3B\x28\x4E\xEF\xA6\x03\x0E\x02\x64\x79\x31\xAF\xFB', + tst_info['message_imprint']['hashed_message'].native + ) + self.assertEqual( + 544918635, + tst_info['serial_number'].native + ) + self.assertEqual( + datetime(2015, 6, 1, 18, 39, 55, tzinfo=util.timezone.utc), + tst_info['gen_time'].native + ) + self.assertEqual( + 60, + tst_info['accuracy']['seconds'].native + ) + self.assertEqual( + None, + tst_info['accuracy']['millis'].native + ) + self.assertEqual( + None, + tst_info['accuracy']['micros'].native + ) + self.assertEqual( + False, + tst_info['ordering'].native + ) + self.assertEqual( + 17842879675353045770, + tst_info['nonce'].native + ) + self.assertEqual( + util.OrderedDict([ + ('country_name', 'US'), + ('organization_name', 'GeoTrust Inc'), + ('common_name', 'GeoTrust Timestamping Signer 1'), + ]), + tst_info['tsa'].native + ) + self.assertEqual( + None, + tst_info['extensions'].native + ) + self.assertEqual( + None, + signed_data['certificates'].native + ) + self.assertEqual( + None, + signed_data['crls'].native + ) + self.assertEqual( + 1, + len(signer_infos) + ) + self.assertEqual( + 'v1', + signer_info['version'].native + ) + self.assertEqual( + util.OrderedDict([ + ( + 'issuer', + util.OrderedDict([ + ('country_name', 'ZA'), + ('state_or_province_name', 'Western Cape'), + ('locality_name', 'Durbanville'), + ('organization_name', 'Thawte'), + ('organizational_unit_name', 'Thawte Certification'), + ('common_name', 'Thawte Timestamping CA'), + ]) + ), + ( + 'serial_number', + 125680471847352264461591953321128732863 + ) + ]), + signer_info['sid'].native + ) + self.assertEqual( + 'sha1', + signer_info['digest_algorithm']['algorithm'].native + ) + self.assertEqual( + 4, + len(signed_attrs) + ) + self.assertEqual( + 'content_type', + signed_attrs[0]['type'].native + ) + self.assertEqual( + 'tst_info', + signed_attrs[0]['values'][0].native + ) + self.assertEqual( + 'signing_time', + signed_attrs[1]['type'].native + ) + self.assertEqual( + datetime(2015, 6, 1, 18, 39, 55, tzinfo=util.timezone.utc), + signed_attrs[1]['values'][0].native + ) + self.assertEqual( + 'message_digest', + signed_attrs[2]['type'].native + ) + self.assertEqual( + b'\x22\x06\x7D\xA4\xFC\x7B\xC5\x94\x80\xB4\xB0\x78\xC2\x07\x66\x02\xA3\x0D\x62\xAE', + signed_attrs[2]['values'][0].native + ) + self.assertEqual( + 'signing_certificate', + signed_attrs[3]['type'].native + ) + self.assertEqual( + util.OrderedDict([ + ( + 'certs', + [ + util.OrderedDict([ + ( + 'cert_hash', + b'\x22\x3C\xDA\x27\x07\x96\x73\x81\x6B\x60\x8A\x1B\x8C\xB0\xAB\x02\x30\x10\x7F\xCC' + ), + ('issuer_serial', None), + ]) + ] + ), + ( + 'policies', + None + ) + ]), + signed_attrs[3]['values'][0].native + ) |