From 6ba65c8d8ba0594ea9204823d417bc59c32caf04 Mon Sep 17 00:00:00 2001 From: NIIBE Yutaka Date: Tue, 29 May 2012 12:14:10 +0900 Subject: [PATCH] rsa_verify function --- ChangeLog | 2 ++ src/call-rsa.c | 30 ++++++++++++++++++++++++++++++ src/gnuk.h | 2 ++ 3 files changed, 34 insertions(+) diff --git a/ChangeLog b/ChangeLog index 6f6ecee..e01de34 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,7 @@ 2012-05-29 Niibe Yutaka + * src/call-rsa.c (rsa_verify): New function. + * polarssl-0.14.0/include/polarssl/rsa.h (rsa_pkcs1_verify) * polarssl-0.14.0/library/rsa.c (rsa_pkcs1_verify): Fix API. diff --git a/src/call-rsa.c b/src/call-rsa.c index f9a90ef..424aaf9 100644 --- a/src/call-rsa.c +++ b/src/call-rsa.c @@ -183,3 +183,33 @@ rsa_decrypt (const uint8_t *input, uint8_t *output, int msg_len, return 0; } } + +int +rsa_verify (const uint8_t *pubkey, const uint8_t *hash, int hashlen, + const uint8_t *signature) +{ + int r; + + rsa_init (&rsa_ctx, RSA_PKCS_V15, 0); + rsa_ctx.len = KEY_CONTENT_LEN; + mpi_read_string (&rsa_ctx.E, 16, "10001"); + mpi_read_binary (&rsa_ctx.N, pubkey, KEY_CONTENT_LEN); + + DEBUG_INFO ("RSA verify..."); + + r = rsa_pkcs1_verify (&rsa_ctx, RSA_PUBLIC, SIG_RSA_RAW, hashlen, + hash, signature); + + rsa_free (&rsa_ctx); + if (r < 0) + { + DEBUG_INFO ("fail:"); + DEBUG_SHORT (r); + return r; + } + else + { + DEBUG_INFO ("verified.\r\n"); + return 0; + } +} diff --git a/src/gnuk.h b/src/gnuk.h index 36b333f..45bb99c 100644 --- a/src/gnuk.h +++ b/src/gnuk.h @@ -225,6 +225,8 @@ extern int rsa_sign (const uint8_t *, uint8_t *, int, struct key_data *); extern const uint8_t *modulus_calc (const uint8_t *, int); extern void modulus_free (const uint8_t *); extern int rsa_decrypt (const uint8_t *, uint8_t *, int, struct key_data *); +extern int rsa_verify (const uint8_t *pubkey, const uint8_t *hash, int hashlen, + const uint8_t *signature); extern const uint8_t *gpg_do_read_simple (uint8_t); extern void gpg_do_write_simple (uint8_t, const uint8_t *, int);