Add a very simple client and server authentication
This commit is contained in:
18
src/main.c
18
src/main.c
@@ -487,8 +487,6 @@ static int gt_setup_secretkey (struct crypto_ctx *ctx, char *keyfile)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: check key
|
|
||||||
|
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
@@ -506,6 +504,7 @@ static int gt_setup_crypto (struct crypto_ctx *ctx, int fd, int listener)
|
|||||||
uint8_t key[crypto_aead_aes256gcm_KEYBYTES];
|
uint8_t key[crypto_aead_aes256gcm_KEYBYTES];
|
||||||
|
|
||||||
uint8_t data_r[size], data_w[size];
|
uint8_t data_r[size], data_w[size];
|
||||||
|
uint8_t auth_r[hash_size], auth_w[hash_size];
|
||||||
uint8_t hash[hash_size];
|
uint8_t hash[hash_size];
|
||||||
|
|
||||||
randombytes_buf(data_w, nonce_size);
|
randombytes_buf(data_w, nonce_size);
|
||||||
@@ -530,6 +529,21 @@ static int gt_setup_crypto (struct crypto_ctx *ctx, int fd, int listener)
|
|||||||
if (listener && fd_write_all(fd, data_w, size)!=size)
|
if (listener && fd_write_all(fd, data_w, size)!=size)
|
||||||
return -1;
|
return -1;
|
||||||
|
|
||||||
|
crypto_generichash(auth_w, hash_size,
|
||||||
|
data_r, size, ctx->skey, sizeof(ctx->skey));
|
||||||
|
|
||||||
|
if (fd_write_all(fd, auth_w, hash_size)!=hash_size)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
if (fd_read_all(fd, auth_r, hash_size)!=hash_size)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
crypto_generichash(hash, hash_size,
|
||||||
|
data_w, size, ctx->skey, sizeof(ctx->skey));
|
||||||
|
|
||||||
|
if (sodium_memcmp(auth_r, hash, hash_size))
|
||||||
|
return -2;
|
||||||
|
|
||||||
crypto_scalarmult(shared, secret, &data_r[nonce_size]);
|
crypto_scalarmult(shared, secret, &data_r[nonce_size]);
|
||||||
|
|
||||||
crypto_generichash_state state;
|
crypto_generichash_state state;
|
||||||
|
|||||||
Reference in New Issue
Block a user