X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=apps%2Fsilcd%2Fprotocol.h;h=a6ce666a1d28c3a7e94c3a77da40c531c328e2dc;hb=a818c5b5411bbc4436d1c5f011236985c96bb787;hp=67d76a638df0fe1ac618fde04afefdeaf3631337;hpb=318d79b391bf6288e3e28c840217a7097f3d0392;p=silc.git diff --git a/apps/silcd/protocol.h b/apps/silcd/protocol.h index 67d76a63..a6ce666a 100644 --- a/apps/silcd/protocol.h +++ b/apps/silcd/protocol.h @@ -4,7 +4,7 @@ Author: Pekka Riikonen - Copyright (C) 1997 - 2000 Pekka Riikonen + Copyright (C) 1997 - 2001 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 @@ -22,63 +22,96 @@ #define PROTOCOL_H /* SILC client protocol types */ -#define SILC_PROTOCOL_SERVER_NONE 0 -#define SILC_PROTOCOL_SERVER_CONNECTION_AUTH 1 -#define SILC_PROTOCOL_SERVER_KEY_EXCHANGE 2 -/* #define SILC_PROTOCOL_SERVER_MAX 255 */ +#define SILC_PROTOCOL_SERVER_NONE 0 +#define SILC_PROTOCOL_SERVER_CONNECTION_AUTH 1 +#define SILC_PROTOCOL_SERVER_KEY_EXCHANGE 2 +#define SILC_PROTOCOL_SERVER_REKEY 3 +#define SILC_PROTOCOL_SERVER_BACKUP 4 +/* #define SILC_PROTOCOL_SERVER_MAX 255 */ /* Internal context for Key Exchange protocol. */ typedef struct { void *server; + void *context; SilcSocketConnection sock; SilcRng rng; /* TRUE if we are receiveing part of the protocol */ - int responder; + bool responder; /* Destinations ID taken from authenticataed packet so that we can get the destinations ID. */ void *dest_id; SilcIdType dest_id_type; + /* Pointer to the configurations. */ + void *cconfig; + void *sconfig; + void *rconfig; + SilcTask timeout_task; - SilcBuffer packet; + SilcPacketContext *packet; + SilcSKESecurityPropertyFlag flags; SilcSKE ske; + SilcSKEKeyMaterial *keymat; } SilcServerKEInternalContext; /* Internal context for connection authentication protocol */ typedef struct { void *server; + void *context; SilcSocketConnection sock; /* TRUE if we are receiving part of the protocol */ - int responder; + bool responder; /* SKE object from Key Exchange protocol. */ SilcSKE ske; - /* Auth method that must be used. This is resolved before this - connection authentication protocol is started. Used when we are - initiating. */ - unsigned int auth_meth; - - /* Authentication data if we alreay know it. This is filled before - starting the protocol if we know the authentication data. Otherwise - these are and remain NULL. Used when we are initiating. */ - unsigned char *auth_data; - unsigned int auth_data_len; + /* Authentication method and data if we alreay know it. This is filled + before starting the protocol if we know the authentication data. + Otherwise these are and remain NULL. Used when we are initiating. */ + SilcUInt32 auth_meth; + void *auth_data; + SilcUInt32 auth_data_len; /* Destinations ID from KE protocol context */ void *dest_id; SilcIdType dest_id_type; + /* Pointer to the configurations. */ + void *cconfig; + void *sconfig; + void *rconfig; + SilcTask timeout_task; - SilcBuffer packet; - unsigned short conn_type; + SilcPacketContext *packet; + SilcUInt16 conn_type; } SilcServerConnAuthInternalContext; +/* Internal context for the rekey protocol */ +typedef struct { + void *server; + 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; +} SilcServerRekeyInternalContext; + /* Prototypes */ void silc_server_protocols_register(void); void silc_server_protocols_unregister(void); +int silc_server_protocol_ke_set_keys(SilcServer server, + SilcSKE ske, + SilcSocketConnection sock, + SilcSKEKeyMaterial *keymat, + SilcCipher cipher, + SilcPKCS pkcs, + SilcHash hash, + SilcHmac hmac, + SilcSKEDiffieHellmanGroup group, + bool is_responder); #endif