X-Git-Url: https://tinc-vpn.org/git/browse?p=tinc;a=blobdiff_plain;f=src%2Fgcrypt%2Frsa.c;h=65301625bde65825f7cdd881dafe37114702dab7;hp=99ee11b3e32d2d67a105bc9250d82a0b68a5e2a9;hb=551cd19406a560d0d206bff5b4e9da064ec222b6;hpb=1b8f8918360b40a2749d40355266ed7dedbe41b5 diff --git a/src/gcrypt/rsa.c b/src/gcrypt/rsa.c index 99ee11b3..65301625 100644 --- a/src/gcrypt/rsa.c +++ b/src/gcrypt/rsa.c @@ -26,7 +26,7 @@ #include "logger.h" #include "rsa.h" -// Base64 encoding/decoding tables +// Base64 decoding table static const uint8_t b64d[128] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, @@ -53,8 +53,6 @@ static const uint8_t b64d[128] = { 0xff, 0xff }; -static const char b64e[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - // PEM encoding/decoding functions static bool pem_decode(FILE *fp, const char *header, uint8_t *buf, size_t size, size_t *outsize) { @@ -82,7 +80,7 @@ static bool pem_decode(FILE *fp, const char *header, uint8_t *buf, size_t size, continue; for(i = 0; line[i] >= ' '; i++) { - if(line[i] >= 128 || line[i] < 0 || b64d[(int)line[i]] == 0xff) + if((signed char)line[i] < 0 || b64d[(int)line[i]] == 0xff) break; word |= b64d[(int)line[i]] << shift; shift -= 6; @@ -187,31 +185,35 @@ static bool ber_read_mpi(unsigned char **p, size_t *buflen, gcry_mpi_t *mpi) { bool rsa_set_hex_public_key(rsa_t *rsa, char *n, char *e) { gcry_error_t err = 0; - err = gcry_mpi_scan(&rsa->n, GCRY_FMT_HEX, n, 0, NULL) - ?: gcry_mpi_scan(&rsa->e, GCRY_FMT_HEX, n, 0, NULL); + err = gcry_mpi_scan(&rsa->n, GCRYMPI_FMT_HEX, n, 0, NULL) + ?: gcry_mpi_scan(&rsa->e, GCRYMPI_FMT_HEX, n, 0, NULL); if(err) { logger(LOG_ERR, _("Error while reading RSA public key: %s"), gcry_strerror(errno)); return false; } + + return true; } bool rsa_set_hex_private_key(rsa_t *rsa, char *n, char *e, char *d) { gcry_error_t err = 0; - err = gcry_mpi_scan(&rsa->n, GCRY_FMT_HEX, n, 0, NULL) - ?: gcry_mpi_scan(&rsa->e, GCRY_FMT_HEX, n, 0, NULL) - ?: gcry_mpi_scan(&rsa->d, GCRY_FMT_HEX, n, 0, NULL); + err = gcry_mpi_scan(&rsa->n, GCRYMPI_FMT_HEX, n, 0, NULL) + ?: gcry_mpi_scan(&rsa->e, GCRYMPI_FMT_HEX, n, 0, NULL) + ?: gcry_mpi_scan(&rsa->d, GCRYMPI_FMT_HEX, n, 0, NULL); if(err) { logger(LOG_ERR, _("Error while reading RSA public key: %s"), gcry_strerror(errno)); return false; } + + return true; } // Read PEM RSA keys -bool read_pem_rsa_public_key(rsa_t *rsa, FILE *fp) { +bool rsa_read_pem_public_key(rsa_t *rsa, FILE *fp) { uint8_t derbuf[8096], *derp = derbuf; size_t derlen; @@ -231,7 +233,7 @@ bool read_pem_rsa_public_key(rsa_t *rsa, FILE *fp) { return true; } -bool read_pem_rsa_private_key(rsa_t *rsa, FILE *fp) { +bool rsa_read_pem_private_key(rsa_t *rsa, FILE *fp) { uint8_t derbuf[8096], *derp = derbuf; size_t derlen; @@ -281,7 +283,7 @@ bool rsa_public_encrypt(rsa_t *rsa, void *in, size_t len, void *out) { return true; } -bool rsa_public_decrypt(rsa_t *rsa, void *in, size_t len, void *out) { +bool rsa_private_decrypt(rsa_t *rsa, void *in, size_t len, void *out) { gcry_mpi_t inmpi; check(gcry_mpi_scan(&inmpi, GCRYMPI_FMT_USG, in, len, NULL));