X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/9c6af4eca6bfb7bed6f86b1f32479f933979c080..refs/heads/mdw/xdh:/secnet.h diff --git a/secnet.h b/secnet.h index 554df4b..e54dbbe 100644 --- a/secnet.h +++ b/secnet.h @@ -350,6 +350,7 @@ extern init_module transform_cbcmac_module; extern init_module netlink_module; extern init_module rsa_module; extern init_module dh_module; +extern init_module xdh_module; extern init_module md5_module; extern init_module slip_module; extern init_module tun_module; @@ -611,26 +612,30 @@ struct netlink_if { /* DH interface */ -/* Returns public key as a malloced hex string. The secretlen will be the - * secret_len reported by the closure. This operation is not expected to - * fail. +/* Write public value corresponding to the secret to the public buffer, and + * return its actual length. The size of the buffer is given in publiclen, + * which will be at least the public_len reported by the closure. The + * secretlen will be the secret_len reported by the closure. This operation + * is not expected to fail. */ -typedef string_t dh_makepublic_fn(void *st, uint8_t *secret, - int32_t secretlen); - -/* Fills buffer (up to buflen) with shared secret. The rempublic string - * comes from the remote site, and may not be acceptable, though it has been - * checked for memory-safety. The secretlen and buflen are the secret_len - * and shared_len reported by the closure, respectively. Return false on - * faliure (e.g., if the publiclen is unacceptable). +typedef int32_t dh_makepublic_fn(void *st, void *public, int32_t publiclen, + uint8_t *secret, int32_t secretlen); + +/* Fills buffer (up to buflen) with shared secret. The publiclen comes from + * the remote site, and may not be acceptable, though it has been checked for + * memory-safety. The secretlen and buflen are the secret_len and shared_len + * reported by the closure, respectively. Return false on faliure (e.g., if + * the publiclen is unacceptable). */ -typedef bool_t dh_makeshared_fn(void *st, uint8_t *secret, - int32_t secretlen, cstring_t rempublic, +typedef bool_t dh_makeshared_fn(void *st, + uint8_t *secret, int32_t secretlen, + const void *public, int32_t publiclen, uint8_t *sharedsecret, int32_t buflen); struct dh_if { void *st; int32_t secret_len; /* Size of random secret to generate */ + int32_t public_len; /* Maximum number of bytes needed for public value */ int32_t shared_len; /* Size of generated shared secret */ int capab_bit; dh_makepublic_fn *makepublic;