/* -*- Mode: C; tab-width: 8 -*-*/ /* This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ /* Header file with all of the structures and types that will be exported * by the security library for implementation of CRMF. */ #ifndef _CRMFT_H_ #define _CRMFT_H_ /* Use these enumerated values for adding fields to the certificate request */ typedef enum { crmfVersion = 0, crmfSerialNumber = 1, crmfSigningAlg = 2, crmfIssuer = 3, crmfValidity = 4, crmfSubject = 5, crmfPublicKey = 6, crmfIssuerUID = 7, crmfSubjectUID = 8, crmfExtension = 9 } CRMFCertTemplateField; /* * An enumeration for the different types of controls. */ typedef enum { crmfNoControl = 0, crmfRegTokenControl = 1, crmfAuthenticatorControl = 2, crmfPKIPublicationInfoControl = 3, crmfPKIArchiveOptionsControl = 4, crmfOldCertIDControl = 5, crmfProtocolEncrKeyControl = 6 } CRMFControlType; /* * The possible values that are passed into CRMF_CreatePKIPublicationInfo */ typedef enum { crmfDontPublish = 0, crmfPleasePublish = 1 } CRMFPublicationAction; /* * An enumeration for the possible for pubMethod which is a part of * the SinglePubInfo ASN1 type. */ typedef enum { crmfDontCare = 0, crmfX500 = 1, crmfWeb = 2, crmfLdap = 3 } CRMFPublicationMethod; /* * An enumeration for the different options for PKIArchiveOptions type. */ typedef enum { crmfNoArchiveOptions = 0, crmfEncryptedPrivateKey = 1, crmfKeyGenParameters = 2, crmfArchiveRemGenPrivKey = 3 } CRMFPKIArchiveOptionsType; /* * An enumeration for the different options for ProofOfPossession */ typedef enum { crmfNoPOPChoice = 0, crmfRAVerified = 1, crmfSignature = 2, crmfKeyEncipherment = 3, crmfKeyAgreement = 4 } CRMFPOPChoice; /* * An enumertion type for options for the authInfo field of the * CRMFPOPOSigningKeyInput structure. */ typedef enum { crmfSender = 0, crmfPublicKeyMAC = 1 } CRMFPOPOSkiInputAuthChoice; /* * An enumeration for the SubsequentMessage Options. */ typedef enum { crmfNoSubseqMess = 0, crmfEncrCert = 1, crmfChallengeResp = 2 } CRMFSubseqMessOptions; /* * An enumeration for the choice used by POPOPrivKey. */ typedef enum { crmfNoMessage = 0, crmfThisMessage = 1, crmfSubsequentMessage = 2, crmfDHMAC = 3 } CRMFPOPOPrivKeyChoice; /* * An enumeration for the choices for the EncryptedKey type. */ typedef enum { crmfNoEncryptedKeyChoice = 0, crmfEncryptedValueChoice = 1, crmfEnvelopedDataChoice = 2 } CRMFEncryptedKeyChoice; /* * TYPE: CRMFEncoderOutputCallback * This function type defines a prototype for a function that the CRMF * library expects when encoding is performed. * * ARGUMENTS: * arg * This will be a pointer the user passed into an encoding function. * The user of the library is free to use this pointer in any way. * The most common use is to keep around a buffer for writing out * the DER encoded bytes. * buf * The DER encoded bytes that should be written out. * len * The number of DER encoded bytes to write out. * */ typedef void (*CRMFEncoderOutputCallback) (void *arg, const char *buf, unsigned long len); /* * Type for the function that gets a password. Just in case we ever * need to support publicKeyMAC for POPOSigningKeyInput */ typedef SECItem* (*CRMFMACPasswordCallback) (void *arg); typedef struct CRMFOptionalValidityStr CRMFOptionalValidity; typedef struct CRMFValidityCreationInfoStr CRMFGetValidity; typedef struct CRMFCertTemplateStr CRMFCertTemplate; typedef struct CRMFCertRequestStr CRMFCertRequest; typedef struct CRMFCertReqMsgStr CRMFCertReqMsg; typedef struct CRMFCertReqMessagesStr CRMFCertReqMessages; typedef struct CRMFProofOfPossessionStr CRMFProofOfPossession; typedef struct CRMFPOPOSigningKeyStr CRMFPOPOSigningKey; typedef struct CRMFPOPOSigningKeyInputStr CRMFPOPOSigningKeyInput; typedef struct CRMFPOPOPrivKeyStr CRMFPOPOPrivKey; typedef struct CRMFPKIPublicationInfoStr CRMFPKIPublicationInfo; typedef struct CRMFSinglePubInfoStr CRMFSinglePubInfo; typedef struct CRMFPKIArchiveOptionsStr CRMFPKIArchiveOptions; typedef struct CRMFEncryptedKeyStr CRMFEncryptedKey; typedef struct CRMFEncryptedValueStr CRMFEncryptedValue; typedef struct CRMFCertIDStr CRMFCertID; typedef struct CRMFCertIDStr CRMFOldCertID; typedef CERTSubjectPublicKeyInfo CRMFProtocolEncrKey; typedef struct CRMFValidityCreationInfoStr CRMFValidityCreationInfo; typedef struct CRMFCertExtCreationInfoStr CRMFCertExtCreationInfo; typedef struct CRMFPKMACValueStr CRMFPKMACValue; typedef struct CRMFAttributeStr CRMFAttribute; typedef struct CRMFControlStr CRMFControl; typedef CERTGeneralName CRMFGeneralName; typedef struct CRMFCertExtensionStr CRMFCertExtension; struct CRMFValidityCreationInfoStr { PRTime *notBefore; PRTime *notAfter; }; struct CRMFCertExtCreationInfoStr { CRMFCertExtension **extensions; int numExtensions; }; /* * Some ASN1 Templates that may be needed. */ extern const SEC_ASN1Template CRMFCertReqMessagesTemplate[]; extern const SEC_ASN1Template CRMFCertRequestTemplate[]; #endif /*_CRMFT_H_*/