LTKCPP-- LLRP Toolkit C Plus Plus Library
ecdsa.h
00001 /* crypto/ecdsa/ecdsa.h */
00006 /* ====================================================================
00007  * Copyright (c) 2000-2005 The OpenSSL Project.  All rights reserved.
00008  *
00009  * Redistribution and use in source and binary forms, with or without
00010  * modification, are permitted provided that the following conditions
00011  * are met:
00012  *
00013  * 1. Redistributions of source code must retain the above copyright
00014  *    notice, this list of conditions and the following disclaimer.
00015  *
00016  * 2. Redistributions in binary form must reproduce the above copyright
00017  *    notice, this list of conditions and the following disclaimer in
00018  *    the documentation and/or other materials provided with the
00019  *    distribution.
00020  *
00021  * 3. All advertising materials mentioning features or use of this
00022  *    software must display the following acknowledgment:
00023  *    "This product includes software developed by the OpenSSL Project
00024  *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
00025  *
00026  * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
00027  *    endorse or promote products derived from this software without
00028  *    prior written permission. For written permission, please contact
00029  *    licensing@OpenSSL.org.
00030  *
00031  * 5. Products derived from this software may not be called "OpenSSL"
00032  *    nor may "OpenSSL" appear in their names without prior written
00033  *    permission of the OpenSSL Project.
00034  *
00035  * 6. Redistributions of any form whatsoever must retain the following
00036  *    acknowledgment:
00037  *    "This product includes software developed by the OpenSSL Project
00038  *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
00039  *
00040  * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
00041  * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
00042  * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
00043  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
00044  * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00045  * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
00046  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00047  * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00048  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
00049  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
00050  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
00051  * OF THE POSSIBILITY OF SUCH DAMAGE.
00052  * ====================================================================
00053  *
00054  * This product includes cryptographic software written by Eric Young
00055  * (eay@cryptsoft.com).  This product includes software written by Tim
00056  * Hudson (tjh@cryptsoft.com).
00057  *
00058  */
00059 #ifndef HEADER_ECDSA_H
00060 # define HEADER_ECDSA_H
00061 
00062 # include <openssl/opensslconf.h>
00063 
00064 # ifdef OPENSSL_NO_ECDSA
00065 #  error ECDSA is disabled.
00066 # endif
00067 
00068 # include <openssl/ec.h>
00069 # include <openssl/ossl_typ.h>
00070 # ifndef OPENSSL_NO_DEPRECATED
00071 #  include <openssl/bn.h>
00072 # endif
00073 
00074 #ifdef __cplusplus
00075 extern "C" {
00076 #endif
00077 
00078 typedef struct ECDSA_SIG_st {
00079     BIGNUM *r;
00080     BIGNUM *s;
00081 } ECDSA_SIG;
00082 
00086 ECDSA_SIG *ECDSA_SIG_new(void);
00087 
00091 void ECDSA_SIG_free(ECDSA_SIG *sig);
00092 
00099 int i2d_ECDSA_SIG(const ECDSA_SIG *sig, unsigned char **pp);
00100 
00108 ECDSA_SIG *d2i_ECDSA_SIG(ECDSA_SIG **sig, const unsigned char **pp, long len);
00109 
00117 ECDSA_SIG *ECDSA_do_sign(const unsigned char *dgst, int dgst_len,
00118                          EC_KEY *eckey);
00119 
00130 ECDSA_SIG *ECDSA_do_sign_ex(const unsigned char *dgst, int dgstlen,
00131                             const BIGNUM *kinv, const BIGNUM *rp,
00132                             EC_KEY *eckey);
00133 
00143 int ECDSA_do_verify(const unsigned char *dgst, int dgst_len,
00144                     const ECDSA_SIG *sig, EC_KEY *eckey);
00145 
00146 const ECDSA_METHOD *ECDSA_OpenSSL(void);
00147 
00151 void ECDSA_set_default_method(const ECDSA_METHOD *meth);
00152 
00156 const ECDSA_METHOD *ECDSA_get_default_method(void);
00157 
00163 int ECDSA_set_method(EC_KEY *eckey, const ECDSA_METHOD *meth);
00164 
00169 int ECDSA_size(const EC_KEY *eckey);
00170 
00178 int ECDSA_sign_setup(EC_KEY *eckey, BN_CTX *ctx, BIGNUM **kinv, BIGNUM **rp);
00179 
00190 int ECDSA_sign(int type, const unsigned char *dgst, int dgstlen,
00191                unsigned char *sig, unsigned int *siglen, EC_KEY *eckey);
00192 
00206 int ECDSA_sign_ex(int type, const unsigned char *dgst, int dgstlen,
00207                   unsigned char *sig, unsigned int *siglen,
00208                   const BIGNUM *kinv, const BIGNUM *rp, EC_KEY *eckey);
00209 
00221 int ECDSA_verify(int type, const unsigned char *dgst, int dgstlen,
00222                  const unsigned char *sig, int siglen, EC_KEY *eckey);
00223 
00224 /* the standard ex_data functions */
00225 int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new
00226                            *new_func, CRYPTO_EX_dup *dup_func,
00227                            CRYPTO_EX_free *free_func);
00228 int ECDSA_set_ex_data(EC_KEY *d, int idx, void *arg);
00229 void *ECDSA_get_ex_data(EC_KEY *d, int idx);
00230 
00236 ECDSA_METHOD *ECDSA_METHOD_new(ECDSA_METHOD *ecdsa_method);
00237 
00241 void ECDSA_METHOD_free(ECDSA_METHOD *ecdsa_method);
00242 
00248 void ECDSA_METHOD_set_app_data(ECDSA_METHOD *ecdsa_method, void *app);
00249 
00255 void *ECDSA_METHOD_get_app_data(ECDSA_METHOD *ecdsa_method);
00256 
00262 void ECDSA_METHOD_set_sign(ECDSA_METHOD *ecdsa_method,
00263                            ECDSA_SIG *(*ecdsa_do_sign) (const unsigned char
00264                                                         *dgst, int dgst_len,
00265                                                         const BIGNUM *inv,
00266                                                         const BIGNUM *rp,
00267                                                         EC_KEY *eckey));
00268 
00274 void ECDSA_METHOD_set_sign_setup(ECDSA_METHOD *ecdsa_method,
00275                                  int (*ecdsa_sign_setup) (EC_KEY *eckey,
00276                                                           BN_CTX *ctx,
00277                                                           BIGNUM **kinv,
00278                                                           BIGNUM **r));
00279 
00285 void ECDSA_METHOD_set_verify(ECDSA_METHOD *ecdsa_method,
00286                              int (*ecdsa_do_verify) (const unsigned char
00287                                                      *dgst, int dgst_len,
00288                                                      const ECDSA_SIG *sig,
00289                                                      EC_KEY *eckey));
00290 
00291 void ECDSA_METHOD_set_flags(ECDSA_METHOD *ecdsa_method, int flags);
00292 
00298 void ECDSA_METHOD_set_name(ECDSA_METHOD *ecdsa_method, char *name);
00299 
00305 /* BEGIN ERROR CODES */
00306 /*
00307  * The following lines are auto generated by the script mkerr.pl. Any changes
00308  * made after this point may be overwritten when the script is next run.
00309  */
00310 void ERR_load_ECDSA_strings(void);
00311 
00312 /* Error codes for the ECDSA functions. */
00313 
00314 /* Function codes. */
00315 # define ECDSA_F_ECDSA_CHECK                              104
00316 # define ECDSA_F_ECDSA_DATA_NEW_METHOD                    100
00317 # define ECDSA_F_ECDSA_DO_SIGN                            101
00318 # define ECDSA_F_ECDSA_DO_VERIFY                          102
00319 # define ECDSA_F_ECDSA_METHOD_NEW                         105
00320 # define ECDSA_F_ECDSA_SIGN_SETUP                         103
00321 
00322 /* Reason codes. */
00323 # define ECDSA_R_BAD_SIGNATURE                            100
00324 # define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE              101
00325 # define ECDSA_R_ERR_EC_LIB                               102
00326 # define ECDSA_R_MISSING_PARAMETERS                       103
00327 # define ECDSA_R_NEED_NEW_SETUP_VALUES                    106
00328 # define ECDSA_R_NON_FIPS_METHOD                          107
00329 # define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED          104
00330 # define ECDSA_R_SIGNATURE_MALLOC_FAILED                  105
00331 
00332 #ifdef  __cplusplus
00333 }
00334 #endif
00335 #endif