libqaeda

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

commit 88e9c3394b57b04c7003ccc8c0cf78623e964661
parent 541cfaa5413191c69153b252c8ee7004a61360c9
Author: lash <dev@holbrook.no>
Date:   Sat, 19 Apr 2025 14:29:06 +0100

Add envelope type

Diffstat:
Msrc/lq/envelope.c | 30++++++++++++++++++++++++++++++
Msrc/lq/envelope.h | 4++--
Msrc/test/test_envelope.c | 5+++++
3 files changed, 37 insertions(+), 2 deletions(-)

diff --git a/src/lq/envelope.c b/src/lq/envelope.c @@ -1,5 +1,7 @@ #include <stddef.h> +#include <libtasn1.h> +#include <llog.h> #include <lq/envelope.h> #include <lq/cert.h> #include <lq/mem.h> @@ -56,6 +58,34 @@ int lq_envelope_attach(LQEnvelope *env, const char *data, size_t data_len) { return ERR_OK; } +int lq_envelope_serialize(LQEnvelope *env, const char *out, size_t out_len) { + int mx; + int r; + asn1_node item; + + r = asn1_create_element(asn, "Qaeda", &item); + if (r != ASN1_SUCCESS) { + return ERR_READ; + } + + c = sizeof(int); + r = asn1_write_value(item, "Envelope.hint", env->hint, c); + if (r != ASN1_SUCCESS) { + return asn_except(&item, ERR_WRITE); + } + + //*out_len = mx; + r = asn1_der_coding(item, "Envelope", out, (int*)out_len, err); + if (r != ASN1_SUCCESS) { + return asn_except(&item, ERR_ENCODING); + } + + r = asn1_delete_structure(&item); + if (r != ASN1_SUCCESS) { + return ERR_FAIL; + } +} + void lq_envelope_free(LQEnvelope *env) { lq_attach_free(env->attach_start); lq_certificate_free(env->cert); diff --git a/src/lq/envelope.h b/src/lq/envelope.h @@ -31,8 +31,8 @@ LQEnvelope *lq_envelope_new(LQCert *cert, int hint); * \return ERR_OK on success. */ int lq_envelope_attach(LQEnvelope *env, const char *data, size_t data_len); -int lq_envelope_serialize(LQEnvelope *env, const char *data, size_t data_len); -int lq_envelope_deserialize(LQEnvelope **env, const char *data, size_t *data_len); +int lq_envelope_serialize(LQEnvelope *env, const char *data, size_t *data_len); +int lq_envelope_deserialize(LQEnvelope **env, const char *data, size_t data_len); void lq_envelope_free(LQEnvelope *env); #endif // LIBQAEDA_ENVELOPE_H_ diff --git a/src/test/test_envelope.c b/src/test/test_envelope.c @@ -39,6 +39,11 @@ START_TEST(check_envelope) { ck_assert_int_eq(r, 0); r = lq_envelope_attach(env, data_two, strlen(data_two) + 1); ck_assert_int_eq(r, 0); + + c = sizeof(buf); + r = lq_envelope_serialize(env, buf, &b) + ck_assert_int_eq(r, 0); + lq_envelope_free(env); } END_TEST