static bool
silc_verify_public_key_internal(SilcServer server, SilcSocketConnection sock,
SilcSocketType conn_type,
- unsigned char *pk, uint32 pk_len,
+ unsigned char *pk, SilcUInt32 pk_len,
SilcSKEPKType pk_type)
{
char file[256], filename[256], *fingerprint;
/* The key already exists, verify it. */
SilcPublicKey public_key;
unsigned char *encpk;
- uint32 encpk_len;
+ SilcUInt32 encpk_len;
SILC_LOG_DEBUG(("We have the public key saved locally"));
static void
silc_server_protocol_ke_verify_key(SilcSKE ske,
unsigned char *pk_data,
- uint32 pk_len,
+ SilcUInt32 pk_len,
SilcSKEPKType pk_type,
void *context,
SilcSKEVerifyCbCompletion completion,
}
idata->rekey = silc_calloc(1, sizeof(*idata->rekey));
- idata->rekey->send_enc_key =
- silc_calloc(keymat->enc_key_len / 8,
- sizeof(*idata->rekey->send_enc_key));
- memcpy(idata->rekey->send_enc_key,
- keymat->send_enc_key, keymat->enc_key_len / 8);
+ idata->rekey->send_enc_key = silc_memdup(keymat->send_enc_key,
+ keymat->enc_key_len / 8);
idata->rekey->enc_key_len = keymat->enc_key_len / 8;
if (ske->prop->flags & SILC_SKE_SP_FLAG_PFS)
/* Check remote host version string */
SilcSKEStatus silc_ske_check_version(SilcSKE ske, unsigned char *version,
- uint32 len, void *context)
+ SilcUInt32 len, void *context)
{
SilcSKEStatus status = SILC_SKE_STATUS_OK;
char *cp;
SilcSKE ske;
/* Allocate Key Exchange object */
- ske = silc_ske_alloc();
- ctx->ske = ske;
- ske->rng = server->rng;
+ ctx->ske = ske = silc_ske_alloc(server->rng, server);
silc_ske_set_callbacks(ske, silc_server_protocol_ke_send_packet, NULL,
silc_server_protocol_ke_verify_key,
*/
if (ctx->responder == TRUE) {
/* Sends the selected security properties to the initiator. */
- status = silc_ske_responder_phase_1(ctx->ske,
- ctx->ske->start_payload);
+ status = silc_ske_responder_phase_1(ctx->ske);
} else {
/* Call Phase-1 function. This processes the Key Exchange Start
paylaod reply we just got from the responder. The callback
Key Exhange 1 Payload to the responder. */
status = silc_ske_initiator_phase_2(ctx->ske,
server->public_key,
- server->private_key);
+ server->private_key,
+ SILC_SKE_PK_TYPE_SILC);
protocol->state++;
}
silc_server_public_key_authentication(SilcServer server,
SilcPublicKey pub_key,
unsigned char *sign,
- uint32 sign_len,
+ SilcUInt32 sign_len,
SilcSKE ske)
{
SilcPKCS pkcs;
static int
silc_server_get_public_key_auth(SilcServer server,
unsigned char **auth_data,
- uint32 *auth_data_len,
+ SilcUInt32 *auth_data_len,
SilcSKE ske)
{
int len;
char *local_passphrase,
void *local_publickey,
unsigned char *remote_auth,
- uint32 remote_auth_len)
+ SilcUInt32 remote_auth_len)
{
SilcServer server = (SilcServer)ctx->server;
SilcSKE ske = ctx->ske;
* We are receiving party
*/
int ret;
- uint16 payload_len;
- uint16 conn_type;
+ SilcUInt16 payload_len;
+ SilcUInt16 conn_type;
unsigned char *auth_data = NULL;
SILC_LOG_INFO(("Performing authentication protocol for %s (%s)",
SilcBuffer packet;
int payload_len = 0;
unsigned char *auth_data = NULL;
- uint32 auth_data_len = 0;
+ SilcUInt32 auth_data_len = 0;
switch(ctx->auth_meth) {
case SILC_AUTH_NONE:
if (!send) {
memset(idata->rekey->send_enc_key, 0, idata->rekey->enc_key_len);
silc_free(idata->rekey->send_enc_key);
- idata->rekey->send_enc_key =
- silc_calloc(keymat->enc_key_len / 8,
- sizeof(*idata->rekey->send_enc_key));
- memcpy(idata->rekey->send_enc_key, keymat->send_enc_key,
- keymat->enc_key_len / 8);
+ idata->rekey->send_enc_key = silc_memdup(keymat->send_enc_key,
+ keymat->enc_key_len / 8);
idata->rekey->enc_key_len = keymat->enc_key_len / 8;
}
}
{
SilcIDListData idata = (SilcIDListData)ctx->sock->user_data;
SilcSKEKeyMaterial *keymat;
- uint32 key_len = silc_cipher_get_key_len(idata->send_key);
- uint32 hash_len = idata->hash->hash->hash_len;
+ SilcUInt32 key_len = silc_cipher_get_key_len(idata->send_key);
+ SilcUInt32 hash_len = idata->hash->hash->hash_len;
SILC_LOG_DEBUG(("Generating new %s session keys (no PFS)",
send ? "sending" : "receiving"));
{
SilcIDListData idata = (SilcIDListData)ctx->sock->user_data;
SilcSKEKeyMaterial *keymat;
- uint32 key_len = silc_cipher_get_key_len(idata->send_key);
- uint32 hash_len = idata->hash->hash->hash_len;
+ SilcUInt32 key_len = silc_cipher_get_key_len(idata->send_key);
+ SilcUInt32 hash_len = idata->hash->hash->hash_len;
unsigned char *tmpbuf;
- uint32 klen;
+ SilcUInt32 klen;
SILC_LOG_DEBUG(("Generating new %s session keys (with PFS)",
send ? "sending" : "receiving"));
return;
}
- ctx->ske = silc_ske_alloc();
- ctx->ske->rng = server->rng;
+ ctx->ske = silc_ske_alloc(server->rng, server);
ctx->ske->prop = silc_calloc(1, sizeof(*ctx->ske->prop));
silc_ske_group_get_by_number(idata->rekey->ske_group,
&ctx->ske->prop->group);
* Use Perfect Forward Secrecy, ie. negotiate the key material
* using the SKE protocol.
*/
- ctx->ske = silc_ske_alloc();
- ctx->ske->rng = server->rng;
+ ctx->ske = silc_ske_alloc(server->rng, server);
ctx->ske->prop = silc_calloc(1, sizeof(*ctx->ske->prop));
silc_ske_group_get_by_number(idata->rekey->ske_group,
&ctx->ske->prop->group);
NULL, NULL, NULL, silc_ske_check_version,
context);
- status = silc_ske_initiator_phase_2(ctx->ske, NULL, NULL);
+ status = silc_ske_initiator_phase_2(ctx->ske, NULL, NULL, 0);
if (status != SILC_SKE_STATUS_OK) {
SILC_LOG_WARNING(("Error (%s) during Re-key (PFS)",
silc_ske_map_status(status)));