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.
641 lines
21 KiB
641 lines
21 KiB
6 years ago
|
/*
|
||
|
* 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_ */
|