cryptohi.h
来自「支持SSL v2/v3, TLS, PKCS #5, PKCS #7, PKCS」· C头文件 代码 · 共 237 行
H
237 行
/* * crypto.h - public data structures and prototypes for the crypto library * * 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 Netscape are * Copyright (C) 1994-2000 Netscape Communications Corporation. All * Rights Reserved. * * Contributor(s): * * Alternatively, the contents of this file may be used under the * terms of the GNU General Public License Version 2 or later (the * "GPL"), in which case the provisions of the GPL are applicable * instead of those above. If you wish to allow use of your * version of this file only under the terms of the GPL and not to * allow others to use your version of this file under the MPL, * indicate your decision by deleting the provisions above and * replace them with the notice and other provisions required by * the GPL. If you do not delete the provisions above, a recipient * may use your version of this file under either the MPL or the * GPL. * * $Id: cryptohi.h,v 1.1 2000/03/31 19:44:59 relyea%netscape.com Exp $ */#ifndef _CRYPTOHI_H_#define _CRYPTOHI_H_#include "blapi.h"#include "mcom_db.h"#include "seccomon.h"#include "secrngt.h"#include "secoidt.h"#include "secdert.h"#include "cryptoht.h"#include "keyt.h"#include "certt.h"SEC_BEGIN_PROTOS/****************************************//*** DER encode/decode DSA signatures*//* ANSI X9.57 defines DSA signatures as DER encoded data. Our DSA code (and * most of the rest of the world) just generates 40 bytes of raw data. These * functions convert between formats. */extern SECStatus DSAU_EncodeDerSig(SECItem *dest, SECItem *src);extern SECItem *DSAU_DecodeDerSig(SECItem *item);/****************************************//*** Signature creation operations*//*** Create a new signature context used for signing a data stream.** "alg" the signature algorithm to use (e.g. SEC_OID_RSA_WITH_MD5)** "privKey" the private key to use*/extern SGNContext *SGN_NewContext(SECOidTag alg, SECKEYPrivateKey *privKey);/*** Destroy a signature-context object** "key" the object** "freeit" if PR_TRUE then free the object as well as its sub-objects*/extern void SGN_DestroyContext(SGNContext *cx, PRBool freeit);/*** Reset the signing context "cx" to its initial state, preparing it for** another stream of data.*/extern SECStatus SGN_Begin(SGNContext *cx);/*** Update the signing context with more data to sign.** "cx" the context** "input" the input data to sign** "inputLen" the length of the input data*/extern SECStatus SGN_Update(SGNContext *cx, unsigned char *input, unsigned int inputLen);/*** Finish the signature process. Use either k0 or k1 to sign the data** stream that was input using SGN_Update. The resulting signature is** formatted using PKCS#1 and then encrypted using RSA private or public** encryption.** "cx" the context** "result" the final signature data (memory is allocated)*/extern SECStatus SGN_End(SGNContext *cx, SECItem *result);/*** Sign a single block of data using private key encryption and given** signature/hash algorithm.** "result" the final signature data (memory is allocated)** "buf" the input data to sign** "len" the amount of data to sign** "pk" the private key to encrypt with** "algid" the signature/hash algorithm to sign with ** (must be compatible with the key type).*/extern SECStatus SEC_SignData(SECItem *result, unsigned char *buf, int len, SECKEYPrivateKey *pk, SECOidTag algid);/*** Sign a pre-digested block of data using private key encryption, encoding** The given signature/hash algorithm.** "result" the final signature data (memory is allocated)** "digest" the digest to sign** "pk" the private key to encrypt with** "algtag" The algorithm tag to encode (need for RSA only)*/extern SECStatus SGN_Digest(SECKEYPrivateKey *privKey, SECOidTag algtag, SECItem *result, SECItem *digest);/*** DER sign a single block of data using private key encryption and the** MD5 hashing algorithm. This routine first computes a digital signature** using SEC_SignData, then wraps it with an CERTSignedData and then der** encodes the result.** "arena" is the memory arena to use to allocate data from** "result" the final der encoded data (memory is allocated)** "buf" the input data to sign** "len" the amount of data to sign** "pk" the private key to encrypt with*/extern SECStatus SEC_DerSignData(PRArenaPool *arena, SECItem *result, unsigned char *buf, int len, SECKEYPrivateKey *pk, SECOidTag algid);/*** Destroy a signed-data object.** "sd" the object** "freeit" if PR_TRUE then free the object as well as its sub-objects*/extern void SEC_DestroySignedData(CERTSignedData *sd, PRBool freeit);/****************************************//*** Signature verification operations*//*** Create a signature verification context.** "key" the public key to verify with** "sig" the encrypted signature data** "algid" specifies the signing algorithm to use. This must match** the key type.** "wincx" void pointer to the window context*/extern VFYContext *VFY_CreateContext(SECKEYPublicKey *key, SECItem *sig, SECOidTag algid, void *wincx);/*** Destroy a verification-context object.** "cx" the context to destroy** "freeit" if PR_TRUE then free the object as well as its sub-objects*/extern void VFY_DestroyContext(VFYContext *cx, PRBool freeit);extern SECStatus VFY_Begin(VFYContext *cx);/*** Update a verification context with more input data. The input data** is fed to a secure hash function (depending on what was in the** encrypted signature data).** "cx" the context** "input" the input data** "inputLen" the amount of input data*/extern SECStatus VFY_Update(VFYContext *cx, unsigned char *input, unsigned int inputLen);/*** Finish the verification process. The return value is a status which** indicates success or failure. On success, the SECSuccess value is** returned. Otherwise, SECFailure is returned and the error code found** using PORT_GetError() indicates what failure occurred.** "cx" the context*/extern SECStatus VFY_End(VFYContext *cx);/*** Verify the signature on a block of data for which we already have** the digest. The signature data is an RSA private key encrypted** block of data formatted according to PKCS#1.** "dig" the digest** "key" the public key to check the signature with** "sig" the encrypted signature data** "algid" specifies the signing algorithm to use. This must match** the key type.**/extern SECStatus VFY_VerifyDigest(SECItem *dig, SECKEYPublicKey *key, SECItem *sig, SECOidTag algid, void *wincx);/*** Verify the signature on a block of data. The signature data is an RSA** private key encrypted block of data formatted according to PKCS#1.** "buf" the input data** "len" the length of the input data** "key" the public key to check the signature with** "sig" the encrypted signature data** "algid" specifies the signing algorithm to use. This must match** the key type.*/extern SECStatus VFY_VerifyData(unsigned char *buf, int len, SECKEYPublicKey *key, SECItem *sig, SECOidTag algid, void *wincx);SEC_END_PROTOS#endif /* _CRYPTOHI_H_ */
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?