X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fprotocol.h;h=9d93709210bd550ea29801218564d2c1b3ec225e;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=92c195abb6615e6dcf91cd0d790db0ed871d75d8;hpb=3ef234937ec402fb77006783624375ef61ffa65d;p=silc.git diff --git a/lib/silcclient/protocol.h b/lib/silcclient/protocol.h index 92c195ab..9d937092 100644 --- a/lib/silcclient/protocol.h +++ b/lib/silcclient/protocol.h @@ -25,6 +25,7 @@ #define SILC_PROTOCOL_CLIENT_NONE 0 #define SILC_PROTOCOL_CLIENT_CONNECTION_AUTH 1 #define SILC_PROTOCOL_CLIENT_KEY_EXCHANGE 2 +#define SILC_PROTOCOL_CLIENT_REKEY 3 /* #define SILC_PROTOCOL_CLIENT_MAX 255 */ /* Internal context for key exchange protocol */ @@ -41,6 +42,7 @@ typedef struct { SilcPacketContext *packet; SilcSKESendPacketCb send_packet; /* SKE's packet sending callback */ + SilcSKEVerifyCb verify; /* SKE's key verify callback */ SilcSKE ske; /* The SKE object */ SilcSKEKeyMaterial *keymat; /* The negotiated key material */ void *context; /* Internal context */ @@ -66,11 +68,22 @@ typedef struct { starting the protocol if we know the authentication data. Otherwise these are and remain NULL. */ unsigned char *auth_data; - unsigned int auth_data_len; + SilcUInt32 auth_data_len; SilcTask timeout_task; } SilcClientConnAuthInternalContext; +/* Internal context for the rekey protocol */ +typedef struct { + void *client; + void *context; + SilcSocketConnection sock; + bool responder; /* TRUE if we are receiving party */ + bool pfs; /* TRUE if PFS is to be used */ + SilcSKE ske; /* Defined if PFS is used */ + SilcPacketContext *packet; +} SilcClientRekeyInternalContext; + /* Prototypes */ void silc_client_protocols_register(void); void silc_client_protocols_unregister(void); @@ -78,12 +91,21 @@ void silc_client_protocol_ke_send_packet(SilcSKE ske, SilcBuffer packet, SilcPacketType type, void *context); +void silc_client_protocol_ke_verify_key(SilcSKE ske, + unsigned char *pk_data, + SilcUInt32 pk_len, + SilcSKEPKType pk_type, + void *context, + SilcSKEVerifyCbCompletion completion, + void *completion_context); void silc_client_protocol_ke_set_keys(SilcSKE ske, SilcSocketConnection sock, SilcSKEKeyMaterial *keymat, SilcCipher cipher, SilcPKCS pkcs, SilcHash hash, - SilcHmac hmac); + SilcHmac hmac, + SilcSKEDiffieHellmanGroup group, + bool is_responder); #endif