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.
 
 
 
 
 

640 lines
21 KiB

/*
* Copyright (c) 2000-2004,2011,2014 Apple Inc. All Rights Reserved.
*
* @APPLE_LICENSE_HEADER_START@
*
* This file contains Original Code and/or Modifications of Original Code
* as defined in and that are subject to the Apple Public Source License
* Version 2.0 (the 'License'). You may not use this file except in
* compliance with the License. Please obtain a copy of the License at
* http://www.opensource.apple.com/apsl/ and read it before using this
* file.
*
* The Original Code and all software distributed under the License are
* distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
* EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
* INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
* Please see the License for the specific language governing rights and
* limitations under the License.
*
* @APPLE_LICENSE_HEADER_END@
*
* CertExtensions.h -- X.509 Cert Extensions as C structs
*/
#ifndef _CERT_EXTENSIONS_H_
#define _CERT_EXTENSIONS_H_
#include <Security/cssmtype.h>
/***
*** Structs for declaring extension-specific data.
***/
/*
* GeneralName, used in AuthorityKeyID, SubjectAltName, and
* IssuerAltName.
*
* For now, we just provide explicit support for the types which are
* represented as IA5Strings, OIDs, and octet strings. Constructed types
* such as EDIPartyName and x400Address are not explicitly handled
* right now and must be encoded and decoded by the caller. (See exception
* for Name and OtherName, below). In those cases the CE_GeneralName.name.Data field
* represents the BER contents octets; CE_GeneralName.name.Length is the
* length of the contents; the tag of the field is not needed - the BER
* encoding uses context-specific implicit tagging. The berEncoded field
* is set to CSSM_TRUE in these case. Simple types have berEncoded = CSSM_FALSE.
*
* In the case of a GeneralName in the form of a Name, we parse the Name
* into a CSSM_X509_NAME and place a pointer to the CSSM_X509_NAME in the
* CE_GeneralName.name.Data field. CE_GeneralName.name.Length is set to
* sizeof(CSSM_X509_NAME). In this case berEncoded is false.
*
* In the case of a GeneralName in the form of a OtherName, we parse the fields
* into a CE_OtherName and place a pointer to the CE_OtherName in the
* CE_GeneralName.name.Data field. CE_GeneralName.name.Length is set to
* sizeof(CE_OtherName). In this case berEncoded is false.
*
* GeneralNames ::= SEQUENCE SIZE (1..MAX) OF GeneralName
*
* GeneralName ::= CHOICE {
* otherName [0] OtherName
* rfc822Name [1] IA5String,
* dNSName [2] IA5String,
* x400Address [3] ORAddress,
* directoryName [4] Name,
* ediPartyName [5] EDIPartyName,
* uniformResourceIdentifier [6] IA5String,
* iPAddress [7] OCTET STRING,
* registeredID [8] OBJECT IDENTIFIER}
*
* OtherName ::= SEQUENCE {
* type-id OBJECT IDENTIFIER,
* value [0] EXPLICIT ANY DEFINED BY type-id }
*
* EDIPartyName ::= SEQUENCE {
* nameAssigner [0] DirectoryString OPTIONAL,
* partyName [1] DirectoryString }
*/
typedef enum __CE_GeneralNameType {
GNT_OtherName = 0,
GNT_RFC822Name,
GNT_DNSName,
GNT_X400Address,
GNT_DirectoryName,
GNT_EdiPartyName,
GNT_URI,
GNT_IPAddress,
GNT_RegisteredID
} CE_GeneralNameType;
typedef struct __CE_OtherName {
CSSM_OID typeId;
CSSM_DATA value; // unparsed, BER-encoded
} CE_OtherName DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_GeneralName {
CE_GeneralNameType nameType; // GNT_RFC822Name, etc.
CSSM_BOOL berEncoded;
CSSM_DATA name;
} CE_GeneralName DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_GeneralNames {
uint32 numNames;
CE_GeneralName *generalName;
} CE_GeneralNames DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* id-ce-authorityKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 35 }
*
* AuthorityKeyIdentifier ::= SEQUENCE {
* keyIdentifier [0] KeyIdentifier OPTIONAL,
* authorityCertIssuer [1] GeneralNames OPTIONAL,
* authorityCertSerialNumber [2] CertificateSerialNumber OPTIONAL }
*
* KeyIdentifier ::= OCTET STRING
*
* CSSM OID = CSSMOID_AuthorityKeyIdentifier
*/
typedef struct __CE_AuthorityKeyID {
CSSM_BOOL keyIdentifierPresent;
CSSM_DATA keyIdentifier;
CSSM_BOOL generalNamesPresent;
CE_GeneralNames *generalNames;
CSSM_BOOL serialNumberPresent;
CSSM_DATA serialNumber;
} CE_AuthorityKeyID DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* id-ce-subjectKeyIdentifier OBJECT IDENTIFIER ::= { id-ce 14 }
* SubjectKeyIdentifier ::= KeyIdentifier
*
* CSSM OID = CSSMOID_SubjectKeyIdentifier
*/
typedef CSSM_DATA CE_SubjectKeyID DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* id-ce-keyUsage OBJECT IDENTIFIER ::= { id-ce 15 }
*
* KeyUsage ::= BIT STRING {
* digitalSignature (0),
* nonRepudiation (1),
* keyEncipherment (2),
* dataEncipherment (3),
* keyAgreement (4),
* keyCertSign (5),
* cRLSign (6),
* encipherOnly (7),
* decipherOnly (8) }
*
* CSSM OID = CSSMOID_KeyUsage
*
*/
typedef uint16 CE_KeyUsage DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
#define CE_KU_DigitalSignature 0x8000
#define CE_KU_NonRepudiation 0x4000
#define CE_KU_KeyEncipherment 0x2000
#define CE_KU_DataEncipherment 0x1000
#define CE_KU_KeyAgreement 0x0800
#define CE_KU_KeyCertSign 0x0400
#define CE_KU_CRLSign 0x0200
#define CE_KU_EncipherOnly 0x0100
#define CE_KU_DecipherOnly 0x0080
/*
* id-ce-cRLReason OBJECT IDENTIFIER ::= { id-ce 21 }
*
* -- reasonCode ::= { CRLReason }
*
* CRLReason ::= ENUMERATED {
* unspecified (0),
* keyCompromise (1),
* cACompromise (2),
* affiliationChanged (3),
* superseded (4),
* cessationOfOperation (5),
* certificateHold (6),
* removeFromCRL (8) }
*
* CSSM OID = CSSMOID_CrlReason
*
*/
typedef uint32 CE_CrlReason DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
#define CE_CR_Unspecified 0
#define CE_CR_KeyCompromise 1
#define CE_CR_CACompromise 2
#define CE_CR_AffiliationChanged 3
#define CE_CR_Superseded 4
#define CE_CR_CessationOfOperation 5
#define CE_CR_CertificateHold 6
#define CE_CR_RemoveFromCRL 8
/*
* id-ce-subjectAltName OBJECT IDENTIFIER ::= { id-ce 17 }
*
* SubjectAltName ::= GeneralNames
*
* CSSM OID = CSSMOID_SubjectAltName
*
* GeneralNames defined above.
*/
/*
* id-ce-extKeyUsage OBJECT IDENTIFIER ::= {id-ce 37}
*
* ExtKeyUsageSyntax ::= SEQUENCE SIZE (1..MAX) OF KeyPurposeId*
*
* KeyPurposeId ::= OBJECT IDENTIFIER
*
* CSSM OID = CSSMOID_ExtendedKeyUsage
*/
typedef struct __CE_ExtendedKeyUsage {
uint32 numPurposes;
CSSM_OID_PTR purposes; // in Intel pre-encoded format
} CE_ExtendedKeyUsage;
/*
* id-ce-basicConstraints OBJECT IDENTIFIER ::= { id-ce 19 }
*
* BasicConstraints ::= SEQUENCE {
* cA BOOLEAN DEFAULT FALSE,
* pathLenConstraint INTEGER (0..MAX) OPTIONAL }
*
* CSSM OID = CSSMOID_BasicConstraints
*/
typedef struct __CE_BasicConstraints {
CSSM_BOOL cA;
CSSM_BOOL pathLenConstraintPresent;
uint32 pathLenConstraint;
} CE_BasicConstraints DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* id-ce-certificatePolicies OBJECT IDENTIFIER ::= { id-ce 32 }
*
* certificatePolicies ::= SEQUENCE SIZE (1..MAX) OF PolicyInformation
*
* PolicyInformation ::= SEQUENCE {
* policyIdentifier CertPolicyId,
* policyQualifiers SEQUENCE SIZE (1..MAX) OF
* PolicyQualifierInfo OPTIONAL }
*
* CertPolicyId ::= OBJECT IDENTIFIER
*
* PolicyQualifierInfo ::= SEQUENCE {
* policyQualifierId PolicyQualifierId,
* qualifier ANY DEFINED BY policyQualifierId }
*
* -- policyQualifierIds for Internet policy qualifiers
*
* id-qt OBJECT IDENTIFIER ::= { id-pkix 2 }
* id-qt-cps OBJECT IDENTIFIER ::= { id-qt 1 }
* id-qt-unotice OBJECT IDENTIFIER ::= { id-qt 2 }
*
* PolicyQualifierId ::=
* OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
*
* Qualifier ::= CHOICE {
* cPSuri CPSuri,
* userNotice UserNotice }
*
* CPSuri ::= IA5String
*
* UserNotice ::= SEQUENCE {
* noticeRef NoticeReference OPTIONAL,
* explicitText DisplayText OPTIONAL}
*
* NoticeReference ::= SEQUENCE {
* organization DisplayText,
* noticeNumbers SEQUENCE OF INTEGER }
*
* DisplayText ::= CHOICE {
* visibleString VisibleString (SIZE (1..200)),
* bmpString BMPString (SIZE (1..200)),
* utf8String UTF8String (SIZE (1..200)) }
*
* CSSM OID = CSSMOID_CertificatePolicies
*
* We only support down to the level of Qualifier, and then only the CPSuri
* choice. UserNotice is transmitted to and from this library as a raw
* CSSM_DATA containing the BER-encoded UserNotice sequence.
*/
typedef struct __CE_PolicyQualifierInfo {
CSSM_OID policyQualifierId; // CSSMOID_QT_CPS, CSSMOID_QT_UNOTICE
CSSM_DATA qualifier; // CSSMOID_QT_CPS: IA5String contents
// CSSMOID_QT_UNOTICE : Sequence contents
} CE_PolicyQualifierInfo DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_PolicyInformation {
CSSM_OID certPolicyId;
uint32 numPolicyQualifiers; // size of *policyQualifiers;
CE_PolicyQualifierInfo *policyQualifiers;
} CE_PolicyInformation DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_CertPolicies {
uint32 numPolicies; // size of *policies;
CE_PolicyInformation *policies;
} CE_CertPolicies DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* netscape-cert-type, a bit string.
*
* CSSM OID = CSSMOID_NetscapeCertType
*
* Bit fields defined in oidsattr.h: CE_NCT_SSL_Client, etc.
*/
typedef uint16 CE_NetscapeCertType DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* CRLDistributionPoints.
*
* id-ce-cRLDistributionPoints OBJECT IDENTIFIER ::= { id-ce 31 }
*
* cRLDistributionPoints ::= {
* CRLDistPointsSyntax }
*
* CRLDistPointsSyntax ::= SEQUENCE SIZE (1..MAX) OF DistributionPoint
*
* NOTE: RFC 2459 claims that the tag for the optional DistributionPointName
* is IMPLICIT as shown here, but in practice it is EXPLICIT. It has to be -
* because the underlying type also uses an implicit tag for distinguish
* between CHOICEs.
*
* DistributionPoint ::= SEQUENCE {
* distributionPoint [0] DistributionPointName OPTIONAL,
* reasons [1] ReasonFlags OPTIONAL,
* cRLIssuer [2] GeneralNames OPTIONAL }
*
* DistributionPointName ::= CHOICE {
* fullName [0] GeneralNames,
* nameRelativeToCRLIssuer [1] RelativeDistinguishedName }
*
* ReasonFlags ::= BIT STRING {
* unused (0),
* keyCompromise (1),
* cACompromise (2),
* affiliationChanged (3),
* superseded (4),
* cessationOfOperation (5),
* certificateHold (6) }
*
* CSSM OID = CSSMOID_CrlDistributionPoints
*/
/*
* Note that this looks similar to CE_CrlReason, but that's an enum and this
* is an OR-able bit string.
*/
typedef uint8 CE_CrlDistReasonFlags DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
#define CE_CD_Unspecified 0x80
#define CE_CD_KeyCompromise 0x40
#define CE_CD_CACompromise 0x20
#define CE_CD_AffiliationChanged 0x10
#define CE_CD_Superseded 0x08
#define CE_CD_CessationOfOperation 0x04
#define CE_CD_CertificateHold 0x02
typedef enum __CE_CrlDistributionPointNameType {
CE_CDNT_FullName,
CE_CDNT_NameRelativeToCrlIssuer
} CE_CrlDistributionPointNameType DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_DistributionPointName {
CE_CrlDistributionPointNameType nameType;
union {
CE_GeneralNames *fullName;
CSSM_X509_RDN_PTR rdn;
} dpn;
} CE_DistributionPointName DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* The top-level CRLDistributionPoint.
* All fields are optional; NULL pointers indicate absence.
*/
typedef struct __CE_CRLDistributionPoint {
CE_DistributionPointName *distPointName;
CSSM_BOOL reasonsPresent;
CE_CrlDistReasonFlags reasons;
CE_GeneralNames *crlIssuer;
} CE_CRLDistributionPoint DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_CRLDistPointsSyntax {
uint32 numDistPoints;
CE_CRLDistributionPoint *distPoints;
} CE_CRLDistPointsSyntax DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* Authority Information Access and Subject Information Access.
*
* CSSM OID = CSSMOID_AuthorityInfoAccess
* CSSM OID = CSSMOID_SubjectInfoAccess
*
* SubjAuthInfoAccessSyntax ::=
* SEQUENCE SIZE (1..MAX) OF AccessDescription
*
* AccessDescription ::= SEQUENCE {
* accessMethod OBJECT IDENTIFIER,
* accessLocation GeneralName }
*/
typedef struct __CE_AccessDescription {
CSSM_OID accessMethod;
CE_GeneralName accessLocation;
} CE_AccessDescription DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_AuthorityInfoAccess {
uint32 numAccessDescriptions;
CE_AccessDescription *accessDescriptions;
} CE_AuthorityInfoAccess DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* Qualified Certificate Statement support, per RFC 3739.
*
* First, NameRegistrationAuthorities, a component of
* SemanticsInformation; it's the same as a GeneralNames -
* a sequence of GeneralName.
*/
typedef CE_GeneralNames CE_NameRegistrationAuthorities DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* SemanticsInformation, identified as the qcType field
* of a CE_QC_Statement for statementId value id-qcs-pkixQCSyntax-v2.
* Both fields optional; at least one must be present.
*/
typedef struct __CE_SemanticsInformation {
CSSM_OID *semanticsIdentifier;
CE_NameRegistrationAuthorities *nameRegistrationAuthorities;
} CE_SemanticsInformation DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* One Qualified Certificate Statement.
* The statementId OID is required; zero or one of {semanticsInfo,
* otherInfo} can be valid, depending on the value of statementId.
* For statementId id-qcs-pkixQCSyntax-v2 (CSSMOID_OID_QCS_SYNTAX_V2),
* the semanticsInfo field may be present; otherwise, DER-encoded
* information may be present in otherInfo. Both semanticsInfo and
* otherInfo are optional.
*/
typedef struct __CE_QC_Statement {
CSSM_OID statementId;
CE_SemanticsInformation *semanticsInfo;
CSSM_DATA *otherInfo;
} CE_QC_Statement DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* The top-level Qualified Certificate Statements extension.
*/
typedef struct __CE_QC_Statements {
uint32 numQCStatements;
CE_QC_Statement *qcStatements;
} CE_QC_Statements DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*** CRL extensions ***/
/*
* cRLNumber, an integer.
*
* CSSM OID = CSSMOID_CrlNumber
*/
typedef uint32 CE_CrlNumber;
/*
* deltaCRLIndicator, an integer.
*
* CSSM OID = CSSMOID_DeltaCrlIndicator
*/
typedef uint32 CE_DeltaCrl;
/*
* IssuingDistributionPoint
*
* id-ce-issuingDistributionPoint OBJECT IDENTIFIER ::= { id-ce 28 }
*
* issuingDistributionPoint ::= SEQUENCE {
* distributionPoint [0] DistributionPointName OPTIONAL,
* onlyContainsUserCerts [1] BOOLEAN DEFAULT FALSE,
* onlyContainsCACerts [2] BOOLEAN DEFAULT FALSE,
* onlySomeReasons [3] ReasonFlags OPTIONAL,
* indirectCRL [4] BOOLEAN DEFAULT FALSE }
*
* CSSM OID = CSSMOID_IssuingDistributionPoint
*/
typedef struct __CE_IssuingDistributionPoint {
CE_DistributionPointName *distPointName; // optional
CSSM_BOOL onlyUserCertsPresent;
CSSM_BOOL onlyUserCerts;
CSSM_BOOL onlyCACertsPresent;
CSSM_BOOL onlyCACerts;
CSSM_BOOL onlySomeReasonsPresent;
CE_CrlDistReasonFlags onlySomeReasons;
CSSM_BOOL indirectCrlPresent;
CSSM_BOOL indirectCrl;
} CE_IssuingDistributionPoint DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* NameConstraints
*
* id-ce-nameConstraints OBJECT IDENTIFIER ::= { id-ce 30 }
*
* NameConstraints ::= SEQUENCE {
* permittedSubtrees [0] GeneralSubtrees OPTIONAL,
* excludedSubtrees [1] GeneralSubtrees OPTIONAL }
*
* GeneralSubtrees ::= SEQUENCE SIZE (1..MAX) OF GeneralSubtree
*
* GeneralSubtree ::= SEQUENCE {
* base GeneralName,
* minimum [0] BaseDistance DEFAULT 0,
* maximum [1] BaseDistance OPTIONAL }
*
* BaseDistance ::= INTEGER (0..MAX)
*/
typedef struct __CE_GeneralSubtree {
CE_GeneralNames *base;
uint32 minimum; // default=0
CSSM_BOOL maximumPresent;
uint32 maximum; // optional
} CE_GeneralSubtree DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_GeneralSubtrees {
uint32 numSubtrees;
CE_GeneralSubtree *subtrees;
} CE_GeneralSubtrees DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_NameConstraints {
CE_GeneralSubtrees *permitted; // optional
CE_GeneralSubtrees *excluded; // optional
} CE_NameConstraints DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* PolicyMappings
*
* id-ce-policyMappings OBJECT IDENTIFIER ::= { id-ce 33 }
*
* PolicyMappings ::= SEQUENCE SIZE (1..MAX) OF SEQUENCE {
* issuerDomainPolicy CertPolicyId,
* subjectDomainPolicy CertPolicyId }
*
* Note that both issuer and subject policy OIDs are required,
* and are stored by value in this structure.
*/
typedef struct __CE_PolicyMapping {
CSSM_OID issuerDomainPolicy;
CSSM_OID subjectDomainPolicy;
} CE_PolicyMapping DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_PolicyMappings {
uint32 numPolicyMappings;
CE_PolicyMapping *policyMappings;
} CE_PolicyMappings DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* PolicyConstraints
*
* id-ce-policyConstraints OBJECT IDENTIFIER ::= { id-ce 36 }
*
* PolicyConstraints ::= SEQUENCE {
* requireExplicitPolicy [0] SkipCerts OPTIONAL,
* inhibitPolicyMapping [1] SkipCerts OPTIONAL }
*
* SkipCerts ::= INTEGER (0..MAX)
*/
typedef struct __CE_PolicyConstraints {
CSSM_BOOL requireExplicitPolicyPresent;
uint32 requireExplicitPolicy; // optional
CSSM_BOOL inhibitPolicyMappingPresent;
uint32 inhibitPolicyMapping; // optional
} CE_PolicyConstraints DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* InhibitAnyPolicy, an integer.
*
* CSSM OID = CSSMOID_InhibitAnyPolicy
*/
typedef uint32 CE_InhibitAnyPolicy DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
/*
* An enumerated list identifying one of the above per-extension
* structs.
*/
typedef enum __CE_DataType {
DT_AuthorityKeyID, // CE_AuthorityKeyID
DT_SubjectKeyID, // CE_SubjectKeyID
DT_KeyUsage, // CE_KeyUsage
DT_SubjectAltName, // implies CE_GeneralName
DT_IssuerAltName, // implies CE_GeneralName
DT_ExtendedKeyUsage, // CE_ExtendedKeyUsage
DT_BasicConstraints, // CE_BasicConstraints
DT_CertPolicies, // CE_CertPolicies
DT_NetscapeCertType, // CE_NetscapeCertType
DT_CrlNumber, // CE_CrlNumber
DT_DeltaCrl, // CE_DeltaCrl
DT_CrlReason, // CE_CrlReason
DT_CrlDistributionPoints, // CE_CRLDistPointsSyntax
DT_IssuingDistributionPoint,// CE_IssuingDistributionPoint
DT_AuthorityInfoAccess, // CE_AuthorityInfoAccess
DT_Other, // unknown, raw data as a CSSM_DATA
DT_QC_Statements, // CE_QC_Statements
DT_NameConstraints, // CE_NameConstraints
DT_PolicyMappings, // CE_PolicyMappings
DT_PolicyConstraints, // CE_PolicyConstraints
DT_InhibitAnyPolicy // CE_InhibitAnyPolicy
} CE_DataType;
/*
* One unified representation of all the cert and CRL extensions we know about.
*/
typedef union {
CE_AuthorityKeyID authorityKeyID;
CE_SubjectKeyID subjectKeyID;
CE_KeyUsage keyUsage;
CE_GeneralNames subjectAltName;
CE_GeneralNames issuerAltName;
CE_ExtendedKeyUsage extendedKeyUsage;
CE_BasicConstraints basicConstraints;
CE_CertPolicies certPolicies;
CE_NetscapeCertType netscapeCertType;
CE_CrlNumber crlNumber;
CE_DeltaCrl deltaCrl;
CE_CrlReason crlReason;
CE_CRLDistPointsSyntax crlDistPoints;
CE_IssuingDistributionPoint issuingDistPoint;
CE_AuthorityInfoAccess authorityInfoAccess;
CE_QC_Statements qualifiedCertStatements;
CE_NameConstraints nameConstraints;
CE_PolicyMappings policyMappings;
CE_PolicyConstraints policyConstraints;
CE_InhibitAnyPolicy inhibitAnyPolicy;
CSSM_DATA rawData; // unknown, not decoded
} CE_Data DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
typedef struct __CE_DataAndType {
CE_DataType type;
CE_Data extension;
CSSM_BOOL critical;
} CE_DataAndType DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
#endif /* _CERT_EXTENSIONS_H_ */