X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcclient%2Fprotocol.h;h=9d93709210bd550ea29801218564d2c1b3ec225e;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=928479023a4bcd93e5dca733cbfec44f3ea4e10f;hpb=b9e8e107d851a216c060c4c36f94279bba6ffd3d;p=silc.git diff --git a/lib/silcclient/protocol.h b/lib/silcclient/protocol.h index 92847902..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 */ @@ -34,13 +35,17 @@ typedef struct { SilcRng rng; int responder; - /* Destinations ID taken from authenticataed packet so that we can - get the destinations ID. */ - void *dest_id; - SilcIdType dest_id_type; + void *dest_id; /* Destination ID from packet */ + SilcIdType dest_id_type; /* Destination ID type */ + SilcTask timeout_task; SilcPacketContext *packet; - SilcSKE ske; + + 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 */ } SilcClientKEInternalContext; /* Internal context for connection authentication protocol */ @@ -63,13 +68,44 @@ 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); +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, + SilcSKEDiffieHellmanGroup group, + bool is_responder); #endif