chiark
/
gitweb
/
~mdw
/
tripe
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
server/keyexch.c: Randomized exponential retransmit backoff.
[tripe]
/
server
/
tripe.h
diff --git
a/server/tripe.h
b/server/tripe.h
index d447326ec39837087f2fbcdaf47be63ddc168fee..ad20daa72255dce993051e05f121541e1f0e95df 100644
(file)
--- a/
server/tripe.h
+++ b/
server/tripe.h
@@
-134,6
+134,7
@@
#define SEC(n) (n##u)
#define MIN(n) (n##u * 60u)
#define SEC(n) (n##u)
#define MIN(n) (n##u * 60u)
+#define F_2P32 (65536.0*65536.0)
#define MEG(n) (n##ul * 1024ul * 1024ul)
/* --- Timing parameters --- */
#define MEG(n) (n##ul * 1024ul * 1024ul)
/* --- Timing parameters --- */
@@
-142,7
+143,11
@@
#define T_REGEN MIN(40) /* Regeneration time for a key */
#define T_VALID SEC(20) /* Challenge validity period */
#define T_REGEN MIN(40) /* Regeneration time for a key */
#define T_VALID SEC(20) /* Challenge validity period */
-#define T_RETRY SEC(10) /* Challenge retransmit interval */
+#define T_RETRYMIN SEC(2) /* Minimum retry interval */
+#define T_RETRYMAX MIN(5) /* Maximum retry interval */
+#define T_RETRYGROW (5.0/4.0) /* Retry interval growth factor */
+
+#define T_WOBBLE (1.0/3.0) /* Relative timer randomness */
/* --- Other things --- */
/* --- Other things --- */
@@
-246,6
+251,10
@@
typedef struct keyset {
* Clive Jones.
*/
* Clive Jones.
*/
+typedef struct retry {
+ double t; /* Current retry time */
+} retry;
+
#define KX_NCHAL 16u
typedef struct kxchal {
#define KX_NCHAL 16u
typedef struct kxchal {
@@
-255,6
+264,7
@@
typedef struct kxchal {
keyset *ks; /* Pointer to temporary keyset */
unsigned f; /* Various useful flags */
sel_timer t; /* Response timer for challenge */
keyset *ks; /* Pointer to temporary keyset */
unsigned f; /* Various useful flags */
sel_timer t; /* Response timer for challenge */
+ retry rs; /* Retry state */
octet hc[MAXHASHSZ]; /* Hash of his challenge */
octet ck[MAXHASHSZ]; /* His magical check value */
octet hswrq_in[MAXHASHSZ]; /* Inbound switch request message */
octet hc[MAXHASHSZ]; /* Hash of his challenge */
octet ck[MAXHASHSZ]; /* His magical check value */
octet hswrq_in[MAXHASHSZ]; /* Inbound switch request message */
@@
-269,6
+279,7
@@
typedef struct keyexch {
unsigned f; /* Various useful flags */
unsigned s; /* Current state in exchange */
sel_timer t; /* Timer for next exchange */
unsigned f; /* Various useful flags */
unsigned s; /* Current state in exchange */
sel_timer t; /* Timer for next exchange */
+ retry rs; /* Retry state */
ge *kpub; /* Peer's public key */
time_t texp_kpub; /* Expiry time for public key */
mp *alpha; /* My temporary secret */
ge *kpub; /* Peer's public key */
time_t texp_kpub; /* Expiry time for public key */
mp *alpha; /* My temporary secret */