#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,
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) {
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;
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;
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;
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));