protocol.h
- Author: Pekka Riikonen <priikone@poseidon.pspt.fi>
+ Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 1997 - 2000 Pekka Riikonen
+ Copyright (C) 1997 - 2004 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
-
+ the Free Software Foundation; version 2 of the License.
+
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
#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 */
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 */
typedef struct {
void *client;
SilcSocketConnection sock;
+ SilcClientConnectionStatus status;
/* SKE object from Key Exchange protocol. */
SilcSKE ske;
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