|
|
- # coding: utf-8
-
- """
- ASN.1 type classes for the time stamp protocol (TSP). Exports the following
- items:
-
- - TimeStampReq()
- - TimeStampResp()
-
- Also adds TimeStampedData() support to asn1crypto.cms.ContentInfo(),
- TimeStampedData() and TSTInfo() support to
- asn1crypto.cms.EncapsulatedContentInfo() and some oids and value parsers to
- asn1crypto.cms.CMSAttribute().
-
- Other type classes are defined that help compose the types listed above.
- """
-
- from __future__ import unicode_literals, division, absolute_import, print_function
-
- from .algos import DigestAlgorithm
- from .cms import (
- CMSAttribute,
- CMSAttributeType,
- ContentInfo,
- ContentType,
- EncapsulatedContentInfo,
- )
- from .core import (
- Any,
- BitString,
- Boolean,
- Choice,
- GeneralizedTime,
- IA5String,
- Integer,
- ObjectIdentifier,
- OctetString,
- Sequence,
- SequenceOf,
- SetOf,
- UTF8String,
- )
- from .crl import CertificateList
- from .x509 import (
- Attributes,
- CertificatePolicies,
- GeneralName,
- GeneralNames,
- )
-
-
- # The structures in this file are based on https://tools.ietf.org/html/rfc3161,
- # https://tools.ietf.org/html/rfc4998, https://tools.ietf.org/html/rfc5544,
- # https://tools.ietf.org/html/rfc5035, https://tools.ietf.org/html/rfc2634
-
- class Version(Integer):
- _map = {
- 0: 'v0',
- 1: 'v1',
- 2: 'v2',
- 3: 'v3',
- 4: 'v4',
- 5: 'v5',
- }
-
-
- class MessageImprint(Sequence):
- _fields = [
- ('hash_algorithm', DigestAlgorithm),
- ('hashed_message', OctetString),
- ]
-
-
- class Accuracy(Sequence):
- _fields = [
- ('seconds', Integer, {'optional': True}),
- ('millis', Integer, {'implicit': 0, 'optional': True}),
- ('micros', Integer, {'implicit': 1, 'optional': True}),
- ]
-
-
- class Extension(Sequence):
- _fields = [
- ('extn_id', ObjectIdentifier),
- ('critical', Boolean, {'default': False}),
- ('extn_value', OctetString),
- ]
-
-
- class Extensions(SequenceOf):
- _child_spec = Extension
-
-
- class TSTInfo(Sequence):
- _fields = [
- ('version', Version),
- ('policy', ObjectIdentifier),
- ('message_imprint', MessageImprint),
- ('serial_number', Integer),
- ('gen_time', GeneralizedTime),
- ('accuracy', Accuracy, {'optional': True}),
- ('ordering', Boolean, {'default': False}),
- ('nonce', Integer, {'optional': True}),
- ('tsa', GeneralName, {'explicit': 0, 'optional': True}),
- ('extensions', Extensions, {'implicit': 1, 'optional': True}),
- ]
-
-
- class TimeStampReq(Sequence):
- _fields = [
- ('version', Version),
- ('message_imprint', MessageImprint),
- ('req_policy', ObjectIdentifier, {'optional': True}),
- ('nonce', Integer, {'optional': True}),
- ('cert_req', Boolean, {'default': False}),
- ('extensions', Extensions, {'implicit': 0, 'optional': True}),
- ]
-
-
- class PKIStatus(Integer):
- _map = {
- 0: 'granted',
- 1: 'granted_with_mods',
- 2: 'rejection',
- 3: 'waiting',
- 4: 'revocation_warning',
- 5: 'revocation_notification',
- }
-
-
- class PKIFreeText(SequenceOf):
- _child_spec = UTF8String
-
-
- class PKIFailureInfo(BitString):
- _map = {
- 0: 'bad_alg',
- 2: 'bad_request',
- 5: 'bad_data_format',
- 14: 'time_not_available',
- 15: 'unaccepted_policy',
- 16: 'unaccepted_extensions',
- 17: 'add_info_not_available',
- 25: 'system_failure',
- }
-
-
- class PKIStatusInfo(Sequence):
- _fields = [
- ('status', PKIStatus),
- ('status_string', PKIFreeText, {'optional': True}),
- ('fail_info', PKIFailureInfo, {'optional': True}),
- ]
-
-
- class TimeStampResp(Sequence):
- _fields = [
- ('status', PKIStatusInfo),
- ('time_stamp_token', ContentInfo),
- ]
-
-
- class MetaData(Sequence):
- _fields = [
- ('hash_protected', Boolean),
- ('file_name', UTF8String, {'optional': True}),
- ('media_type', IA5String, {'optional': True}),
- ('other_meta_data', Attributes, {'optional': True}),
- ]
-
-
- class TimeStampAndCRL(SequenceOf):
- _fields = [
- ('time_stamp', EncapsulatedContentInfo),
- ('crl', CertificateList, {'optional': True}),
- ]
-
-
- class TimeStampTokenEvidence(SequenceOf):
- _child_spec = TimeStampAndCRL
-
-
- class DigestAlgorithms(SequenceOf):
- _child_spec = DigestAlgorithm
-
-
- class EncryptionInfo(Sequence):
- _fields = [
- ('encryption_info_type', ObjectIdentifier),
- ('encryption_info_value', Any),
- ]
-
-
- class PartialHashtree(SequenceOf):
- _child_spec = OctetString
-
-
- class PartialHashtrees(SequenceOf):
- _child_spec = PartialHashtree
-
-
- class ArchiveTimeStamp(Sequence):
- _fields = [
- ('digest_algorithm', DigestAlgorithm, {'implicit': 0, 'optional': True}),
- ('attributes', Attributes, {'implicit': 1, 'optional': True}),
- ('reduced_hashtree', PartialHashtrees, {'implicit': 2, 'optional': True}),
- ('time_stamp', ContentInfo),
- ]
-
-
- class ArchiveTimeStampSequence(SequenceOf):
- _child_spec = ArchiveTimeStamp
-
-
- class EvidenceRecord(Sequence):
- _fields = [
- ('version', Version),
- ('digest_algorithms', DigestAlgorithms),
- ('crypto_infos', Attributes, {'implicit': 0, 'optional': True}),
- ('encryption_info', EncryptionInfo, {'implicit': 1, 'optional': True}),
- ('archive_time_stamp_sequence', ArchiveTimeStampSequence),
- ]
-
-
- class OtherEvidence(Sequence):
- _fields = [
- ('oe_type', ObjectIdentifier),
- ('oe_value', Any),
- ]
-
-
- class Evidence(Choice):
- _alternatives = [
- ('tst_evidence', TimeStampTokenEvidence, {'implicit': 0}),
- ('ers_evidence', EvidenceRecord, {'implicit': 1}),
- ('other_evidence', OtherEvidence, {'implicit': 2}),
- ]
-
-
- class TimeStampedData(Sequence):
- _fields = [
- ('version', Version),
- ('data_uri', IA5String, {'optional': True}),
- ('meta_data', MetaData, {'optional': True}),
- ('content', OctetString, {'optional': True}),
- ('temporal_evidence', Evidence),
- ]
-
-
- class IssuerSerial(Sequence):
- _fields = [
- ('issuer', GeneralNames),
- ('serial_number', Integer),
- ]
-
-
- class ESSCertID(Sequence):
- _fields = [
- ('cert_hash', OctetString),
- ('issuer_serial', IssuerSerial, {'optional': True}),
- ]
-
-
- class ESSCertIDs(SequenceOf):
- _child_spec = ESSCertID
-
-
- class SigningCertificate(Sequence):
- _fields = [
- ('certs', ESSCertIDs),
- ('policies', CertificatePolicies, {'optional': True}),
- ]
-
-
- class SetOfSigningCertificates(SetOf):
- _child_spec = SigningCertificate
-
-
- class ESSCertIDv2(Sequence):
- _fields = [
- ('hash_algorithm', DigestAlgorithm, {'default': {'algorithm': 'sha256'}}),
- ('cert_hash', OctetString),
- ('issuer_serial', IssuerSerial, {'optional': True}),
- ]
-
-
- class ESSCertIDv2s(SequenceOf):
- _child_spec = ESSCertIDv2
-
-
- class SigningCertificateV2(Sequence):
- _fields = [
- ('certs', ESSCertIDv2s),
- ('policies', CertificatePolicies, {'optional': True}),
- ]
-
-
- class SetOfSigningCertificatesV2(SetOf):
- _child_spec = SigningCertificateV2
-
-
- EncapsulatedContentInfo._oid_specs['tst_info'] = TSTInfo
- EncapsulatedContentInfo._oid_specs['timestamped_data'] = TimeStampedData
- ContentInfo._oid_specs['timestamped_data'] = TimeStampedData
- ContentType._map['1.2.840.113549.1.9.16.1.4'] = 'tst_info'
- ContentType._map['1.2.840.113549.1.9.16.1.31'] = 'timestamped_data'
- CMSAttributeType._map['1.2.840.113549.1.9.16.2.12'] = 'signing_certificate'
- CMSAttribute._oid_specs['signing_certificate'] = SetOfSigningCertificates
- CMSAttributeType._map['1.2.840.113549.1.9.16.2.47'] = 'signing_certificate_v2'
- CMSAttribute._oid_specs['signing_certificate_v2'] = SetOfSigningCertificatesV2
|