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

CA认证

开发平台:

WINDOWS

  1. /*
  2.  * crypto.h - public data structures and prototypes for the crypto library
  3.  *
  4.  * The contents of this file are subject to the Mozilla Public
  5.  * License Version 1.1 (the "License"); you may not use this file
  6.  * except in compliance with the License. You may obtain a copy of
  7.  * the License at http://www.mozilla.org/MPL/
  8.  * 
  9.  * Software distributed under the License is distributed on an "AS
  10.  * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
  11.  * implied. See the License for the specific language governing
  12.  * rights and limitations under the License.
  13.  * 
  14.  * The Original Code is the Netscape security libraries.
  15.  * 
  16.  * The Initial Developer of the Original Code is Netscape
  17.  * Communications Corporation.  Portions created by Netscape are 
  18.  * Copyright (C) 1994-2000 Netscape Communications Corporation.  All
  19.  * Rights Reserved.
  20.  * 
  21.  * Contributor(s):
  22.  * 
  23.  * Alternatively, the contents of this file may be used under the
  24.  * terms of the GNU General Public License Version 2 or later (the
  25.  * "GPL"), in which case the provisions of the GPL are applicable 
  26.  * instead of those above.  If you wish to allow use of your 
  27.  * version of this file only under the terms of the GPL and not to
  28.  * allow others to use your version of this file under the MPL,
  29.  * indicate your decision by deleting the provisions above and
  30.  * replace them with the notice and other provisions required by
  31.  * the GPL.  If you do not delete the provisions above, a recipient
  32.  * may use your version of this file under either the MPL or the
  33.  * GPL.
  34.  *
  35.  * $Id: cryptohi.h,v 1.1 2000/03/31 19:44:59 relyea%netscape.com Exp $
  36.  */
  37. #ifndef _CRYPTOHI_H_
  38. #define _CRYPTOHI_H_
  39. #include "blapi.h"
  40. #include "mcom_db.h"
  41. #include "seccomon.h"
  42. #include "secrngt.h"
  43. #include "secoidt.h"
  44. #include "secdert.h"
  45. #include "cryptoht.h"
  46. #include "keyt.h"
  47. #include "certt.h"
  48. SEC_BEGIN_PROTOS
  49. /****************************************/
  50. /*
  51. ** DER encode/decode DSA signatures
  52. */
  53. /* ANSI X9.57 defines DSA signatures as DER encoded data.  Our DSA code (and
  54.  * most of the rest of the world) just generates 40 bytes of raw data.  These
  55.  * functions convert between formats.
  56.  */
  57. extern SECStatus DSAU_EncodeDerSig(SECItem *dest, SECItem *src);
  58. extern SECItem *DSAU_DecodeDerSig(SECItem *item);
  59. /****************************************/
  60. /*
  61. ** Signature creation operations
  62. */
  63. /*
  64. ** Create a new signature context used for signing a data stream.
  65. ** "alg" the signature algorithm to use (e.g. SEC_OID_RSA_WITH_MD5)
  66. ** "privKey" the private key to use
  67. */
  68. extern SGNContext *SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *privKey);
  69. /*
  70. ** Destroy a signature-context object
  71. ** "key" the object
  72. ** "freeit" if PR_TRUE then free the object as well as its sub-objects
  73. */
  74. extern void SGN_DestroyContext(SGNContext *cx, PRBool freeit);
  75. /*
  76. ** Reset the signing context "cx" to its initial state, preparing it for
  77. ** another stream of data.
  78. */
  79. extern SECStatus SGN_Begin(SGNContext *cx);
  80. /*
  81. ** Update the signing context with more data to sign.
  82. ** "cx" the context
  83. ** "input" the input data to sign
  84. ** "inputLen" the length of the input data
  85. */
  86. extern SECStatus SGN_Update(SGNContext *cx, unsigned char *input,
  87.    unsigned int inputLen);
  88. /*
  89. ** Finish the signature process. Use either k0 or k1 to sign the data
  90. ** stream that was input using SGN_Update. The resulting signature is
  91. ** formatted using PKCS#1 and then encrypted using RSA private or public
  92. ** encryption.
  93. ** "cx" the context
  94. ** "result" the final signature data (memory is allocated)
  95. */
  96. extern SECStatus SGN_End(SGNContext *cx, SECItem *result);
  97. /*
  98. ** Sign a single block of data using private key encryption and given
  99. ** signature/hash algorithm.
  100. ** "result" the final signature data (memory is allocated)
  101. ** "buf" the input data to sign
  102. ** "len" the amount of data to sign
  103. ** "pk" the private key to encrypt with
  104. ** "algid" the signature/hash algorithm to sign with 
  105. ** (must be compatible with the key type).
  106. */
  107. extern SECStatus SEC_SignData(SECItem *result, unsigned char *buf, int len,
  108.      SECKEYPrivateKey *pk, SECOidTag algid);
  109. /*
  110. ** Sign a pre-digested block of data using private key encryption, encoding
  111. **  The given signature/hash algorithm.
  112. ** "result" the final signature data (memory is allocated)
  113. ** "digest" the digest to sign
  114. ** "pk" the private key to encrypt with
  115. ** "algtag" The algorithm tag to encode (need for RSA only)
  116. */
  117. extern SECStatus SGN_Digest(SECKEYPrivateKey *privKey,
  118.                 SECOidTag algtag, SECItem *result, SECItem *digest);
  119. /*
  120. ** DER sign a single block of data using private key encryption and the
  121. ** MD5 hashing algorithm. This routine first computes a digital signature
  122. ** using SEC_SignData, then wraps it with an CERTSignedData and then der
  123. ** encodes the result.
  124. ** "arena" is the memory arena to use to allocate data from
  125. **  "result" the final der encoded data (memory is allocated)
  126. **  "buf" the input data to sign
  127. **  "len" the amount of data to sign
  128. **  "pk" the private key to encrypt with
  129. */
  130. extern SECStatus SEC_DerSignData(PRArenaPool *arena, SECItem *result,
  131. unsigned char *buf, int len,
  132. SECKEYPrivateKey *pk, SECOidTag algid);
  133. /*
  134. ** Destroy a signed-data object.
  135. ** "sd" the object
  136. ** "freeit" if PR_TRUE then free the object as well as its sub-objects
  137. */
  138. extern void SEC_DestroySignedData(CERTSignedData *sd, PRBool freeit);
  139. /****************************************/
  140. /*
  141. ** Signature verification operations
  142. */
  143. /*
  144. ** Create a signature verification context.
  145. ** "key" the public key to verify with
  146. ** "sig" the encrypted signature data
  147. ** "algid" specifies the signing algorithm to use.  This must match
  148. **     the key type.
  149. ** "wincx" void pointer to the window context
  150. */
  151. extern VFYContext *VFY_CreateContext(SECKEYPublicKey *key, SECItem *sig,
  152.      SECOidTag algid, void *wincx);
  153. /*
  154. ** Destroy a verification-context object.
  155. ** "cx" the context to destroy
  156. ** "freeit" if PR_TRUE then free the object as well as its sub-objects
  157. */
  158. extern void VFY_DestroyContext(VFYContext *cx, PRBool freeit);
  159. extern SECStatus VFY_Begin(VFYContext *cx);
  160. /*
  161. ** Update a verification context with more input data. The input data
  162. ** is fed to a secure hash function (depending on what was in the
  163. ** encrypted signature data).
  164. ** "cx" the context
  165. ** "input" the input data
  166. ** "inputLen" the amount of input data
  167. */
  168. extern SECStatus VFY_Update(VFYContext *cx, unsigned char *input,
  169.     unsigned int inputLen);
  170. /*
  171. ** Finish the verification process. The return value is a status which
  172. ** indicates success or failure. On success, the SECSuccess value is
  173. ** returned. Otherwise, SECFailure is returned and the error code found
  174. ** using PORT_GetError() indicates what failure occurred.
  175. **  "cx" the context
  176. */
  177. extern SECStatus VFY_End(VFYContext *cx);
  178. /*
  179. ** Verify the signature on a block of data for which we already have
  180. ** the digest. The signature data is an RSA private key encrypted
  181. ** block of data formatted according to PKCS#1.
  182. **  "dig" the digest
  183. **  "key" the public key to check the signature with
  184. **  "sig" the encrypted signature data
  185. ** "algid" specifies the signing algorithm to use.  This must match
  186. **     the key type.
  187. **/
  188. extern SECStatus VFY_VerifyDigest(SECItem *dig, SECKEYPublicKey *key,
  189.   SECItem *sig, SECOidTag algid, void *wincx);
  190. /*
  191. ** Verify the signature on a block of data. The signature data is an RSA
  192. ** private key encrypted block of data formatted according to PKCS#1.
  193. **  "buf" the input data
  194. **  "len" the length of the input data
  195. **  "key" the public key to check the signature with
  196. **  "sig" the encrypted signature data
  197. ** "algid" specifies the signing algorithm to use.  This must match
  198. **     the key type.
  199. */
  200. extern SECStatus VFY_VerifyData(unsigned char *buf, int len,
  201. SECKEYPublicKey *key, SECItem *sig,
  202. SECOidTag algid, void *wincx);
  203. SEC_END_PROTOS
  204. #endif /* _CRYPTOHI_H_ */