aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/src/tools/pubkey.c
diff options
context:
space:
mode:
authorJason A. Donenfeld <Jason@zx2c4.com>2017-04-16 01:20:43 +0200
committerJason A. Donenfeld <Jason@zx2c4.com>2017-04-19 18:26:32 +0200
commit94273094f6607923f7e52b16717325f6ed7d9d46 (patch)
treef35a0bbd1d17ca66f857bc75b3434d59dddb7227 /src/tools/pubkey.c
parentnetns: cleanup and add diagram (diff)
downloadwireguard-monolithic-historical-94273094f6607923f7e52b16717325f6ed7d9d46.tar.xz
wireguard-monolithic-historical-94273094f6607923f7e52b16717325f6ed7d9d46.zip
tools: side channel resistant base64
Diffstat (limited to 'src/tools/pubkey.c')
-rw-r--r--src/tools/pubkey.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/tools/pubkey.c b/src/tools/pubkey.c
index f567223..009cd15 100644
--- a/src/tools/pubkey.c
+++ b/src/tools/pubkey.c
@@ -1,7 +1,6 @@
/* Copyright (C) 2015-2017 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved. */
#include <errno.h>
-#include <resolv.h>
#include <stdio.h>
#include <ctype.h>
@@ -11,8 +10,8 @@
int pubkey_main(int argc, char *argv[])
{
- unsigned char private_key[CURVE25519_POINT_SIZE + 1] = { 0 }, public_key[CURVE25519_POINT_SIZE] = { 0 };
- char private_key_base64[b64_len(CURVE25519_POINT_SIZE)] = { 0 }, public_key_base64[b64_len(CURVE25519_POINT_SIZE)] = { 0 };
+ uint8_t key[WG_KEY_LEN];
+ char base64[WG_KEY_LEN_BASE64];
int trailing_char;
if (argc != 1) {
@@ -20,11 +19,12 @@ int pubkey_main(int argc, char *argv[])
return 1;
}
- if (fread(private_key_base64, 1, sizeof(private_key_base64) - 1, stdin) != sizeof(private_key_base64) - 1) {
+ if (fread(base64, 1, sizeof(base64) - 1, stdin) != sizeof(base64) - 1) {
errno = EINVAL;
fprintf(stderr, "%s: Key is not the correct length or format\n", PROG_NAME);
return 1;
}
+ base64[WG_KEY_LEN_BASE64 - 1] = '\0';
for (;;) {
trailing_char = getc(stdin);
@@ -36,15 +36,12 @@ int pubkey_main(int argc, char *argv[])
return 1;
}
- if (b64_pton(private_key_base64, private_key, sizeof(private_key)) != sizeof(private_key) - 1) {
+ if (!key_from_base64(key, base64)) {
fprintf(stderr, "%s: Key is not the correct length or format\n", PROG_NAME);
return 1;
}
- curve25519_generate_public(public_key, private_key);
- if (b64_ntop(public_key, sizeof(public_key), public_key_base64, sizeof(public_key_base64)) != sizeof(public_key_base64) - 1) {
- fprintf(stderr, "%s: Could not convert key to base64\n", PROG_NAME);
- return 1;
- }
- puts(public_key_base64);
+ curve25519_generate_public(key, key);
+ key_to_base64(base64, key);
+ puts(base64);
return 0;
}