1 /* dsa.h 2 * 3 * Copyright (C) 2006-2021 wolfSSL Inc. 4 * 5 * This file is part of wolfSSL. 6 * 7 * wolfSSL is free software; you can redistribute it and/or modify 8 * it under the terms of the GNU General Public License as published by 9 * the Free Software Foundation; either version 2 of the License, or 10 * (at your option) any later version. 11 * 12 * wolfSSL is distributed in the hope that it will be useful, 13 * but WITHOUT ANY WARRANTY; without even the implied warranty of 14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 * GNU General Public License for more details. 16 * 17 * You should have received a copy of the GNU General Public License 18 * along with this program; if not, write to the Free Software 19 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA 20 */ 21 22 /* dsa.h for openSSL */ 23 24 25 #ifndef WOLFSSL_DSA_H_ 26 #define WOLFSSL_DSA_H_ 27 28 #include <wolfssl/openssl/bn.h> 29 30 #ifdef __cplusplus 31 extern "C" { 32 #endif 33 34 typedef struct WOLFSSL_DSA_SIG { 35 WOLFSSL_BIGNUM *r; 36 WOLFSSL_BIGNUM *s; 37 } WOLFSSL_DSA_SIG; 38 39 #ifndef WOLFSSL_DSA_TYPE_DEFINED /* guard on redeclaration */ 40 typedef struct WOLFSSL_DSA WOLFSSL_DSA; 41 #define WOLFSSL_DSA_TYPE_DEFINED 42 #endif 43 44 typedef WOLFSSL_DSA DSA; 45 46 struct WOLFSSL_DSA { 47 WOLFSSL_BIGNUM* p; 48 WOLFSSL_BIGNUM* q; 49 WOLFSSL_BIGNUM* g; 50 WOLFSSL_BIGNUM* pub_key; /* our y */ 51 WOLFSSL_BIGNUM* priv_key; /* our x */ 52 void* internal; /* our Dsa Key */ 53 char inSet; /* internal set from external ? */ 54 char exSet; /* external set from internal ? */ 55 }; 56 57 58 WOLFSSL_API WOLFSSL_DSA* wolfSSL_DSA_new(void); 59 WOLFSSL_API void wolfSSL_DSA_free(WOLFSSL_DSA*); 60 #if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM) 61 WOLFSSL_API int wolfSSL_DSA_print_fp(XFILE, WOLFSSL_DSA*, int); 62 #endif /* !NO_FILESYSTEM && NO_STDIO_FILESYSTEM */ 63 64 WOLFSSL_API int wolfSSL_DSA_generate_key(WOLFSSL_DSA*); 65 66 typedef void (*WOLFSSL_BN_CB)(int i, int j, void* exArg); 67 WOLFSSL_API WOLFSSL_DSA* wolfSSL_DSA_generate_parameters(int bits, 68 unsigned char* seed, int seedLen, int* counterRet, 69 unsigned long* hRet, WOLFSSL_BN_CB cb, void* CBArg); 70 WOLFSSL_API int wolfSSL_DSA_generate_parameters_ex(WOLFSSL_DSA*, int bits, 71 unsigned char* seed, int seedLen, int* counterRet, 72 unsigned long* hRet, void* cb); 73 74 WOLFSSL_API void wolfSSL_DSA_get0_pqg(const WOLFSSL_DSA *d, const WOLFSSL_BIGNUM **p, 75 const WOLFSSL_BIGNUM **q, const WOLFSSL_BIGNUM **g); 76 WOLFSSL_API int wolfSSL_DSA_set0_pqg(WOLFSSL_DSA *d, WOLFSSL_BIGNUM *p, 77 WOLFSSL_BIGNUM *q, WOLFSSL_BIGNUM *g); 78 79 WOLFSSL_API void wolfSSL_DSA_get0_key(const WOLFSSL_DSA *d, 80 const WOLFSSL_BIGNUM **pub_key, const WOLFSSL_BIGNUM **priv_key); 81 WOLFSSL_API int wolfSSL_DSA_set0_key(WOLFSSL_DSA *d, WOLFSSL_BIGNUM *pub_key, 82 WOLFSSL_BIGNUM *priv_key); 83 84 85 WOLFSSL_API int wolfSSL_DSA_LoadDer(WOLFSSL_DSA*, const unsigned char*, int sz); 86 87 WOLFSSL_API int wolfSSL_DSA_LoadDer_ex(WOLFSSL_DSA*, const unsigned char*, 88 int sz, int opt); 89 90 WOLFSSL_API int wolfSSL_DSA_do_sign(const unsigned char* d, 91 unsigned char* sigRet, WOLFSSL_DSA* dsa); 92 93 WOLFSSL_API int wolfSSL_DSA_do_verify(const unsigned char* d, 94 unsigned char* sig, 95 WOLFSSL_DSA* dsa, int *dsacheck); 96 97 WOLFSSL_API int wolfSSL_DSA_bits(const WOLFSSL_DSA *d); 98 99 WOLFSSL_API WOLFSSL_DSA_SIG* wolfSSL_DSA_SIG_new(void); 100 WOLFSSL_API void wolfSSL_DSA_SIG_free(WOLFSSL_DSA_SIG *sig); 101 102 WOLFSSL_API void wolfSSL_DSA_SIG_get0(const WOLFSSL_DSA_SIG *sig, 103 const WOLFSSL_BIGNUM **r, const WOLFSSL_BIGNUM **s); 104 WOLFSSL_API int wolfSSL_DSA_SIG_set0(WOLFSSL_DSA_SIG *sig, WOLFSSL_BIGNUM *r, 105 WOLFSSL_BIGNUM *s); 106 107 WOLFSSL_API int wolfSSL_i2d_DSA_SIG(const WOLFSSL_DSA_SIG *sig, byte **out); 108 WOLFSSL_API WOLFSSL_DSA_SIG* wolfSSL_d2i_DSA_SIG(WOLFSSL_DSA_SIG **sig, 109 const unsigned char **pp, long length); 110 WOLFSSL_API WOLFSSL_DSA_SIG* wolfSSL_DSA_do_sign_ex(const unsigned char* digest, 111 int inLen, WOLFSSL_DSA* dsa); 112 WOLFSSL_API int wolfSSL_DSA_do_verify_ex(const unsigned char* digest, int digest_len, 113 WOLFSSL_DSA_SIG* sig, WOLFSSL_DSA* dsa); 114 115 WOLFSSL_API int wolfSSL_i2d_DSAparams(const WOLFSSL_DSA*, unsigned char**); 116 WOLFSSL_API WOLFSSL_DSA* wolfSSL_d2i_DSAparams(WOLFSSL_DSA**, 117 const unsigned char **, long); 118 119 #define WOLFSSL_DSA_LOAD_PRIVATE 1 120 #define WOLFSSL_DSA_LOAD_PUBLIC 2 121 122 #define DSA_new wolfSSL_DSA_new 123 #define DSA_free wolfSSL_DSA_free 124 #define DSA_print_fp wolfSSL_DSA_print_fp 125 126 #define DSA_LoadDer wolfSSL_DSA_LoadDer 127 #define DSA_generate_key wolfSSL_DSA_generate_key 128 #define DSA_generate_parameters wolfSSL_DSA_generate_parameters 129 #define DSA_generate_parameters_ex wolfSSL_DSA_generate_parameters_ex 130 #define DSA_get0_pqg wolfSSL_DSA_get0_pqg 131 #define DSA_set0_pqg wolfSSL_DSA_set0_pqg 132 #define DSA_get0_key wolfSSL_DSA_get0_key 133 #define DSA_set0_key wolfSSL_DSA_set0_key 134 135 #define DSA_SIG_new wolfSSL_DSA_SIG_new 136 #define DSA_SIG_free wolfSSL_DSA_SIG_free 137 #define DSA_SIG_get0 wolfSSL_DSA_SIG_get0 138 #define DSA_SIG_set0 wolfSSL_DSA_SIG_set0 139 #define i2d_DSA_SIG wolfSSL_i2d_DSA_SIG 140 #define d2i_DSA_SIG wolfSSL_d2i_DSA_SIG 141 #define DSA_do_sign wolfSSL_DSA_do_sign_ex 142 #define DSA_do_verify wolfSSL_DSA_do_verify_ex 143 #define i2d_DSAparams wolfSSL_i2d_DSAparams 144 #define d2i_DSAparams wolfSSL_d2i_DSAparams 145 146 #define DSA_SIG WOLFSSL_DSA_SIG 147 148 #ifdef __cplusplus 149 } /* extern "C" */ 150 #endif 151 152 #endif /* header */ 153