blob: 21a2552f931286a809bc42212e53112c19913ef2 [file] [log] [blame]
Serge Bazanski72c1f2b2024-06-04 13:42:48 +00001From 9410d7d0e3093380bb9d5cff3241107ff55435dd Mon Sep 17 00:00:00 2001
2From: Serge Bazanski <serge@monogon.tech>
3Date: Tue, 4 Jun 2024 12:06:17 +0200
4Subject: [PATCH 2/4] swtpm_localca: replace gmp/mpz dependency with boringssl
5 bignum
6
7---
8 src/swtpm_localca/swtpm_localca.c | 26 +++++++++++++-------------
9 1 file changed, 13 insertions(+), 13 deletions(-)
10
11diff --git a/src/swtpm_localca/swtpm_localca.c b/src/swtpm_localca/swtpm_localca.c
12index 2842f22..d42d3a2 100644
13--- a/src/swtpm_localca/swtpm_localca.c
14+++ b/src/swtpm_localca/swtpm_localca.c
15@@ -24,7 +24,8 @@
16
17 #include "glib/glib.h"
18
19-#include <gmp.h>
20+#include <openssl/bn.h>
21+#include <openssl/crypto.h>
22
23 #include "swtpm_conf.h"
24 #include "swtpm_utils.h"
25@@ -313,7 +314,8 @@ static int get_next_serial(const gchar *certserial, const gchar *lockfile,
26 g_autofree gchar *buffer = NULL;
27 char serialbuffer[50];
28 size_t buffer_len;
29- mpz_t serial;
30+ BIGNUM *serial = BN_new();
31+ char *serial_dec = NULL;
32 int lockfd;
33 int ret = 1;
34
35@@ -328,22 +330,18 @@ static int get_next_serial(const gchar *certserial, const gchar *lockfile,
36 if (read_file(certserial, &buffer, &buffer_len) != 0)
37 goto error;
38
39- mpz_init(serial);
40-
41 if (buffer_len > 0 && buffer_len <= 49) {
42 memcpy(serialbuffer, buffer, buffer_len);
43 serialbuffer[buffer_len] = 0;
44
45- if (gmp_sscanf(serialbuffer, "%Zu", serial) != 1)
46- goto new_serial;
47- mpz_add_ui(serial, serial, 1);
48-
49- if ((mpz_sizeinbase(serial, 2) + 7) / 8 > 20)
50+ if (BN_dec2bn(&serial, serialbuffer) == 0)
51 goto new_serial;
52+ BN_add_word(serial, 1);
53
54- if (gmp_snprintf(serialbuffer,
55+ serial_dec = BN_bn2dec(serial);
56+ if (snprintf(serialbuffer,
57 sizeof(serialbuffer),
58- "%Zu", serial) >= (int)sizeof(serialbuffer))
59+ "%s", serial_dec) >= (int)sizeof(serialbuffer))
60 goto new_serial;
61 } else {
62 new_serial:
63@@ -356,10 +354,12 @@ new_serial:
64 write_file(certserial, (unsigned char *)*serial_str, strlen(*serial_str));
65 ret = 0;
66
67- mpz_clear(serial);
68-
69 error:
70 unlock_file(lockfd);
71+ if (serial_dec) {
72+ OPENSSL_free(serial_dec);
73+ }
74+ BN_free(serial);
75
76 return ret;
77 }
78--
792.42.0
80