libqaeda

Unnamed repository; edit this file 'description' to name the repository.
Info | Log | Files | Refs | README | LICENSE

commit 94a3550c9a194cfc21191655e0d20a9e49b7dacf
parent 5e31f314003bf2e09ee9915a0e34ffe55141efff
Author: lash <dev@holbrook.no>
Date:   Thu,  8 May 2025 20:24:34 +0100

Add verify to example, fix missing pubkey in signature

Diffstat:
Msrc/crypto/gcrypt.c | 5+++++
Msrc/example/verify.c | 11+++++++++++
Msrc/lq/cert.c | 8++++++--
3 files changed, 22 insertions(+), 2 deletions(-)

diff --git a/src/crypto/gcrypt.c b/src/crypto/gcrypt.c @@ -983,6 +983,11 @@ LQSig* lq_signature_from_bytes(const char *sig_data, size_t sig_len, LQPubKey *p lq_zero(sig, sizeof(LQSig)); sig->impl = lq_alloc(LQ_SIGN_LEN); lq_cpy(sig->impl, sig_data, LQ_SIGN_LEN); + + if (pubkey != NULL) { + sig->pubkey = lq_alloc(sizeof(LQPubKey)); + lq_cpy(sig->pubkey, pubkey, sizeof(LQPubKey)); + } return sig; } diff --git a/src/example/verify.c b/src/example/verify.c @@ -42,8 +42,19 @@ int main(int argc, char **argv) { r = lq_certificate_deserialize(&cert, NULL, b, c); if (r) { debug_logerr(LLOG_ERROR, r, "deserialize err"); + lq_finish(); + return 1; + } + + r = lq_certificate_verify(cert); + if (r) { + debug_logerr(LLOG_ERROR, r, "verify err"); + lq_certificate_free(cert); + lq_finish(); + return 1; } + lq_certificate_free(cert); lq_finish(); return r; } diff --git a/src/lq/cert.c b/src/lq/cert.c @@ -346,6 +346,10 @@ int lq_certificate_serialize(LQCert *cert, LQResolve *resolve, char *out, size_t return ERR_OK; } +/** + * \todo pubkey is copied to signature from message, to prevent a double-free. Wastes up to 2x sig bytes. + * + */ int lq_certificate_deserialize(LQCert **cert, LQResolve *resolve, char *in, size_t in_len) { int r; int c; @@ -393,7 +397,7 @@ int lq_certificate_deserialize(LQCert **cert, LQResolve *resolve, char *in, size return asn_except(&item, ERR_READ); } if (c > 0) { - p->request_sig = lq_signature_from_bytes(tmp, c, NULL); + p->request_sig = lq_signature_from_bytes(tmp, c, p->request->pubkey); } } @@ -420,7 +424,7 @@ int lq_certificate_deserialize(LQCert **cert, LQResolve *resolve, char *in, size return asn_except(&item, ERR_READ); } if (c > 0) { - p->response_sig = lq_signature_from_bytes(tmp, c, NULL); + p->response_sig = lq_signature_from_bytes(tmp, c, p->response->pubkey); } }