X-Git-Url: http://git.meshlink.io/?a=blobdiff_plain;f=src%2Fed25519%2Fecdsa.c;h=7cab5f2a46f7476f15e439da805832ae9b9fc93b;hb=902446edf822a32383c4fa4b7c13b83a568095ad;hp=4515131a0cd1c9c56648d5fd7e6dd622618a827f;hpb=104148f04ad25f9f7f62753a11b81090c5b36984;p=meshlink diff --git a/src/ed25519/ecdsa.c b/src/ed25519/ecdsa.c index 4515131a..7cab5f2a 100644 --- a/src/ed25519/ecdsa.c +++ b/src/ed25519/ecdsa.c @@ -1,6 +1,6 @@ /* ecdsa.c -- ECDSA key handling - Copyright (C) 2011-2013 Guus Sliepen + Copyright (C) 2014-2017 Guus Sliepen This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -21,7 +21,7 @@ #include "ed25519.h" -#define __TINC_ECDSA_INTERNAL__ +#define __MESHLINK_ECDSA_INTERNAL__ typedef struct { uint8_t private[64]; uint8_t public[32]; @@ -38,14 +38,15 @@ ecdsa_t *ecdsa_set_base64_public_key(const char *p) { int len = strlen(p); if(len != 43) { - logger(DEBUG_ALWAYS, LOG_ERR, "Invalid size %d for public key!", len); + logger(NULL, MESHLINK_ERROR, "Invalid size %d for public key!", len); 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); + logger(NULL, MESHLINK_ERROR, "Invalid format of public key! len = %d", len); free(ecdsa); return 0; } @@ -53,6 +54,12 @@ ecdsa_t *ecdsa_set_base64_public_key(const char *p) { return ecdsa; } +ecdsa_t *ecdsa_set_public_key(const void *p) { + ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa)); + memcpy(ecdsa->public, p, sizeof ecdsa->public); + return ecdsa; +} + char *ecdsa_get_base64_public_key(ecdsa_t *ecdsa) { char *base64 = xmalloc(44); b64encode(ecdsa->public, base64, sizeof ecdsa->public); @@ -60,25 +67,46 @@ char *ecdsa_get_base64_public_key(ecdsa_t *ecdsa) { return base64; } +const void *ecdsa_get_public_key(ecdsa_t *ecdsa) { + return ecdsa->public; +} + +ecdsa_t *ecdsa_set_private_key(const void *p) { + ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa)); + memcpy(ecdsa->private, p, sizeof(*ecdsa)); + return ecdsa; +} + +const void *ecdsa_get_private_key(ecdsa_t *ecdsa) { + return ecdsa->private; +} + // Read PEM ECDSA keys ecdsa_t *ecdsa_read_pem_public_key(FILE *fp) { - ecdsa_t *ecdsa = xzalloc(sizeof *ecdsa); - if(fread(ecdsa->public, sizeof ecdsa->public, 1, fp) == 1) + ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa)); + + if(fread(ecdsa->public, sizeof ecdsa->public, 1, fp) == 1) { return ecdsa; + } + free(ecdsa); return 0; } ecdsa_t *ecdsa_read_pem_private_key(FILE *fp) { - ecdsa_t *ecdsa = xmalloc(sizeof *ecdsa); - if(fread(ecdsa, sizeof *ecdsa, 1, fp) == 1) + ecdsa_t *ecdsa = xmalloc(sizeof * ecdsa); + + if(fread(ecdsa, sizeof * ecdsa, 1, fp) == 1) { return ecdsa; + } + free(ecdsa); return 0; } size_t ecdsa_size(ecdsa_t *ecdsa) { + (void)ecdsa; return 64; }