mirror of
https://github.com/wolfSSL/wolfssl.git
synced 2025-07-30 18:57:27 +02:00
add EVP_VerifyFinal, RSA_verify
This commit is contained in:
committed by
Jacob Barthelmeh
parent
54af9fb884
commit
a29f15feff
38
src/ssl.c
38
src/ssl.c
@ -21009,6 +21009,44 @@ int wolfSSL_RSA_sign(int type, const unsigned char* m,
|
||||
return ret;
|
||||
}
|
||||
|
||||
WOLFSSL_API int wolfSSL_RSA_verify(int type, const unsigned char* m,
|
||||
unsigned int mLen, const unsigned char* sig,
|
||||
unsigned int sigLen, WOLFSSL_RSA* rsa)
|
||||
{
|
||||
int ret;
|
||||
unsigned char *sigRet ;
|
||||
unsigned int len;
|
||||
|
||||
WOLFSSL_MSG("wolfSSL_RSA_verify");
|
||||
if((m == NULL) || (sig == NULL)) {
|
||||
WOLFSSL_MSG("Bad function arguments");
|
||||
return 0;
|
||||
}
|
||||
|
||||
sigRet = (unsigned char *)XMALLOC(sigLen, NULL, DYNAMIC_TYPE_TMP_BUFFER);
|
||||
if(sigRet == NULL){
|
||||
WOLFSSL_MSG("Memory failure");
|
||||
return 0;
|
||||
}
|
||||
|
||||
ret = wolfSSL_RSA_sign(type, m, mLen, sigRet, &len, rsa);
|
||||
|
||||
if(ret <= 0){
|
||||
WOLFSSL_MSG("RSA Sign error");
|
||||
return 0;
|
||||
}
|
||||
if(sigLen != len){
|
||||
WOLFSSL_MSG("sign length error");
|
||||
return 0;
|
||||
}
|
||||
if(XMEMCMP(sig, sigRet, sigLen) == 0){
|
||||
WOLFSSL_MSG("wolfSSL_RSA_verify success");
|
||||
return 1;
|
||||
} else {
|
||||
WOLFSSL_MSG("wolfSSL_RSA_verify failed");
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
int wolfSSL_RSA_public_decrypt(int flen, const unsigned char* from,
|
||||
unsigned char* to, WOLFSSL_RSA* rsa, int padding)
|
||||
|
@ -590,7 +590,8 @@ WOLFSSL_API int wolfSSL_EVP_add_digest(const WOLFSSL_EVP_MD *digest)
|
||||
{
|
||||
(void)digest;
|
||||
/* nothing to do */
|
||||
return 0;}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
WOLFSSL_API int wolfSSL_EVP_PKEY_CTX_free(WOLFSSL_EVP_PKEY_CTX *ctx)
|
||||
@ -612,6 +613,7 @@ WOLFSSL_API WOLFSSL_EVP_PKEY_CTX *wolfSSL_EVP_PKEY_CTX_new(WOLFSSL_EVP_PKEY *pke
|
||||
DYNAMIC_TYPE_PUBLIC_KEY);
|
||||
if(ctx == NULL)return NULL;
|
||||
ctx->pkey = pkey ;
|
||||
ctx->padding = RSA_PKCS1_PADDING;
|
||||
|
||||
return ctx;
|
||||
}
|
||||
@ -638,6 +640,7 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt(WOLFSSL_EVP_PKEY_CTX *ctx,
|
||||
return (int)*outlen;
|
||||
|
||||
case EVP_PKEY_EC:
|
||||
WOLFSSL_MSG("not implemented");
|
||||
/* not implemented */
|
||||
default:
|
||||
return 0;
|
||||
@ -654,6 +657,7 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_decrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx)
|
||||
return 1;
|
||||
|
||||
case EVP_PKEY_EC:
|
||||
WOLFSSL_MSG("not implemented");
|
||||
/* not implemented */
|
||||
default:
|
||||
|
||||
@ -676,6 +680,7 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt(WOLFSSL_EVP_PKEY_CTX *ctx,
|
||||
return (int)*outlen;
|
||||
|
||||
case EVP_PKEY_EC:
|
||||
WOLFSSL_MSG("not implemented");
|
||||
/* not implemented */
|
||||
default:
|
||||
return 0;
|
||||
@ -692,7 +697,7 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_encrypt_init(WOLFSSL_EVP_PKEY_CTX *ctx)
|
||||
ctx->op = EVP_PKEY_OP_ENCRYPT;
|
||||
return 1;
|
||||
case EVP_PKEY_EC:
|
||||
case EVP_PKEY_DSA:
|
||||
WOLFSSL_MSG("not implemented");
|
||||
/* not implemented */
|
||||
default:
|
||||
|
||||
@ -719,8 +724,9 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_size(WOLFSSL_EVP_PKEY *pkey)
|
||||
switch(pkey->type){
|
||||
case EVP_PKEY_RSA:
|
||||
return (int)wolfSSL_RSA_size((const WOLFSSL_RSA*)(pkey->pkey.ptr));
|
||||
|
||||
|
||||
case EVP_PKEY_EC:
|
||||
WOLFSSL_MSG("not implemented");
|
||||
/* not implemented */
|
||||
default:
|
||||
return 0;
|
||||
@ -729,61 +735,84 @@ WOLFSSL_API int wolfSSL_EVP_PKEY_size(WOLFSSL_EVP_PKEY *pkey)
|
||||
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;
|
||||
return wolfSSL_EVP_DigestInit(ctx,type);
|
||||
}
|
||||
|
||||
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;
|
||||
return wolfSSL_EVP_DigestUpdate(ctx, data, 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_SignFinal(WOLFSSL_EVP_MD_CTX *ctx, unsigned char *sigret,
|
||||
unsigned int *siglen, WOLFSSL_EVP_PKEY *pkey)
|
||||
{
|
||||
(void)sig;
|
||||
(void)sig_len;
|
||||
(void)pkey;
|
||||
unsigned int mdsize;
|
||||
unsigned char md[MAX_DIGEST_SIZE];
|
||||
int ret;
|
||||
if (ctx == NULL)return 0;
|
||||
WOLFSSL_ENTER("EVP_VerifyFinal");
|
||||
WOLFSSL_ENTER("EVP_SignFinal");
|
||||
|
||||
ret = wolfSSL_EVP_DigestFinal(ctx, md, &mdsize);
|
||||
if(ret <= 0)return ret;
|
||||
|
||||
switch(pkey->type){
|
||||
case EVP_PKEY_RSA:
|
||||
return wolfSSL_RSA_sign(ctx->macType, md, mdsize, sigret,
|
||||
siglen, (WOLFSSL_RSA*)(pkey->pkey.ptr));
|
||||
case EVP_PKEY_DSA:
|
||||
case EVP_PKEY_EC:
|
||||
WOLFSSL_MSG("not implemented");
|
||||
/* not implemented */
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
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 wolfSSL_EVP_DigestInit(ctx,type);
|
||||
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 wolfSSL_EVP_DigestUpdate(ctx, data, len);
|
||||
}
|
||||
|
||||
WOLFSSL_API int wolfSSL_EVP_VerifyFinal(WOLFSSL_EVP_MD_CTX *ctx, const uint8_t *sig, size_t siglen,
|
||||
WOLFSSL_EVP_PKEY *pkey)
|
||||
{
|
||||
int ret;
|
||||
unsigned char md[MAX_DIGEST_SIZE];
|
||||
unsigned int mdsize;
|
||||
|
||||
if (ctx == NULL)return 0;
|
||||
WOLFSSL_ENTER("EVP_VerifyFinal");
|
||||
ret = wolfSSL_EVP_DigestFinal(ctx, md, &mdsize);
|
||||
if(ret <= 0)return ret;
|
||||
|
||||
switch(pkey->type){
|
||||
case EVP_PKEY_RSA:
|
||||
return wolfSSL_RSA_verify(ctx->macType, md, mdsize, sig,
|
||||
(unsigned int)siglen, (WOLFSSL_RSA*)(pkey->pkey.ptr));
|
||||
case EVP_PKEY_DSA:
|
||||
case EVP_PKEY_EC:
|
||||
WOLFSSL_MSG("not implemented");
|
||||
/* not implemented */
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
@ -32,11 +32,8 @@
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
|
||||
enum {
|
||||
RSA_PKCS1_PADDING = 1,
|
||||
RSA_PKCS1_OAEP_PADDING = 4
|
||||
};
|
||||
#define RSA_PKCS1_PADDING WC_RSA_PKCSV15_PAD
|
||||
#define RSA_PKCS1_OAEP_PADDING WC_RSA_OAEP_PAD
|
||||
|
||||
/* rsaTypes */
|
||||
enum {
|
||||
@ -83,7 +80,10 @@ WOLFSSL_API int wolfSSL_RSA_size(const WOLFSSL_RSA*);
|
||||
WOLFSSL_API int wolfSSL_RSA_sign(int type, const unsigned char* m,
|
||||
unsigned int mLen, unsigned char* sigRet,
|
||||
unsigned int* sigLen, WOLFSSL_RSA*);
|
||||
WOLFSSL_API int wolfSSL_RSA_public_decrypt(int flen, const unsigned char* from,
|
||||
WOLFSSL_API int wolfSSL_RSA_verify(int type, const unsigned char* m,
|
||||
unsigned int mLen, const unsigned char* sig,
|
||||
unsigned int sigLen, WOLFSSL_RSA*);
|
||||
WOLFSSL_API int wolfSSL_RSA_public_decrypt(int flen, unsigned char* from,
|
||||
unsigned char* to, WOLFSSL_RSA*, int padding);
|
||||
WOLFSSL_API int wolfSSL_RSA_GenAdd(WOLFSSL_RSA*);
|
||||
WOLFSSL_API int wolfSSL_RSA_LoadDer(WOLFSSL_RSA*, const unsigned char*, int sz);
|
||||
@ -100,6 +100,7 @@ WOLFSSL_API int wolfSSL_RSA_LoadDer(WOLFSSL_RSA*, const unsigned char*, int sz);
|
||||
|
||||
#define RSA_size wolfSSL_RSA_size
|
||||
#define RSA_sign wolfSSL_RSA_sign
|
||||
#define RSA_verify wolfSSL_RSA_verify
|
||||
#define RSA_public_decrypt wolfSSL_RSA_public_decrypt
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user