crmfi.h
上传用户:lyxiangda
上传日期:2007-01-12
资源大小:3042k
文件大小:7k
源码类别:

CA认证

开发平台:

WINDOWS

  1. /* -*- Mode: C; tab-width: 8 -*-*/
  2. /*
  3.  * The contents of this file are subject to the Mozilla Public
  4.  * License Version 1.1 (the "License"); you may not use this file
  5.  * except in compliance with the License. You may obtain a copy of
  6.  * the License at http://www.mozilla.org/MPL/
  7.  * 
  8.  * Software distributed under the License is distributed on an "AS
  9.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  10.  * implied. See the License for the specific language governing
  11.  * rights and limitations under the License.
  12.  * 
  13.  * The Original Code is the Netscape security libraries.
  14.  * 
  15.  * The Initial Developer of the Original Code is Netscape
  16.  * Communications Corporation.  Portions created by Netscape are 
  17.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  18.  * Rights Reserved.
  19.  * 
  20.  * Contributor(s):
  21.  * 
  22.  * Alternatively, the contents of this file may be used under the
  23.  * terms of the GNU General Public License Version 2 or later (the
  24.  * "GPL"), in which case the provisions of the GPL are applicable 
  25.  * instead of those above.  If you wish to allow use of your 
  26.  * version of this file only under the terms of the GPL and not to
  27.  * allow others to use your version of this file under the MPL,
  28.  * indicate your decision by deleting the provisions above and
  29.  * replace them with the notice and other provisions required by
  30.  * the GPL.  If you do not delete the provisions above, a recipient
  31.  * may use your version of this file under either the MPL or the
  32.  * GPL.
  33.  */
  34. #ifndef _CRMFI_H_
  35. #define _CRMFI_H_
  36. /* This file will contain all declarations common to both 
  37.  * encoding and decoding of CRMF Cert Requests.  This header 
  38.  * file should only be included internally by CRMF implementation
  39.  * files.
  40.  */
  41. #include "secasn1.h"
  42. #include "crmfit.h"
  43. #define CRMF_DEFAULT_ARENA_SIZE   1024
  44. #define MAX_WRAPPED_KEY_LEN       2048
  45. #define CRMF_BITS_TO_BYTES(bits) (((bits)+7)/8)
  46. #define CRMF_BYTES_TO_BITS(bytes) ((bytes)*8)
  47. struct crmfEncoderArg {
  48.     SECItem *buffer;
  49.     long     allocatedLen;
  50. };
  51. struct crmfEncoderOutput {
  52.     CRMFEncoderOutputCallback fn;
  53.     void *outputArg;
  54. };
  55. /*
  56.  * This funciton is used by the API for encoding functions that are 
  57.  * exposed through the API, ie all of the CMMF_Encode* and CRMF_Encode*
  58.  * functions.
  59.  */
  60. extern void
  61.        crmf_encoder_out(void *arg, const char *buf, unsigned long len,
  62.                         int depth, SEC_ASN1EncodingPart data_kind);
  63. /*
  64.  * This function is used when we want to encode something locally within
  65.  * the library, ie the CertRequest so that we can produce its signature.
  66.  */
  67. extern SECStatus 
  68.        crmf_init_encoder_callback_arg (struct crmfEncoderArg *encoderArg,
  69.        SECItem               *derDest);
  70. /*
  71.  * This is the callback function we feed to the ASN1 encoder when doing
  72.  * internal DER-encodings.  ie, encoding the cert request so we can 
  73.  * produce a signature.
  74.  */
  75. extern void
  76. crmf_generic_encoder_callback(void *arg, const char* buf, unsigned long len,
  77.       int depth, SEC_ASN1EncodingPart data_kind);
  78. /* The ASN1 templates that need to be seen by internal files
  79.  * in order to implement CRMF.
  80.  */
  81. extern const SEC_ASN1Template CRMFCertReqMsgTemplate[];
  82. extern const SEC_ASN1Template CRMFRAVerifiedTemplate[];
  83. extern const SEC_ASN1Template CRMFPOPOSigningKeyTemplate[];
  84. extern const SEC_ASN1Template CRMFPOPOKeyEnciphermentTemplate[];
  85. extern const SEC_ASN1Template CRMFPOPOKeyAgreementTemplate[];
  86. extern const SEC_ASN1Template CRMFThisMessageTemplate[];
  87. extern const SEC_ASN1Template CRMFSubsequentMessageTemplate[];
  88. extern const SEC_ASN1Template CRMFDHMACTemplate[];
  89. extern const SEC_ASN1Template CRMFEncryptedKeyWithEncryptedValueTemplate[];
  90. extern const SEC_ASN1Template CRMFEncryptedValueTemplate[];
  91. /*
  92.  * Use these two values for encoding Boolean values.
  93.  */
  94. extern const unsigned char hexTrue;
  95. extern const unsigned char hexFalse;
  96. /*
  97.  * Prototypes for helper routines used internally by multiple files.
  98.  */
  99. extern SECStatus crmf_encode_integer(PRArenaPool *poolp, SECItem *dest, 
  100.      long value);
  101. extern SECStatus crmf_make_bitstring_copy(PRArenaPool *arena, SECItem *dest, 
  102.   SECItem *src);
  103. extern SECStatus crmf_copy_pkiarchiveoptions(PRArenaPool           *poolp, 
  104.      CRMFPKIArchiveOptions *destOpt,
  105.      CRMFPKIArchiveOptions *srcOpt);
  106. extern SECStatus  
  107.        crmf_destroy_pkiarchiveoptions(CRMFPKIArchiveOptions *inArchOptions,
  108.       PRBool                 freeit);
  109. extern const SEC_ASN1Template*
  110.        crmf_get_pkiarchiveoptions_subtemplate(CRMFControl *inControl);
  111. extern SECStatus crmf_copy_encryptedkey(PRArenaPool       *poolp,
  112. CRMFEncryptedKey  *srcEncrKey,
  113. CRMFEncryptedKey  *destEncrKey);
  114. extern SECStatus
  115. crmf_copy_encryptedvalue(PRArenaPool        *poolp,
  116.  CRMFEncryptedValue *srcValue,
  117.  CRMFEncryptedValue *destValue);
  118. extern SECStatus
  119. crmf_copy_encryptedvalue_secalg(PRArenaPool     *poolp,
  120. SECAlgorithmID  *srcAlgId,
  121. SECAlgorithmID **destAlgId);
  122. extern SECStatus crmf_template_copy_secalg(PRArenaPool *poolp, 
  123.    SECAlgorithmID **dest,
  124.    SECAlgorithmID *src);
  125. extern SECStatus crmf_copy_cert_name(PRArenaPool *poolp, CERTName **dest, 
  126.      CERTName *src);
  127. extern SECStatus crmf_template_add_public_key(PRArenaPool               *poolp,
  128.       CERTSubjectPublicKeyInfo **dest,
  129.       CERTSubjectPublicKeyInfo  *pubKey);
  130. extern CRMFCertExtension* crmf_create_cert_extension(PRArenaPool *poolp, 
  131.      SECOidTag    tag, 
  132.      PRBool       isCritical,
  133.      SECItem     *data);
  134. extern CRMFCertRequest*
  135. crmf_copy_cert_request(PRArenaPool *poolp, CRMFCertRequest *srcReq);
  136. extern SECStatus crmf_destroy_encrypted_value(CRMFEncryptedValue *inEncrValue, 
  137.       PRBool freeit);
  138. extern CRMFEncryptedValue *
  139. crmf_create_encrypted_value_wrapped_privkey(SECKEYPrivateKey   *inPrivKey,
  140.     SECKEYPublicKey    *inPubKey,
  141.     CRMFEncryptedValue *destValue);
  142. extern CK_MECHANISM_TYPE 
  143.        crmf_get_mechanism_from_public_key(SECKEYPublicKey *inPubKey);
  144. extern SECStatus
  145. crmf_encrypted_value_unwrap_priv_key(PRArenaPool        *poolp,
  146.      CRMFEncryptedValue *encValue,
  147.      SECKEYPrivateKey   *privKey,
  148.      SECKEYPublicKey    *newPubKey,
  149.      SECItem            *nickname,
  150.      PK11SlotInfo       *slot,
  151.      unsigned char       keyUsage,
  152.      SECKEYPrivateKey  **unWrappedKey,
  153.      void               *wincx);
  154. extern SECItem*
  155. crmf_get_public_value(SECKEYPublicKey *pubKey, SECItem *dest);
  156. extern CRMFCertExtension*
  157. crmf_copy_cert_extension(PRArenaPool *poolp, CRMFCertExtension *inExtension);
  158. extern SECStatus
  159. crmf_create_prtime(SECItem *src, PRTime **dest);
  160. #endif /*_CRMFI_H_*/