X-Git-Url: https://git.distorted.org.uk/~mdw/secnet/blobdiff_plain/ff7cdc9ea887dfef812d914ba4f0a3e62f4c0e58..94c61b9cd7bf02f4cebfe0fb580db61e6e8bf636:/site.c diff --git a/site.c b/site.c index 05206f6..4d3a612 100644 --- a/site.c +++ b/site.c @@ -709,26 +709,31 @@ static bool_t process_msg6(struct site *st, struct buffer_if *msg6, return True; } +static bool_t decrypt_msg0(struct site *st, struct buffer_if *msg0) +{ + cstring_t transform_err; + struct msg0 m; + uint32_t problem; + + if (!unpick_msg0(st,msg0,&m)) return False; + + problem = st->current_transform->reverse(st->current_transform->st, + msg0,&transform_err); + if (!problem) return True; + + slog(st,LOG_SEC,"transform: %s",transform_err); + initiate_key_setup(st,"incoming message would not decrypt"); + return False; +} + static bool_t process_msg0(struct site *st, struct buffer_if *msg0, const struct comm_addr *src) { - struct msg0 m; - cstring_t transform_err; uint32_t type; - if (!st->current_valid) { - slog(st,LOG_DROP,"incoming message but no current key -> dropping"); - return initiate_key_setup(st,"incoming message but no current key"); - } - - if (!unpick_msg0(st,msg0,&m)) return False; + if (!decrypt_msg0(st,msg0)) + return False; - if (st->current_transform->reverse(st->current_transform->st, - msg0,&transform_err)) { - /* There's a problem */ - slog(st,LOG_SEC,"transform: %s",transform_err); - return initiate_key_setup(st,"incoming message would not decrypt"); - } CHECK_AVAIL(msg0,4); type=buf_unprepend_uint32(msg0); switch(type) {