# 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 )