mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-06 00:55:37 +00:00
221 lines
6.9 KiB
C
221 lines
6.9 KiB
C
/* -*- Mode: C; tab-width: 8 -*-*/
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla Public License Version
|
|
* 1.1 (the "License"); you may not use this file except in compliance with
|
|
* the License. You may obtain a copy of the License at
|
|
* http://www.mozilla.org/MPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS IS" basis,
|
|
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
|
* for the specific language governing rights and limitations under the
|
|
* License.
|
|
*
|
|
* The Original Code is the Netscape security libraries.
|
|
*
|
|
* The Initial Developer of the Original Code is
|
|
* Netscape Communications Corporation.
|
|
* Portions created by the Initial Developer are Copyright (C) 1994-2000
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
|
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
|
|
/* 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_*/
|