Экспорт отметки времени 'signature_time' из подписанных данных в формате asn1 - PullRequest
0 голосов
/ 14 октября 2018

Вопрос: экспорт метки времени (времени подписания) из подписанных данных?Я проверяю свою подпись раньше.У меня есть asn1 подписанные данные для проверки.

import cryptography
import OpenSSL
from OpenSSL.crypto import *
from asn1crypto import cms, util, x509, pem, tsp
import os
import sys
import base64bs64 = base64.b64decode(response)  
content = cms.ContentInfo.load(bs64)                 
signed_data = content['content']
encap_content_info = signed_data['encap_content_info']
tst_info = encap_content_info['content']
pk = load_pkcs7_data(FILETYPE_ASN1,bs64)
signers = signed_data['signer_infos']

Я хочу экспортировать отметку времени из подписанных данных.

Я использую этот код:

att = cms.CMSAttribute.load(bs64)            
oid = att._oid_specs
st = oid['signing_time']
child = st._child_spec
alt = child._alternatives

Еще одна попытка:

time_Res = tsp.TimeStampedData.load(bs64)
time_content = time_Res['content']

Но нет результата.Как я могу это исправить?

1 Ответ

0 голосов
/ 16 октября 2018

Вопрос : Мой вопрос получает отметку времени (время подписания)

import os
from asn1crypto import cms

"""
https://github.com/wbond/asn1crypto/blob/master/tests/fixtures/pkcs7-signed.der
"""
fixtures_dir = 'tests/fixtures'
with open(os.path.join(fixtures_dir, 'pkcs7-signed.der'), 'rb') as f:
    der_bytes = f.read()

info = cms.ContentInfo.load(der_bytes)
signed_data = info['content']

encap_content_info = signed_data['encap_content_info']
print("message:{}".format(encap_content_info['content'].native.decode()))
#>>> message:This is the message to encapsulate in PKCS#7/CMS

signer = signed_data['signer_infos'][0]

# signed_attrs == cms.CMSAttributes()
signed_attrs = signer['signed_attrs']
print("signing_time:{}".format(signed_attrs[1]['values'][0].native))

Вывод : >>> signing_time:2015-06-03 05:55:12+00:00


Показать все атрибуты

# signed_attrs.native == List of OrderedDict with keys 'type' and 'values'
for i, attr in enumerate(signed_attrs.native):
    print("[{}]:{}:\t{}".format(i, attr['type'], attr['values']))

Вывод :

[0]:content_type:   ['data']
[1]:signing_time:   [datetime.datetime(2015, 6, 3, 5, 55, 12, tzinfo=datetime.timezone.utc)]
[2]:message_digest: [b'R\x88%G\x15[-PDh\x05$\xc8qZ\xccb(6\x17\xb7h\xee\xa1\x12\x90\x96O\x94\xae\xdby']
[3]:1.2.840.113549.1.9.15:  [OrderedDict([('0', OrderedDict([('0', '2.16.840.1.101.3.4.1.42')])), ... (omitted for brevity)]

Найти атрибут по имени

f = [attr['values'] for attr in signed_attrs.native if attr['type'] == 'signing_time'][0]
print(f)
>>> [datetime.datetime(2015, 6, 3, 5, 55, 12, tzinfo=datetime.timezone.utc)]

Протестировано с Python: 3.5.3 asn1crypto: 0.24.0

...