X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/757aecff2e9ddc579f49c36fb4e5867f62b469bf..9c6af4eca6bfb7bed6f86b1f32479f933979c080:/secnet.h diff --git a/secnet.h b/secnet.h index c93a279..554df4b 100644 --- a/secnet.h +++ b/secnet.h @@ -576,7 +576,6 @@ struct transform_inst_if { struct transform_if { void *st; int capab_bit; - int32_t keylen; /* <<< INT_MAX */ transform_createinstance_fn *create; }; @@ -612,17 +611,28 @@ struct netlink_if { /* DH interface */ -/* Returns public key as a malloced hex string */ +/* 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. + */ typedef string_t dh_makepublic_fn(void *st, uint8_t *secret, int32_t secretlen); -/* Fills buffer (up to buflen) with shared secret */ -typedef void dh_makeshared_fn(void *st, uint8_t *secret, - int32_t secretlen, cstring_t rempublic, - uint8_t *sharedsecret, int32_t buflen); + +/* 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 bool_t dh_makeshared_fn(void *st, uint8_t *secret, + int32_t secretlen, cstring_t rempublic, + uint8_t *sharedsecret, int32_t buflen); + struct dh_if { void *st; - int32_t len; /* Approximate size of modulus in bytes */ - int32_t ceil_len; /* Number of bytes just sufficient to contain modulus */ + int32_t secret_len; /* Size of random secret to generate */ + int32_t shared_len; /* Size of generated shared secret */ + int capab_bit; dh_makepublic_fn *makepublic; dh_makeshared_fn *makeshared; };