X-Git-Url: https://www.tinc-vpn.org/git/browse?a=blobdiff_plain;f=src%2Fed25519%2Fecdsagen.c;h=9a1de1e76c77d33587ff69730b71f07e2089b992;hb=f6e87ab476a0faf8b124ecaaa27f967d825e6457;hp=418457390d5033069700d277985ba7f242fa3113;hpb=2f01744f82be542894fe2ceecbfb9ead93c9ffa5;p=tinc diff --git a/src/ed25519/ecdsagen.c b/src/ed25519/ecdsagen.c index 41845739..9a1de1e7 100644 --- a/src/ed25519/ecdsagen.c +++ b/src/ed25519/ecdsagen.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]; @@ -35,10 +35,10 @@ typedef struct { // Generate ECDSA key ecdsa_t *ecdsa_generate(void) { - ecdsa_t *ecdsa = xzalloc(sizeof *ecdsa); + ecdsa_t *ecdsa = xzalloc(sizeof(*ecdsa)); uint8_t seed[32]; - randomize(seed, sizeof seed); + randomize(seed, sizeof(seed)); ed25519_create_keypair(ecdsa->public, ecdsa->private, seed); return ecdsa; @@ -46,10 +46,27 @@ ecdsa_t *ecdsa_generate(void) { // Write PEM ECDSA keys +static bool write_pem(FILE *fp, const char *type, void *buf, size_t size) { + fprintf(fp, "-----BEGIN %s-----\n", type); + + char base64[65]; + + while(size) { + size_t todo = size > 48 ? 48 : size; + b64encode(buf, base64, todo); + fprintf(fp, "%s\n", base64); + buf += todo; + size -= todo; + } + + fprintf(fp, "-----END %s-----\n", type); + return !ferror(fp); +} + bool ecdsa_write_pem_public_key(ecdsa_t *ecdsa, FILE *fp) { - return fwrite(ecdsa->public, sizeof ecdsa->public, 1, fp) == 1; + return write_pem(fp, "ED25519 PUBLIC KEY", ecdsa->public, sizeof(ecdsa->public)); } bool ecdsa_write_pem_private_key(ecdsa_t *ecdsa, FILE *fp) { - return fwrite(ecdsa, sizeof *ecdsa, 1, fp) == 1; + return write_pem(fp, "ED25519 PRIVATE KEY", ecdsa->private, sizeof(*ecdsa)); }