version 1.3, 2014/01/09 23:20:00 |
version 1.4, 2014/01/12 08:13:13 |
|
|
void |
void |
kexc25519_server(Kex *kex) |
kexc25519_server(Kex *kex) |
{ |
{ |
BIGNUM *shared_secret; |
|
Key *server_host_private, *server_host_public; |
Key *server_host_private, *server_host_public; |
u_char *server_host_key_blob = NULL, *signature = NULL; |
u_char *server_host_key_blob = NULL, *signature = NULL; |
u_char server_key[CURVE25519_SIZE]; |
u_char server_key[CURVE25519_SIZE]; |
|
|
u_char server_pubkey[CURVE25519_SIZE]; |
u_char server_pubkey[CURVE25519_SIZE]; |
u_char *hash; |
u_char *hash; |
u_int slen, sbloblen, hashlen; |
u_int slen, sbloblen, hashlen; |
|
Buffer shared_secret; |
|
|
/* generate private key */ |
/* generate private key */ |
kexc25519_keygen(server_key, server_pubkey); |
kexc25519_keygen(server_key, server_pubkey); |
|
|
dump_digest("client public key:", client_pubkey, CURVE25519_SIZE); |
dump_digest("client public key:", client_pubkey, CURVE25519_SIZE); |
#endif |
#endif |
|
|
shared_secret = kexc25519_shared_key(server_key, client_pubkey); |
buffer_init(&shared_secret); |
|
kexc25519_shared_key(server_key, client_pubkey, &shared_secret); |
|
|
/* calc H */ |
/* calc H */ |
key_to_blob(server_host_public, &server_host_key_blob, &sbloblen); |
key_to_blob(server_host_public, &server_host_key_blob, &sbloblen); |
|
|
server_host_key_blob, sbloblen, |
server_host_key_blob, sbloblen, |
client_pubkey, |
client_pubkey, |
server_pubkey, |
server_pubkey, |
shared_secret, |
buffer_ptr(&shared_secret), buffer_len(&shared_secret), |
&hash, &hashlen |
&hash, &hashlen |
); |
); |
|
|
|
|
free(server_host_key_blob); |
free(server_host_key_blob); |
/* have keys, free server key */ |
/* have keys, free server key */ |
free(client_pubkey); |
free(client_pubkey); |
kex_derive_keys(kex, hash, hashlen, shared_secret); |
|
BN_clear_free(shared_secret); |
kex_derive_keys(kex, hash, hashlen, |
|
buffer_ptr(&shared_secret), buffer_len(&shared_secret)); |
|
buffer_free(&shared_secret); |
kex_finish(kex); |
kex_finish(kex); |
} |
} |