From a11e389bc889b98be320aacfb3139926e8ce2557 Mon Sep 17 00:00:00 2001 From: Takashi Kojo Date: Tue, 3 Jan 2017 20:04:15 +0900 Subject: [PATCH] EVP_PKEY templates --- src/ocsp.c | 4 +- src/ssl.c | 40 +++++---- wolfcrypt/src/evp.c | 192 +++++++++++++++++++++++++++++++++++++++++- wolfssl/openssl/evp.h | 62 +++++++++++++- wolfssl/openssl/rsa.h | 2 +- wolfssl/ssl.h | 3 +- 6 files changed, 278 insertions(+), 25 deletions(-) diff --git a/src/ocsp.c b/src/ocsp.c index 727bfbedd..e7bb54290 100644 --- a/src/ocsp.c +++ b/src/ocsp.c @@ -633,14 +633,14 @@ OcspResponse* wolfSSL_d2i_OCSP_RESPONSE_bio(WOLFSSL_BIO* bio, if (bio == NULL) return NULL; - if (bio->type == BIO_MEMORY) { + if (bio->type == WOLFSSL_BIO_MEMORY) { len = wolfSSL_BIO_get_mem_data(bio, &data); if (len <= 0 || data == NULL) { return NULL; } } #ifndef NO_FILESYSTEM - else if (bio->type == BIO_FILE) { + else if (bio->type == WOLFSSL_BIO_FILE) { long i; long l; diff --git a/src/ssl.c b/src/ssl.c index bce192af9..980defea7 100644 --- a/src/ssl.c +++ b/src/ssl.c @@ -11914,7 +11914,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) return (int)XFREAD(buf, 1, len, bio->file); } #endif - if (bio && bio->type == BIO_MEMORY) { + if (bio && bio->type == WOLFSSL_BIO_MEMORY) { return wolfSSL_BIO_MEMORY_read(bio, buf, len); } @@ -11979,7 +11979,7 @@ int wolfSSL_set_compression(WOLFSSL* ssl) } #endif - if (bio && bio->type == BIO_MEMORY) { + if (bio && bio->type == WOLFSSL_BIO_MEMORY) { /* Make buffer big enough to hold new data. */ if (bio->mem == NULL) { bio->mem = (byte*)XMALLOC(len, bio->heap, DYNAMIC_TYPE_OPENSSL); @@ -12802,6 +12802,21 @@ int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md) } } + int wolfSSL_EVP_MD_CTX_copy(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in) + { + return EVP_MD_CTX_copy_ex(out, in); + } + + int wolfSSL_EVP_MD_CTX_copy_ex(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in) + { + if((out == NULL) || (in == NULL))return 0; + if((out->macType != 0) && (out->macType != in->macType))return 0; + + WOLFSSL_ENTER("EVP_CIPHER_MD_CTX_copy_ex"); + XMEMCPY(out, in, sizeof(WOLFSSL_EVP_MD_CTX)); + return 1; + } + void wolfSSL_EVP_MD_CTX_init(WOLFSSL_EVP_MD_CTX* ctx) { WOLFSSL_ENTER("EVP_CIPHER_MD_CTX_init"); @@ -15930,7 +15945,7 @@ WOLFSSL_BIO* wolfSSL_BIO_pop(WOLFSSL_BIO* top) int wolfSSL_BIO_pending(WOLFSSL_BIO* bio) { - if (bio && bio->type == BIO_MEMORY) + if (bio && bio->type == WOLFSSL_BIO_MEMORY) return bio->memLen; return 0; } @@ -16805,6 +16820,7 @@ WOLFSSL_EVP_PKEY* wolfSSL_PKEY_new() if (pkey != NULL) { XMEMSET(pkey, 0, sizeof(WOLFSSL_EVP_PKEY)); } + pkey->type = WOLFSSL_EVP_PKEY_DEFAULT; return pkey; } @@ -17450,14 +17466,6 @@ WOLFSSL_API WOLFSSL_EVP_PKEY *wolfSSL_get_privatekey(const WOLFSSL *ssl) return NULL; } -/*** TBD ***/ -WOLFSSL_API int EVP_PKEY_bits(WOLFSSL_EVP_PKEY *pkey) -{ - (void)pkey; - WOLFSSL_STUB("EVP_PKEY_bits"); - return WOLFSSL_FAILURE; -} - /*** TBD ***/ WOLFSSL_API int i2d_X509(WOLFSSL_X509 *x, unsigned char **out) { @@ -24213,14 +24221,14 @@ void* wolfSSL_GetDhAgreeCtx(WOLFSSL* ssl) return NULL; } - if (bp->type == BIO_MEMORY) { + if (bp->type == WOLFSSL_BIO_MEMORY) { l = (long)wolfSSL_BIO_ctrl_pending(bp); if (l <= 0) { WOLFSSL_MSG("No pending data in WOLFSSL_BIO"); return NULL; } } - else if (bp->type == BIO_FILE) { + else if (bp->type == WOLFSSL_BIO_FILE) { #ifndef NO_FILESYSTEM /* Read in next certificate from file but no more. */ i = XFTELL(bp->file); @@ -24857,7 +24865,7 @@ WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bio, WOLFSSL_DH **x, return NULL; } - if (bio->type == BIO_MEMORY) { + if (bio->type == WOLFSSL_BIO_MEMORY) { /* Use the buffer directly. */ ret = wolfSSL_BIO_get_mem_data(bio, &mem); if (mem == NULL || ret <= 0) { @@ -24866,7 +24874,7 @@ WOLFSSL_DH *wolfSSL_PEM_read_bio_DHparams(WOLFSSL_BIO *bio, WOLFSSL_DH **x, } size = ret; } - else if (bio->type == BIO_FILE) { + else if (bio->type == WOLFSSL_BIO_FILE) { /* Read whole file into a new buffer. */ XFSEEK(bio->file, 0, SEEK_END); sz = XFTELL(bio->file); @@ -24967,7 +24975,7 @@ int wolfSSL_PEM_write_bio_X509(WOLFSSL_BIO *bio, WOLFSSL_X509 *cert) return WOLFSSL_FAILURE; } - if (bio->type != BIO_MEMORY) { + if (bio->type != WOLFSSL_BIO_MEMORY) { WOLFSSL_MSG("BIO type not supported for writing X509 as PEM"); return WOLFSSL_FAILURE; } diff --git a/wolfcrypt/src/evp.c b/wolfcrypt/src/evp.c index 5176d8075..25334f99e 100644 --- a/wolfcrypt/src/evp.c +++ b/wolfcrypt/src/evp.c @@ -593,6 +593,197 @@ WOLFSSL_API int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest) return 0; } +WOLFSSL_API int wolfSSL_EVP_PKEY_bits(const WOLFSSL_EVP_PKEY *pkey) +{ + if (pkey == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_bits"); + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_free(WOLFSSL_EVP_PKEY_CTX *ctx) +{ + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_CTX_free"); + return 1; +} + +WOLFSSL_API WOLFSSL_EVP_PKEY_CTX *wolfSSL_EVP_PKEY_CTX_new(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_ENGINE *e) +{ + WOLFSSL_EVP_PKEY_CTX* ctx; + + if (pkey == NULL)return 0; + if (e != NULL) return 0; + WOLFSSL_ENTER("EVP_PKEY_CTX_new"); + + ctx = (WOLFSSL_EVP_PKEY_CTX*)XMALLOC(sizeof(WOLFSSL_EVP_PKEY_CTX), NULL, + DYNAMIC_TYPE_PUBLIC_KEY); + if(ctx == NULL)return NULL; + ctx->pkey = pkey ; + + return ctx; +} + +WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_rsa_padding(WOLFSSL_EVP_PKEY_CTX *ctx, int padding) +{ + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_CTX_set_rsa_padding"); + ctx->padding = padding; + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt(WOLFSSL_EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen) +{ + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_decrypt"); + + switch(ctx->pkey->type){ + case EVP_PKEY_RSA: + *outlen = wolfSSL_RSA_public_encrypt((int)inlen, (unsigned char*)in, out, + (WOLFSSL_RSA*)ctx->pkey->pkey.ptr, ctx->padding); + return (int)*outlen; + + case EVP_PKEY_EC: + /* not implemented */ + default: + return 0; + } +} + +WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx) +{ + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_decrypt_init"); + switch(ctx->pkey->type){ + case EVP_PKEY_RSA: + ctx->op = EVP_PKEY_OP_ENCRYPT; + return 1; + + case EVP_PKEY_EC: + /* not implemented */ + default: + + return 0; + } +} + +WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt(WOLFSSL_EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen) +{ + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_encrypt"); + if(ctx->op != EVP_PKEY_OP_ENCRYPT)return 0; + + switch(ctx->pkey->type){ + case EVP_PKEY_RSA: + *outlen = wolfSSL_RSA_public_encrypt((int)inlen, (unsigned char *)in, out, + (WOLFSSL_RSA*)ctx->pkey->pkey.ptr, ctx->padding); + return (int)*outlen; + + case EVP_PKEY_EC: + /* not implemented */ + default: + return 0; + } +} + +WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx) +{ + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_encrypt_init"); + + switch(ctx->pkey->type){ + case EVP_PKEY_RSA: + ctx->op = EVP_PKEY_OP_ENCRYPT; + return 1; + case EVP_PKEY_EC: + case EVP_PKEY_DSA: + /* not implemented */ + default: + + return 0; + } + +} + +WOLFSSL_API int wolfSSL_EVP_PKEY_size(WOLFSSL_EVP_PKEY *pkey) +{ + if (pkey == NULL)return 0; + WOLFSSL_ENTER("EVP_PKEY_size"); + + switch(pkey->type){ + case EVP_PKEY_RSA: + return (int)wolfSSL_RSA_size((const WOLFSSL_RSA*)(pkey->pkey.ptr)); + + case EVP_PKEY_EC: + /* not implemented */ + default: + return 0; + } + + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_SignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, WOLFSSL_EVP_PKEY *pkey) +{ + (void)sigret; + (void)siglen; + (void)pkey; + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_SignFinal"); + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_SignInit(WOLFSSL_EVP_MD_CTX *ctx, const WOLFSSL_EVP_MD *type) +{ + (void)type; + + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_SignInit"); + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_SignUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *data, size_t len) +{ + (void)data; + (void)len; + + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_SignUpdate("); + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_VerifyFinal(WOLFSSL_EVP_MD_CTX *ctx, const uint8_t *sig, size_t sig_len, + WOLFSSL_EVP_PKEY *pkey) +{ + (void)sig; + (void)sig_len; + (void)pkey; + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_VerifyFinal"); + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_VerifyInit(WOLFSSL_EVP_MD_CTX *ctx, const WOLFSSL_EVP_MD *type) +{ + (void)type; + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_VerifyInit"); + return 1; +} + +WOLFSSL_API int wolfSSL_EVP_VerifyUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *data, size_t len) +{ + (void)data; + (void)len; + if (ctx == NULL)return 0; + WOLFSSL_ENTER("EVP_VerifyUpdate"); + return 1; +} + WOLFSSL_API int wolfSSL_EVP_add_cipher(const WOLFSSL_EVP_CIPHER *cipher) { (void)cipher; @@ -806,7 +997,6 @@ int wolfSSL_EVP_DigestSignFinal(WOLFSSL_EVP_MD_CTX *ctx, ForceZero(digest, sizeof(digest)); return ret; } - #endif /* WOLFSSL_EVP_INCLUDED */ #if defined(OPENSSL_EXTRA) && !defined(NO_PWDBASED) && !defined(NO_SHA) diff --git a/wolfssl/openssl/evp.h b/wolfssl/openssl/evp.h index f2c3ab23a..8cb563328 100644 --- a/wolfssl/openssl/evp.h +++ b/wolfssl/openssl/evp.h @@ -204,6 +204,12 @@ typedef struct WOLFSSL_EVP_PKEY WOLFSSL_EVP_PKEY; #define WOLFSSL_EVP_PKEY_TYPE_DEFINED #endif +typedef struct WOLFSSL_EVP_PKEY_CTX { + WOLFSSL_EVP_PKEY *pkey; + int op; /* operation */ + int padding; +} WOLFSSL_EVP_PKEY_CTX; + struct WOLFSSL_EVP_PKEY { int type; /* openssh dereference */ int save_type; /* openssh dereference */ @@ -218,17 +224,21 @@ struct WOLFSSL_EVP_PKEY { typedef int WOLFSSL_ENGINE ; typedef WOLFSSL_ENGINE ENGINE; -typedef int WOLFSSL_EVP_PKEY_CTX; typedef WOLFSSL_EVP_PKEY_CTX EVP_PKEY_CTX; +#define EVP_PKEY_OP_ENCRYPT (1 << 6) +#define EVP_PKEY_OP_DECRYPT (1 << 7) + WOLFSSL_API void wolfSSL_EVP_init(void); WOLFSSL_API int wolfSSL_EVP_MD_size(const WOLFSSL_EVP_MD* md); -WOLFSSL_API int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md); +WOLFSSL_API int wolfSSL_EVP_MD_type(const WOLFSSL_EVP_MD *md); WOLFSSL_API WOLFSSL_EVP_MD_CTX *wolfSSL_EVP_MD_CTX_new (void); WOLFSSL_API void wolfSSL_EVP_MD_CTX_free(WOLFSSL_EVP_MD_CTX* ctx); WOLFSSL_API void wolfSSL_EVP_MD_CTX_init(WOLFSSL_EVP_MD_CTX* ctx); WOLFSSL_API int wolfSSL_EVP_MD_CTX_cleanup(WOLFSSL_EVP_MD_CTX* ctx); +WOLFSSL_API int wolfSSL_EVP_MD_CTX_copy(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in); +WOLFSSL_API int wolfSSL_EVP_MD_CTX_copy_ex(WOLFSSL_EVP_MD_CTX *out, const WOLFSSL_EVP_MD_CTX *in); WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_MD_CTX_md(const WOLFSSL_EVP_MD_CTX *ctx); WOLFSSL_API const WOLFSSL_EVP_CIPHER *wolfSSL_EVP_get_cipherbyname(const char *name); WOLFSSL_API const WOLFSSL_EVP_MD *wolfSSL_EVP_get_digestbyname(const char *name); @@ -349,6 +359,29 @@ WOLFSSL_API WOLFSSL_EVP_PKEY* wolfSSL_EVP_PKEY_new_mac_key(int type, ENGINE* e, const unsigned char* key, int keylen); WOLFSSL_API const unsigned char* wolfSSL_EVP_PKEY_get0_hmac(const WOLFSSL_EVP_PKEY* pkey, size_t* len); +WOLFSSL_API int wolfSSL_EVP_PKEY_bits(const WOLFSSL_EVP_PKEY *pkey); +WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_free(WOLFSSL_EVP_PKEY_CTX *ctx); +WOLFSSL_API WOLFSSL_EVP_PKEY_CTX *wolfSSL_EVP_PKEY_CTX_new(WOLFSSL_EVP_PKEY *pkey, WOLFSSL_ENGINE *e); +WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_set_rsa_padding(WOLFSSL_EVP_PKEY_CTX *ctx, int padding); +WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt(WOLFSSL_EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); +WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx); +WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt(WOLFSSL_EVP_PKEY_CTX *ctx, + unsigned char *out, size_t *outlen, + const unsigned char *in, size_t inlen); +WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx); +WOLFSSL_API WOLFSSL_EVP_PKEY *wolfSSL_EVP_PKEY_new(void); +WOLFSSL_API int wolfSSL_EVP_PKEY_size(WOLFSSL_EVP_PKEY *pkey); +WOLFSSL_API int wolfSSL_EVP_SignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sigret, + unsigned int *siglen, WOLFSSL_EVP_PKEY *pkey); +WOLFSSL_API int wolfSSL_EVP_SignInit(WOLFSSL_EVP_MD_CTX *ctx, const WOLFSSL_EVP_MD *type); +WOLFSSL_API int wolfSSL_EVP_SignUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *data, size_t len); +WOLFSSL_API int wolfSSL_EVP_VerifyFinal(WOLFSSL_EVP_MD_CTX *ctx, const uint8_t *sig, size_t sig_len, + WOLFSSL_EVP_PKEY *pkey); +WOLFSSL_API int wolfSSL_EVP_VerifyInit(WOLFSSL_EVP_MD_CTX *ctx, const WOLFSSL_EVP_MD *type); +WOLFSSL_API int wolfSSL_EVP_VerifyUpdate(WOLFSSL_EVP_MD_CTX *ctx, const void *data, size_t len); + /* these next ones don't need real OpenSSL type, for OpenSSH compat only */ WOLFSSL_API void* wolfSSL_EVP_X_STATE(const WOLFSSL_EVP_CIPHER_CTX* ctx); @@ -405,11 +438,13 @@ typedef WOLFSSL_EVP_MD EVP_MD; typedef WOLFSSL_EVP_CIPHER EVP_CIPHER; typedef WOLFSSL_EVP_MD_CTX EVP_MD_CTX; typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX; +typedef WOLFSSL_EVP_PKEY_CTX EVP_PKEY_CTX; #ifndef NO_MD5 #define EVP_md5 wolfSSL_EVP_md5 #endif #define EVP_sha1 wolfSSL_EVP_sha1 +#define EVP_dds1 wolfSSL_EVP_sha1 #define EVP_sha224 wolfSSL_EVP_sha224 #define EVP_sha256 wolfSSL_EVP_sha256 #define EVP_sha384 wolfSSL_EVP_sha384 @@ -495,8 +530,27 @@ typedef WOLFSSL_EVP_CIPHER_CTX EVP_CIPHER_CTX; #define EVP_PKEY_get1_RSA wolfSSL_EVP_PKEY_get1_RSA #define EVP_PKEY_get1_DSA wolfSSL_EVP_PKEY_get1_DSA #define EVP_PKEY_get1_EC_KEY wolfSSL_EVP_PKEY_get1_EC_KEY -#define EVP_PKEY_get0_hmac wolfSSL_EVP_PKEY_get0_hmac -#define EVP_PKEY_new_mac_key wolfSSL_EVP_PKEY_new_mac_key +#define EVP_PKEY_get0_hmac wolfSSL_EVP_PKEY_get0_hmac +#define EVP_PKEY_new_mac_key wolfSSL_EVP_PKEY_new_mac_key +#define EVP_MD_CTX_copy wolfSSL_EVP_MD_CTX_copy +#define EVP_MD_CTX_copy_ex wolfSSL_EVP_MD_CTX_copy_ex +#define EVP_PKEY_bits wolfSSL_EVP_PKEY_bits +#define EVP_PKEY_CTX_free wolfSSL_EVP_PKEY_CTX_free +#define EVP_PKEY_CTX_new wolfSSL_EVP_PKEY_CTX_new +#define EVP_PKEY_CTX_set_rsa_padding wolfSSL_EVP_PKEY_CTX_set_rsa_padding +#define EVP_PKEY_decrypt wolfSSL_EVP_PKEY_decrypt +#define EVP_PKEY_decrypt_init wolfSSL_EVP_PKEY_decrypt_init +#define EVP_PKEY_encrypt wolfSSL_EVP_PKEY_encrypt +#define EVP_PKEY_encrypt_init wolfSSL_EVP_PKEY_encrypt_init +#define EVP_PKEY_new wolfSSL_PKEY_new +#define EVP_PKEY_free wolfSSL_EVP_PKEY_free +#define EVP_PKEY_size wolfSSL_EVP_PKEY_size +#define EVP_SignFinal wolfSSL_EVP_SignFinal +#define EVP_SignInit wolfSSL_EVP_SignInit +#define EVP_SignUpdate wolfSSL_EVP_SignUpdate +#define EVP_VerifyFinal wolfSSL_EVP_VerifyFinal +#define EVP_VerifyInit wolfSSL_EVP_VerifyInit +#define EVP_VerifyUpdate wolfSSL_EVP_VerifyUpdate #define EVP_CIPHER_CTX_block_size wolfSSL_EVP_CIPHER_CTX_block_size #define EVP_CIPHER_block_size wolfSSL_EVP_CIPHER_block_size diff --git a/wolfssl/openssl/rsa.h b/wolfssl/openssl/rsa.h index e32648c3a..80f9569c0 100644 --- a/wolfssl/openssl/rsa.h +++ b/wolfssl/openssl/rsa.h @@ -104,7 +104,7 @@ WOLFSSL_API int wolfSSL_RSA_LoadDer(WOLFSSL_RSA*, const unsigned char*, int sz); #ifdef __cplusplus - } /* extern "C" */ + } /* extern "C" */ #endif #endif /* header */ diff --git a/wolfssl/ssl.h b/wolfssl/ssl.h index 2f47cf3a7..22cdabe64 100644 --- a/wolfssl/ssl.h +++ b/wolfssl/ssl.h @@ -198,6 +198,8 @@ typedef struct WOLFSSL_EVP_PKEY WOLFSSL_EVP_PKEY; #define WOLFSSL_EVP_PKEY_TYPE_DEFINED #endif +#define WOLFSSL_EVP_PKEY_DEFAULT EVP_PKEY_RSA /* default key type */ + typedef struct WOLFSSL_MD4_CTX { int buffer[32]; /* big enough to hold, check size in Init */ } WOLFSSL_MD4_CTX; @@ -2678,7 +2680,6 @@ WOLFSSL_API void *X509_get0_tbs_sigalg(const WOLFSSL_X509 *x); WOLFSSL_API void X509_ALGOR_get0(WOLFSSL_ASN1_OBJECT **paobj, int *pptype, const void **ppval, const void *algor); WOLFSSL_API void *X509_get_X509_PUBKEY(void * x); WOLFSSL_API int X509_PUBKEY_get0_param(WOLFSSL_ASN1_OBJECT **ppkalg, const unsigned char **pk, int *ppklen, void **pa, WOLFSSL_EVP_PKEY *pub); -WOLFSSL_API int EVP_PKEY_bits(WOLFSSL_EVP_PKEY *pkey); WOLFSSL_API int i2d_X509(WOLFSSL_X509 *x, unsigned char **out); WOLFSSL_API int i2t_ASN1_OBJECT(char *buf, int buf_len, WOLFSSL_ASN1_OBJECT *a); WOLFSSL_API void SSL_CTX_set_tmp_dh_callback(WOLFSSL_CTX *ctx, WOLFSSL_DH *(*dh) (WOLFSSL *ssl, int is_export, int keylength));