Revise signer callback interface.
authorjsing <jsing@openbsd.org>
Tue, 1 Feb 2022 17:13:10 +0000 (17:13 +0000)
committerjsing <jsing@openbsd.org>
Tue, 1 Feb 2022 17:13:10 +0000 (17:13 +0000)
commit82e78bf1dc05a36a9f4e4f15919566f0c4453e2a
treec792647c981f7a43e6aec7af91dfc9a14352ca1b
parentc864de0c3ec4d86e3561ba54b34be90bb16ae755
Revise signer callback interface.

The current design of tls_sign_cb provides a pointer to a buffer where the
signature needs to be copied, however it fails to provide a length which
could result in buffer overwrites. Furthermore, tls_signer_sign() is
designed such that it allocates and returns ownership to the caller.

Revise tls_sign_cb so that the called function is expected to allocate a
buffer, returning ownership of the buffer (along with its length) to the
caller of the callback. This makes it far easier (and safer) to implement
a tls_sign_cb callback, plus tls_signer_sign can be directly plugged in
(with an appropriate cast).

While here, rename and reorder some arguments - while we will normally
sign a digest, there is no requirement for this to be the case hence use
'input' and 'input_len'. Move padding (an input) before the outputs and
add some additional bounds/return value checks.

This is technically an API/ABI break that would need a libtls major bump,
however since nothing is using the signer interface (outside of regress),
we'll ride the original minor bump.

With input from tb@

ok inoguchi@ tb@
lib/libtls/tls.h
lib/libtls/tls_signer.c