libqaeda

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

commit 6b9e7d0adaa5dffdea06a5c8c35aa8f6209e4b84
parent 264498e48dc93916697a4b570f6c19fb0e221ec7
Author: lash <dev@holbrook.no>
Date:   Fri,  4 Apr 2025 21:10:38 +0100

WIP writing proper cert verify tests

Diffstat:
Msrc/cli/main.c | 30+++++++++++++++++-------------
Msrc/lq/base.h | 4++++
Msrc/lq/cert.c | 2+-
Msrc/lq/crypto.h | 4+++-
Msrc/test/Makefile | 6+++---
Msrc/test/test_cert.c | 52+++++++++++++++++++++++++++++++++++++++++++++++-----
6 files changed, 75 insertions(+), 23 deletions(-)

diff --git a/src/cli/main.c b/src/cli/main.c @@ -124,19 +124,23 @@ int main(int argc, char **argv) { lq_ui_free(); return 1; } -// -// res = lq_msg_new("foo", 4); -// if (res == NULL) { -// lq_ui_free(); -// return 1; -// } -// r = lq_certificate_respond(cert, res, pk_bob); -// if (r != ERR_OK) { -// lq_ui_free(); -// return 1; -// } - -// r = lq_certificate_verify(cert, pubk_alice, NULL); + + res = lq_msg_new("foo", 4); + if (res == NULL) { + lq_ui_free(); + return 1; + } + r = lq_certificate_respond(cert, res, pk_bob); + if (r != ERR_OK) { + lq_ui_free(); + return 1; + } + + r = lq_certificate_verify(cert, pubk_alice, NULL); + if (r != ERR_OK) { + lq_ui_free(); + return 1; + } lq_certificate_free(cert); diff --git a/src/lq/base.h b/src/lq/base.h @@ -1,6 +1,10 @@ #ifndef LQ_BASE_H_ #define LQ_BASE_H_ +#ifndef LQ_BLOCKSIZE +#define LQ_BLOCKSIZE 4096 +#endif + int lq_init(); void lq_finish(); diff --git a/src/lq/cert.c b/src/lq/cert.c @@ -80,7 +80,7 @@ void lq_certificate_set_domain(LQCert *cert, const char *domain) { static int state_digest(LQCert *cert, char *out, int final) { int r; int c; - char data[1024]; + char data[LQ_BLOCKSIZE]; char *p; char *sigdata; size_t siglen; diff --git a/src/lq/crypto.h b/src/lq/crypto.h @@ -3,6 +3,8 @@ #include <stddef.h> +#include "base.h" + #ifndef LQ_DIGEST_LEN #define LQ_DIGEST_LEN 64 #endif @@ -36,7 +38,7 @@ #endif #ifndef LQ_CRYPTO_BLOCKSIZE -#define LQ_CRYPTO_BLOCKSIZE 4096 +#define LQ_CRYPTO_BLOCKSIZE LQ_BLOCKSIZE #endif #ifndef LQ_POINT_LEN diff --git a/src/test/Makefile b/src/test/Makefile @@ -7,8 +7,8 @@ LIBS := ../asn1/defs_asn1_tab.o `pkg-config --libs libtasn1 libgcrypt` -L.. -L.. LDFLAGS := -lcheck $(LIBS) COMMONOBJS = ../mem/std.o ../lq/config.o ../lq/err.o ../lq/base.o ../debug.o -all: build all-tests -#all: build one-test +#all: build all-tests +all: build one-test all-tests: cK_FORK=no LD_LIBRARY_PATH=`realpath ../aux/lib` ./test_test_bin @@ -21,7 +21,7 @@ all-tests: CK_FORK=no LD_LIBRARY_PATH=`realpath ../aux/lib` ./test_store_bin one-test: build - CK_FORK=no LD_LIBRARY_PATH=`realpath ../aux/lib` ./test_crypto_bin + CK_FORK=no LD_LIBRARY_PATH=`realpath ../aux/lib` ./test_cert_bin test: all diff --git a/src/test/test_cert.c b/src/test/test_cert.c @@ -30,6 +30,42 @@ static const char passphrase[32] = { }; +START_TEST(check_cert_sig_req) { + int r; + size_t c; + LQCert *cert; + LQMsg *req; + LQPrivKey *pk; + LQPubKey *pubk; + + pk = lq_privatekey_new(passphrase, LQ_PRIVKEY_LEN); + ck_assert_ptr_nonnull(pk); + + pubk = lq_publickey_from_privatekey(pk); + ck_assert_ptr_nonnull(pubk); + + req = lq_msg_new("foo", 4); + ck_assert_ptr_nonnull(req); + + cert = lq_certificate_new(NULL); + ck_assert_ptr_nonnull(cert); + r = lq_certificate_request(cert, req, pk); + ck_assert_int_eq(r, 0); + + //res = lq_msg_new("barbaz", 7); + //ck_assert_ptr_nonnull(res); + //r = lq_certificate_respond(cert, res, pk_bob); + //ck_assert_int_eq(r, 0); + + r = lq_certificate_verify(cert, pubk, NULL); + ck_assert_int_eq(r, 0); + + lq_certificate_free(cert); + lq_publickey_free(pubk); + lq_privatekey_free(pk); +} +END_TEST + START_TEST(check_cert_symmetric_nomsg) { int r; size_t c; @@ -78,6 +114,7 @@ START_TEST(check_cert_symmetric_req_sig) { char buf[4096]; pk = lq_privatekey_new(passphrase, 32); + req = lq_msg_new(data, strlen(data) + 1); cert = lq_certificate_new(NULL); lq_privatekey_unlock(pk, passphrase, 32); @@ -169,12 +206,17 @@ Suite * common_suite(void) { TCase *tc; s = suite_create("cert"); + tc = tcase_create("sign"); + + tcase_add_test(tc, check_cert_sig_req); +// tcase_add_test(tc, check_cert_sig_res); + tc = tcase_create("serialize"); -// tcase_add_test(tc, check_cert_symmetric_nomsg); -// tcase_add_test(tc, check_cert_symmetric_req_nosig); - tcase_add_test(tc, check_cert_symmetric_req_sig); -// tcase_add_test(tc, check_cert_symmetric_rsp_onesig); -// tcase_add_test(tc, check_cert_symmetric_rsp_bothsig); +// tcase_add_test(tc, check_cert_symmetric_ser_nomsg); +// tcase_add_test(tc, check_cert_symmetric_ser_req_nosig); +// tcase_add_test(tc, check_cert_symmetric_ser_req_sig); +// tcase_add_test(tc, check_cert_symmetric_ser_rsp_onesig); +// tcase_add_test(tc, check_cert_symmetric_ser_rsp_bothsig); suite_add_tcase(s, tc); return s;