You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
246 lines
7.2 KiB
246 lines
7.2 KiB
# 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
|
|
)
|