]> git.ipfire.org Git - thirdparty/rspamd.git/commitdiff
[Minor] Add extensions to the keypairs
authorVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 3 Jan 2023 21:06:05 +0000 (21:06 +0000)
committerVsevolod Stakhov <vsevolod@rspamd.com>
Tue, 3 Jan 2023 21:06:05 +0000 (21:06 +0000)
src/libcryptobox/keypair.c
src/libcryptobox/keypair_private.h

index ce9a9200da826805e1ea257f0c386c761299d196..da26fcff7f8e933cde20814a0c8312798e78cce7 100644 (file)
@@ -212,6 +212,11 @@ rspamd_cryptobox_keypair_dtor (struct rspamd_cryptobox_keypair *kp)
        sk = rspamd_cryptobox_keypair_sk (kp, &len);
        g_assert (sk != NULL && len > 0);
        rspamd_explicit_memzero (sk, len);
+
+       if (kp->extensions) {
+               ucl_object_unref (kp->extensions);
+       }
+
        /* Not g_free as kp is aligned using posix_memalign */
        free (kp);
 }
@@ -763,6 +768,12 @@ rspamd_keypair_from_ucl (const ucl_object_t *obj)
 
        rspamd_cryptobox_hash (kp->id, target, len, NULL, 0);
 
+       elt = ucl_object_lookup (obj, "extensions");
+       if (elt && ucl_object_type (elt) == UCL_OBJECT) {
+               /* Use copy to avoid issues with the refcounts */
+               kp->extensions = ucl_object_copy (elt);
+       }
+
        return kp;
 }
 
@@ -829,6 +840,11 @@ rspamd_keypair_to_ucl (struct rspamd_cryptobox_keypair *kp,
                                                        "kex" : "sign"),
                                        "type", 0, false);
 
+       if (kp->extensions) {
+               ucl_object_insert_key (elt, ucl_object_copy (kp->extensions),
+                       "extensions", 0, false);
+       }
+
        return ucl_out;
 }
 
index 8d259faaa1107f09970f3af1d93054b3ca4f9b5e..705d1a4fc57032e7a6e1cca9c87b9390e1f3ffde 100644 (file)
@@ -39,6 +39,7 @@ struct rspamd_cryptobox_keypair {
        guchar id[rspamd_cryptobox_HASHBYTES];
        enum rspamd_cryptobox_keypair_type type;
        enum rspamd_cryptobox_mode alg;
+       ucl_object_t *extensions;
        ref_entry_t ref;
 };