dsa.h (6153B)
1 /* dsa.h 2 * 3 * Copyright (C) 2006-2025 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 3 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 #include <wolfssl/openssl/compat_types.h> 30 31 #ifdef __cplusplus 32 extern "C" { 33 #endif 34 35 typedef struct WOLFSSL_DSA_SIG { 36 WOLFSSL_BIGNUM *r; 37 WOLFSSL_BIGNUM *s; 38 } WOLFSSL_DSA_SIG; 39 40 #ifndef WOLFSSL_DSA_TYPE_DEFINED /* guard on redeclaration */ 41 typedef struct WOLFSSL_DSA WOLFSSL_DSA; 42 #define WOLFSSL_DSA_TYPE_DEFINED 43 #endif 44 45 struct WOLFSSL_DSA { 46 WOLFSSL_BIGNUM* p; 47 WOLFSSL_BIGNUM* q; 48 WOLFSSL_BIGNUM* g; 49 WOLFSSL_BIGNUM* pub_key; /* our y */ 50 WOLFSSL_BIGNUM* priv_key; /* our x */ 51 void* internal; /* our Dsa Key */ 52 char inSet; /* internal set from external ? */ 53 char exSet; /* external set from internal ? */ 54 }; 55 56 57 WOLFSSL_API WOLFSSL_DSA* wolfSSL_DSA_new(void); 58 WOLFSSL_API void wolfSSL_DSA_free(WOLFSSL_DSA* dsa); 59 #if !defined(NO_FILESYSTEM) && !defined(NO_STDIO_FILESYSTEM) 60 WOLFSSL_API int wolfSSL_DSA_print_fp(XFILE fp, WOLFSSL_DSA* dsa, int indent); 61 #endif /* !NO_FILESYSTEM && NO_STDIO_FILESYSTEM */ 62 63 WOLFSSL_API int wolfSSL_DSA_generate_key(WOLFSSL_DSA* dsa); 64 65 typedef void (*WOLFSSL_BN_CB)(int i, int j, void* exArg); 66 WOLFSSL_API WOLFSSL_DSA* wolfSSL_DSA_generate_parameters(int bits, 67 unsigned char* seed, int seedLen, int* counterRet, 68 unsigned long* hRet, WOLFSSL_BN_CB cb, void* CBArg); 69 WOLFSSL_API int wolfSSL_DSA_generate_parameters_ex(WOLFSSL_DSA* dsa, int bits, 70 unsigned char* seed, int seedLen, int* counterRet, 71 unsigned long* hRet, void* cb); 72 73 WOLFSSL_API void wolfSSL_DSA_get0_pqg(const WOLFSSL_DSA *d, const WOLFSSL_BIGNUM **p, 74 const WOLFSSL_BIGNUM **q, const WOLFSSL_BIGNUM **g); 75 WOLFSSL_API int wolfSSL_DSA_set0_pqg(WOLFSSL_DSA *d, WOLFSSL_BIGNUM *p, 76 WOLFSSL_BIGNUM *q, WOLFSSL_BIGNUM *g); 77 78 WOLFSSL_API void wolfSSL_DSA_get0_key(const WOLFSSL_DSA *d, 79 const WOLFSSL_BIGNUM **pub_key, const WOLFSSL_BIGNUM **priv_key); 80 WOLFSSL_API int wolfSSL_DSA_set0_key(WOLFSSL_DSA *d, WOLFSSL_BIGNUM *pub_key, 81 WOLFSSL_BIGNUM *priv_key); 82 83 84 WOLFSSL_API int wolfSSL_DSA_LoadDer( 85 WOLFSSL_DSA* dsa, const unsigned char* derBuf, int derSz); 86 87 WOLFSSL_API int wolfSSL_DSA_LoadDer_ex( 88 WOLFSSL_DSA* dsa, const unsigned char* derBuf, int derSz, int opt); 89 90 WOLFSSL_API int wolfSSL_DSA_do_sign( 91 const unsigned char* d, unsigned char* sigRet, WOLFSSL_DSA* dsa); 92 93 WOLFSSL_API int wolfSSL_DSA_do_verify( 94 const unsigned char* d, unsigned char* sig, WOLFSSL_DSA* dsa, int *dsacheck); 95 96 WOLFSSL_API int wolfSSL_DSA_bits(const WOLFSSL_DSA *d); 97 98 WOLFSSL_API WOLFSSL_DSA_SIG* wolfSSL_DSA_SIG_new(void); 99 WOLFSSL_API void wolfSSL_DSA_SIG_free(WOLFSSL_DSA_SIG *sig); 100 101 WOLFSSL_API void wolfSSL_DSA_SIG_get0(const WOLFSSL_DSA_SIG *sig, 102 const WOLFSSL_BIGNUM **r, const WOLFSSL_BIGNUM **s); 103 WOLFSSL_API int wolfSSL_DSA_SIG_set0(WOLFSSL_DSA_SIG *sig, WOLFSSL_BIGNUM *r, 104 WOLFSSL_BIGNUM *s); 105 106 WOLFSSL_API int wolfSSL_i2d_DSA_SIG(const WOLFSSL_DSA_SIG *sig, byte **out); 107 WOLFSSL_API WOLFSSL_DSA_SIG* wolfSSL_d2i_DSA_SIG(WOLFSSL_DSA_SIG **sig, 108 const unsigned char **pp, long length); 109 WOLFSSL_API WOLFSSL_DSA_SIG* wolfSSL_DSA_do_sign_ex(const unsigned char* digest, 110 int inLen, WOLFSSL_DSA* dsa); 111 WOLFSSL_API int wolfSSL_DSA_do_verify_ex(const unsigned char* digest, int digest_len, 112 WOLFSSL_DSA_SIG* sig, WOLFSSL_DSA* dsa); 113 114 WOLFSSL_API int wolfSSL_i2d_DSAparams( 115 const WOLFSSL_DSA* dsa, unsigned char** out); 116 WOLFSSL_API WOLFSSL_DSA* wolfSSL_d2i_DSAparams( 117 WOLFSSL_DSA** dsa, const unsigned char** der, long derLen); 118 119 #if defined(OPENSSL_EXTRA) || defined(OPENSSL_EXTRA_X509_SMALL) 120 121 #define WOLFSSL_DSA_LOAD_PRIVATE 1 122 #define WOLFSSL_DSA_LOAD_PUBLIC 2 123 124 #ifndef OPENSSL_COEXIST 125 126 typedef WOLFSSL_DSA DSA; 127 128 #define OPENSSL_DSA_MAX_MODULUS_BITS 3072 129 130 #define DSA_new wolfSSL_DSA_new 131 #define DSA_free wolfSSL_DSA_free 132 #define DSA_print_fp wolfSSL_DSA_print_fp 133 134 #define DSA_LoadDer wolfSSL_DSA_LoadDer 135 #define DSA_generate_key wolfSSL_DSA_generate_key 136 #define DSA_generate_parameters wolfSSL_DSA_generate_parameters 137 #define DSA_generate_parameters_ex wolfSSL_DSA_generate_parameters_ex 138 #define DSA_get0_pqg wolfSSL_DSA_get0_pqg 139 #define DSA_set0_pqg wolfSSL_DSA_set0_pqg 140 #define DSA_get0_key wolfSSL_DSA_get0_key 141 #define DSA_set0_key wolfSSL_DSA_set0_key 142 143 #define DSA_SIG_new wolfSSL_DSA_SIG_new 144 #define DSA_SIG_free wolfSSL_DSA_SIG_free 145 #define DSA_SIG_get0 wolfSSL_DSA_SIG_get0 146 #define DSA_SIG_set0 wolfSSL_DSA_SIG_set0 147 #define i2d_DSA_SIG wolfSSL_i2d_DSA_SIG 148 #define d2i_DSA_SIG wolfSSL_d2i_DSA_SIG 149 #define DSA_do_sign wolfSSL_DSA_do_sign_ex 150 #define DSA_do_verify wolfSSL_DSA_do_verify_ex 151 #define i2d_DSAparams wolfSSL_i2d_DSAparams 152 #define d2i_DSAparams wolfSSL_d2i_DSAparams 153 154 #define DSA_SIG WOLFSSL_DSA_SIG 155 156 #endif /* !OPENSSL_COEXIST */ 157 158 #endif /* OPENSSL_EXTRA || OPENSSL_EXTRA_X509_SMALL */ 159 160 #ifdef __cplusplus 161 } /* extern "C" */ 162 #endif 163 164 #endif /* header */