X-Git-Url: https://tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fed25519%2Fecdsa.c;h=79532c8fab394c70438ad45e3ec69a1f505f3d15;hb=7c359313aca273319f94fe18121831ab4b62a4b4;hp=f8aafe460b128868f9f63dd36c0ad47b0ebeead4;hpb=04fc19112da5e7fcefefcf6e490987cdcfb6f620;p=tinc diff --git a/src/ed25519/ecdsa.c b/src/ed25519/ecdsa.c index f8aafe46..79532c8f 100644 --- a/src/ed25519/ecdsa.c +++ b/src/ed25519/ecdsa.c @@ -21,7 +21,7 @@ #include "ed25519.h" -#define __TINC_ECDSA_INTERNAL__ +#define TINC_ECDSA_INTERNAL typedef struct { uint8_t private[64]; uint8_t public[32]; @@ -42,8 +42,9 @@ ecdsa_t *ecdsa_set_base64_public_key(const char *p) { return 0; } - ecdsa_t *ecdsa = xzalloc(sizeof *ecdsa); + ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa)); len = b64decode(p, ecdsa->public, len); + if(len != 32) { logger(DEBUG_ALWAYS, LOG_ERR, "Invalid format of public key! len = %d", len); free(ecdsa); @@ -55,7 +56,7 @@ ecdsa_t *ecdsa_set_base64_public_key(const char *p) { char *ecdsa_get_base64_public_key(ecdsa_t *ecdsa) { char *base64 = xmalloc(44); - b64encode(ecdsa->public, base64, sizeof ecdsa->public); + b64encode(ecdsa->public, base64, sizeof(ecdsa->public)); return base64; } @@ -67,21 +68,27 @@ static bool read_pem(FILE *fp, const char *type, void *buf, size_t size) { bool data = false; size_t typelen = strlen(type); - while(fgets(line, sizeof line, fp)) { + while(fgets(line, sizeof(line), fp)) { if(!data) { - if(strncmp(line, "-----BEGIN ", 11)) + if(strncmp(line, "-----BEGIN ", 11)) { continue; - if(strncmp(line + 11, type, typelen)) + } + + if(strncmp(line + 11, type, typelen)) { continue; + } + data = true; continue; } - if(!strncmp(line, "-----END ", 9)) + if(!strncmp(line, "-----END ", 9)) { break; + } size_t linelen = strcspn(line, "\r\n"); size_t len = b64decode(line, line, linelen); + if(!len) { logger(DEBUG_ALWAYS, LOG_ERR, "Invalid base64 data in PEM file\n"); errno = EINVAL; @@ -106,6 +113,7 @@ static bool read_pem(FILE *fp, const char *type, void *buf, size_t size) { } else { errno = ENOENT; } + return false; } @@ -113,17 +121,23 @@ static bool read_pem(FILE *fp, const char *type, void *buf, size_t size) { } ecdsa_t *ecdsa_read_pem_public_key(FILE *fp) { - ecdsa_t *ecdsa = xzalloc(sizeof *ecdsa); - if(read_pem(fp, "ED25519 PUBLIC KEY", ecdsa->public, sizeof ecdsa->public)) + ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa)); + + if(read_pem(fp, "ED25519 PUBLIC KEY", ecdsa->public, sizeof(ecdsa->public))) { return ecdsa; + } + free(ecdsa); return 0; } ecdsa_t *ecdsa_read_pem_private_key(FILE *fp) { - ecdsa_t *ecdsa = xmalloc(sizeof *ecdsa); - if(read_pem(fp, "ED25519 PRIVATE KEY", ecdsa->private, sizeof *ecdsa)) + ecdsa_t *ecdsa = xmalloc(sizeof(*ecdsa)); + + if(read_pem(fp, "ED25519 PRIVATE KEY", ecdsa->private, sizeof(*ecdsa))) { return ecdsa; + } + free(ecdsa); return 0; }