#include <security_asn1/keyTemplates.h>
#include <security_asn1/SecAsn1Templates.h>
#include <stddef.h>
#include <assert.h>
#include "tsaTemplates.h"
#include "cmslocal.h"
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wunused-const-variable"
typedef struct {
CSSM_OID contentType;
CSSM_DATA content;
} SimpleContentInfo;
static const SecAsn1Template cmsSimpleContentInfoTemplate[] = {
{ SEC_ASN1_SEQUENCE, 0, NULL, sizeof(SimpleContentInfo) },
{ SEC_ASN1_OBJECT_ID, offsetof(SimpleContentInfo, contentType) },
{ SEC_ASN1_EXPLICIT | SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | 0,
offsetof(SimpleContentInfo, content),
kSecAsn1AnyTemplate },
{ 0, }
};
#pragma mark ----- tsa -----
const SecAsn1Template kSecAsn1SignedIntegerTemplate[] = {
{ SEC_ASN1_INTEGER | SEC_ASN1_SIGNED_INT, 0, NULL, sizeof(SecAsn1Item) }
};
const SecAsn1Template kSecAsn1UnsignedIntegerTemplate[] = {
{ SEC_ASN1_INTEGER, 0, NULL, sizeof(SecAsn1Item) }
};
const SecAsn1Template kSecAsn1TSAAccuracyTemplate[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TSAAccuracy) },
{ SEC_ASN1_INTEGER,
offsetof(SecAsn1TSAAccuracy, seconds) },
{ SEC_ASN1_CONTEXT_SPECIFIC | 0 | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSAAccuracy, millis), kSecAsn1UnsignedIntegerTemplate },
{ SEC_ASN1_CONTEXT_SPECIFIC | 1 | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSAAccuracy, micros), kSecAsn1UnsignedIntegerTemplate },
{ 0 }
};
const SecAsn1Template kSecAsn1TSAMessageImprintTemplate[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TSAMessageImprint) },
{ SEC_ASN1_INLINE, offsetof(SecAsn1TSAMessageImprint,hashAlgorithm),
kSecAsn1AlgorithmIDTemplate },
{ SEC_ASN1_OCTET_STRING,
offsetof(SecAsn1TSAMessageImprint,hashedMessage) },
{ 0 }
};
const SecAsn1Template kSecAsn1TSATimeStampReqTemplate[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TSATimeStampReq) },
{ SEC_ASN1_INTEGER,
offsetof(SecAsn1TSATimeStampReq, version) },
{ SEC_ASN1_INLINE, offsetof(SecAsn1TSATimeStampReq,messageImprint),
kSecAsn1TSAMessageImprintTemplate },
{ SEC_ASN1_OBJECT_ID | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATimeStampReq,reqPolicy) },
{ SEC_ASN1_INTEGER | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATimeStampReq, nonce) },
{ SEC_ASN1_BOOLEAN | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATimeStampReq, certReq) },
{ SEC_ASN1_OPTIONAL | SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | 0,
offsetof(SecAsn1TSATimeStampReq, extensions),
kSecAsn1SequenceOfCertExtensionTemplate },
{ 0 }
};
const SecAsn1Template kSecAsn1TSAPKIStatusInfoTemplate[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TSAPKIStatusInfo) },
{ SEC_ASN1_INTEGER,
offsetof(SecAsn1TSAPKIStatusInfo, status) },
{ SEC_ASN1_CONSTRUCTED | SEC_ASN1_SEQUENCE | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSAPKIStatusInfo, statusString) },
{ SEC_ASN1_BIT_STRING | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSAPKIStatusInfo,failInfo) },
{ 0 }
};
const SecAsn1Template kSecAsn1TSAPKIStatusInfoTemplateRFC3161[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TSAPKIStatusInfo) },
{ SEC_ASN1_INTEGER,
offsetof(SecAsn1TSAPKIStatusInfo, status) },
{ SEC_ASN1_UTF8_STRING | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSAPKIStatusInfo, statusString) },
{ SEC_ASN1_BIT_STRING | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSAPKIStatusInfo,failInfo) },
{ 0 }
};
#if 0
const SecAsn1Template kSecAsn1TSATimeStampRespTemplate[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TimeStampResp) },
{ SEC_ASN1_INLINE, offsetof(SecAsn1TimeStampResp,status),
kSecAsn1TSAPKIStatusInfoTemplate },
{ SEC_ASN1_INLINE | SEC_ASN1_OPTIONAL, offsetof(SecAsn1TimeStampResp,timeStampToken),
SecCmsContentInfoTemplate },
{ 0 }
};
#endif
const SecAsn1Template kSecAsn1TSATimeStampRespTemplateDER[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TimeStampRespDER) },
{ SEC_ASN1_INLINE, offsetof(SecAsn1TimeStampRespDER,status),
kSecAsn1TSAPKIStatusInfoTemplate },
{ SEC_ASN1_ANY | SEC_ASN1_OPTIONAL , offsetof(SecAsn1TimeStampRespDER, timeStampTokenDER), kSecAsn1AnyTemplate },
{ 0 }
};
const SecAsn1Template kSecAsn1TSATSTInfoTemplate[] = {
{ SEC_ASN1_SEQUENCE,
0, NULL, sizeof(SecAsn1TSATSTInfo) },
{ SEC_ASN1_INTEGER,
offsetof(SecAsn1TSATSTInfo, version) },
{ SEC_ASN1_OBJECT_ID,
offsetof(SecAsn1TSATSTInfo,reqPolicy) },
{ SEC_ASN1_INLINE, offsetof(SecAsn1TSATSTInfo,messageImprint),
kSecAsn1TSAMessageImprintTemplate },
{ SEC_ASN1_INTEGER,
offsetof(SecAsn1TSATSTInfo, serialNumber) },
{ SEC_ASN1_GENERALIZED_TIME | SEC_ASN1_MAY_STREAM,
offsetof(SecAsn1TSATSTInfo,genTime) },
{ SEC_ASN1_INLINE | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATSTInfo,accuracy),
kSecAsn1TSAAccuracyTemplate },
{ SEC_ASN1_BOOLEAN | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATSTInfo, ordering) },
{ SEC_ASN1_INTEGER | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATSTInfo, nonce) },
{ SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | 0 | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATSTInfo, tsa),
kSecAsn1GenNameOtherNameTemplate},
{ SEC_ASN1_CONSTRUCTED | SEC_ASN1_CONTEXT_SPECIFIC | 1 | SEC_ASN1_OPTIONAL,
offsetof(SecAsn1TSATSTInfo, extensions),
kSecAsn1CertExtensionTemplate },
{ 0 }
};
#pragma clang diagnostic pop