ecdsa.h
上传用户:yisoukefu
上传日期:2020-08-09
资源大小:39506k
文件大小:10k
源码类别:

其他游戏

开发平台:

Visual C++

  1. /* crypto/ecdsa/ecdsa.h */
  2. /**
  3.  * file   crypto/ecdsa/ecdsa.h Include file for the OpenSSL ECDSA functions
  4.  * author Written by Nils Larsch for the OpenSSL project
  5.  */
  6. /* ====================================================================
  7.  * Copyright (c) 2000-2003 The OpenSSL Project.  All rights reserved.
  8.  *
  9.  * Redistribution and use in source and binary forms, with or without
  10.  * modification, are permitted provided that the following conditions
  11.  * are met:
  12.  *
  13.  * 1. Redistributions of source code must retain the above copyright
  14.  *    notice, this list of conditions and the following disclaimer. 
  15.  *
  16.  * 2. Redistributions in binary form must reproduce the above copyright
  17.  *    notice, this list of conditions and the following disclaimer in
  18.  *    the documentation and/or other materials provided with the
  19.  *    distribution.
  20.  *
  21.  * 3. All advertising materials mentioning features or use of this
  22.  *    software must display the following acknowledgment:
  23.  *    "This product includes software developed by the OpenSSL Project
  24.  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
  25.  *
  26.  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
  27.  *    endorse or promote products derived from this software without
  28.  *    prior written permission. For written permission, please contact
  29.  *    licensing@OpenSSL.org.
  30.  *
  31.  * 5. Products derived from this software may not be called "OpenSSL"
  32.  *    nor may "OpenSSL" appear in their names without prior written
  33.  *    permission of the OpenSSL Project.
  34.  *
  35.  * 6. Redistributions of any form whatsoever must retain the following
  36.  *    acknowledgment:
  37.  *    "This product includes software developed by the OpenSSL Project
  38.  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
  39.  *
  40.  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
  41.  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  42.  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
  43.  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
  44.  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  45.  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
  46.  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
  47.  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  48.  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
  49.  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
  50.  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
  51.  * OF THE POSSIBILITY OF SUCH DAMAGE.
  52.  * ====================================================================
  53.  *
  54.  * This product includes cryptographic software written by Eric Young
  55.  * (eay@cryptsoft.com).  This product includes software written by Tim
  56.  * Hudson (tjh@cryptsoft.com).
  57.  *
  58.  */
  59. #ifndef HEADER_ECDSA_H
  60. #define HEADER_ECDSA_H
  61. #include <openssl/opensslconf.h>
  62. #ifdef OPENSSL_NO_ECDSA
  63. #error ECDSA is disabled.
  64. #endif
  65. #include <openssl/ec.h>
  66. #include <openssl/ossl_typ.h>
  67. #ifndef OPENSSL_NO_DEPRECATED
  68. #include <openssl/bn.h>
  69. #endif
  70. #ifdef __cplusplus
  71. extern "C" {
  72. #endif
  73. typedef struct ECDSA_SIG_st
  74. {
  75. BIGNUM *r;
  76. BIGNUM *s;
  77. } ECDSA_SIG;
  78. /** ECDSA_SIG *ECDSA_SIG_new(void)
  79.  * allocates and initialize a ECDSA_SIG structure
  80.  * return pointer to a ECDSA_SIG structure or NULL if an error occurred
  81.  */
  82. ECDSA_SIG *ECDSA_SIG_new(void);
  83. /** ECDSA_SIG_free
  84.  * frees a ECDSA_SIG structure
  85.  * param a pointer to the ECDSA_SIG structure
  86.  */
  87. void   ECDSA_SIG_free(ECDSA_SIG *a);
  88. /** i2d_ECDSA_SIG
  89.  * DER encode content of ECDSA_SIG object (note: this function modifies *pp
  90.  * (*pp += length of the DER encoded signature)).
  91.  * param a  pointer to the ECDSA_SIG object
  92.  * param pp pointer to a unsigned char pointer for the output or NULL
  93.  * return the length of the DER encoded ECDSA_SIG object or 0 
  94.  */
  95. int   i2d_ECDSA_SIG(const ECDSA_SIG *a, unsigned char **pp);
  96. /** d2i_ECDSA_SIG
  97.  * decodes a DER encoded ECDSA signature (note: this function changes *pp
  98.  * (*pp += len)). 
  99.  * param v pointer to ECDSA_SIG pointer (may be NULL)
  100.  * param pp buffer with the DER encoded signature
  101.  * param len bufferlength
  102.  * return pointer to the decoded ECDSA_SIG structure (or NULL)
  103.  */
  104. ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **v, const unsigned char **pp, long len);
  105. /** ECDSA_do_sign
  106.  * computes the ECDSA signature of the given hash value using
  107.  * the supplied private key and returns the created signature.
  108.  * param dgst pointer to the hash value
  109.  * param dgst_len length of the hash value
  110.  * param eckey pointer to the EC_KEY object containing a private EC key
  111.  * return pointer to a ECDSA_SIG structure or NULL
  112.  */
  113. ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst,int dgst_len,EC_KEY *eckey);
  114. /** ECDSA_do_sign_ex
  115.  * computes ECDSA signature of a given hash value using the supplied
  116.  * private key (note: sig must point to ECDSA_size(eckey) bytes of memory).
  117.  * param dgst pointer to the hash value to sign
  118.  * param dgstlen length of the hash value
  119.  * param kinv optional pointer to a pre-computed inverse k
  120.  * param rp optional pointer to the pre-computed rp value (see 
  121.  *        ECDSA_sign_setup
  122.  * param eckey pointer to the EC_KEY object containing a private EC key
  123.  * return pointer to a ECDSA_SIG structure or NULL
  124.  */
  125. ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen, 
  126. const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey);
  127. /** ECDSA_do_verify
  128.  * verifies that the supplied signature is a valid ECDSA
  129.  * signature of the supplied hash value using the supplied public key.
  130.  * param dgst pointer to the hash value
  131.  * param dgst_len length of the hash value
  132.  * param sig  pointer to the ECDSA_SIG structure
  133.  * param eckey pointer to the EC_KEY object containing a public EC key
  134.  * return 1 if the signature is valid, 0 if the signature is invalid and -1 on error
  135.  */
  136. int   ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
  137. const ECDSA_SIG *sig, EC_KEY* eckey);
  138. const ECDSA_METHOD *ECDSA_OpenSSL(void);
  139. /** ECDSA_set_default_method
  140.  * sets the default ECDSA method
  141.  * param meth the new default ECDSA_METHOD
  142.  */
  143. void   ECDSA_set_default_method(const ECDSA_METHOD *meth);
  144. /** ECDSA_get_default_method
  145.  * returns the default ECDSA method
  146.  * return pointer to ECDSA_METHOD structure containing the default method
  147.  */
  148. const ECDSA_METHOD *ECDSA_get_default_method(void);
  149. /** ECDSA_set_method
  150.  * sets method to be used for the ECDSA operations
  151.  * param eckey pointer to the EC_KEY object
  152.  * param meth  pointer to the new method
  153.  * return 1 on success and 0 otherwise 
  154.  */
  155. int    ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth);
  156. /** ECDSA_size
  157.  * returns the maximum length of the DER encoded signature
  158.  * param  eckey pointer to a EC_KEY object
  159.  * return numbers of bytes required for the DER encoded signature
  160.  */
  161. int   ECDSA_size(const EC_KEY *eckey);
  162. /** ECDSA_sign_setup
  163.  * precompute parts of the signing operation. 
  164.  * param eckey pointer to the EC_KEY object containing a private EC key
  165.  * param ctx  pointer to a BN_CTX object (may be NULL)
  166.  * param kinv pointer to a BIGNUM pointer for the inverse of k
  167.  * param rp   pointer to a BIGNUM pointer for x coordinate of k * generator
  168.  * return 1 on success and 0 otherwise
  169.  */
  170. int    ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, 
  171. BIGNUM **rp);
  172. /** ECDSA_sign
  173.  * computes ECDSA signature of a given hash value using the supplied
  174.  * private key (note: sig must point to ECDSA_size(eckey) bytes of memory).
  175.  * param type this parameter is ignored
  176.  * param dgst pointer to the hash value to sign
  177.  * param dgstlen length of the hash value
  178.  * param sig buffer to hold the DER encoded signature
  179.  * param siglen pointer to the length of the returned signature
  180.  * param eckey pointer to the EC_KEY object containing a private EC key
  181.  * return 1 on success and 0 otherwise
  182.  */
  183. int   ECDSA_sign(int type, const unsigned char *dgst, int dgstlen, 
  184. unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
  185. /** ECDSA_sign_ex
  186.  * computes ECDSA signature of a given hash value using the supplied
  187.  * private key (note: sig must point to ECDSA_size(eckey) bytes of memory).
  188.  * param type this parameter is ignored
  189.  * param dgst pointer to the hash value to sign
  190.  * param dgstlen length of the hash value
  191.  * param sig buffer to hold the DER encoded signature
  192.  * param siglen pointer to the length of the returned signature
  193.  * param kinv optional pointer to a pre-computed inverse k
  194.  * param rp optional pointer to the pre-computed rp value (see 
  195.  *        ECDSA_sign_setup
  196.  * param eckey pointer to the EC_KEY object containing a private EC key
  197.  * return 1 on success and 0 otherwise
  198.  */
  199. int   ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen, 
  200. unsigned char *sig, unsigned int *siglen, const BIGNUM *kinv,
  201. const BIGNUM *rp, EC_KEY *eckey);
  202. /** ECDSA_verify
  203.  * verifies that the given signature is valid ECDSA signature
  204.  * of the supplied hash value using the specified public key.
  205.  * param type this parameter is ignored
  206.  * param dgst pointer to the hash value 
  207.  * param dgstlen length of the hash value
  208.  * param sig  pointer to the DER encoded signature
  209.  * param siglen length of the DER encoded signature
  210.  * param eckey pointer to the EC_KEY object containing a public EC key
  211.  * return 1 if the signature is valid, 0 if the signature is invalid and -1 on error
  212.  */
  213. int    ECDSA_verify(int type, const unsigned char *dgst, int dgstlen, 
  214. const unsigned char *sig, int siglen, EC_KEY *eckey);
  215. /* the standard ex_data functions */
  216. int    ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new 
  217. *new_func, CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
  218. int    ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg);
  219. void    *ECDSA_get_ex_data(EC_KEY *d, int idx);
  220. /* BEGIN ERROR CODES */
  221. /* The following lines are auto generated by the script mkerr.pl. Any changes
  222.  * made after this point may be overwritten when the script is next run.
  223.  */
  224. void ERR_load_ECDSA_strings(void);
  225. /* Error codes for the ECDSA functions. */
  226. /* Function codes. */
  227. #define ECDSA_F_ECDSA_DATA_NEW_METHOD  100
  228. #define ECDSA_F_ECDSA_DO_SIGN  101
  229. #define ECDSA_F_ECDSA_DO_VERIFY  102
  230. #define ECDSA_F_ECDSA_SIGN_SETUP  103
  231. /* Reason codes. */
  232. #define ECDSA_R_BAD_SIGNATURE  100
  233. #define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE  101
  234. #define ECDSA_R_ERR_EC_LIB  102
  235. #define ECDSA_R_MISSING_PARAMETERS  103
  236. #define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED  104
  237. #define ECDSA_R_SIGNATURE_MALLOC_FAILED  105
  238. #ifdef  __cplusplus
  239. }
  240. #endif
  241. #endif