aboutsummaryrefslogtreecommitdiffstats
path: root/src/pluto/mp_defs.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/pluto/mp_defs.c')
-rw-r--r--src/pluto/mp_defs.c17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/pluto/mp_defs.c b/src/pluto/mp_defs.c
index 201effc29..ee9dd0360 100644
--- a/src/pluto/mp_defs.c
+++ b/src/pluto/mp_defs.c
@@ -16,6 +16,9 @@
#include <freeswan.h>
+#include <utils.h>
+#include <asn1/asn1.h>
+
#include "constants.h"
#include "defs.h"
#include "mp_defs.h"
@@ -68,3 +71,17 @@ n_to_mpz(MP_INT *mp, const u_char *nbytes, size_t nlen)
mpz_add_ui(mp, mp, nbytes[i]);
}
}
+
+/*
+ * convert a MP integer into a DER coded ASN.1 object
+ */
+chunk_t
+asn1_integer_from_mpz(const mpz_t value)
+{
+ size_t bits = mpz_sizeinbase(value, 2); /* size in bits */
+ size_t size = 1 + bits / BITS_PER_BYTE; /* size in bytes */
+ chunk_t n = mpz_to_n(value, size);
+
+ return asn1_wrap(ASN1_INTEGER, "m", n);
+}
+