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);
}
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;
}
"kex" : "sign"),
"type", 0, false);
+ if (kp->extensions) {
+ ucl_object_insert_key (elt, ucl_object_copy (kp->extensions),
+ "extensions", 0, false);
+ }
+
return ucl_out;
}
guchar id[rspamd_cryptobox_HASHBYTES];
enum rspamd_cryptobox_keypair_type type;
enum rspamd_cryptobox_mode alg;
+ ucl_object_t *extensions;
ref_entry_t ref;
};