commit 88e9c3394b57b04c7003ccc8c0cf78623e964661
parent 541cfaa5413191c69153b252c8ee7004a61360c9
Author: lash <dev@holbrook.no>
Date: Sat, 19 Apr 2025 14:29:06 +0100
Add envelope type
Diffstat:
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