| Serge Bazanski | 72c1f2b | 2024-06-04 13:42:48 +0000 | [diff] [blame] | 1 | From 9410d7d0e3093380bb9d5cff3241107ff55435dd Mon Sep 17 00:00:00 2001 |
| 2 | From: Serge Bazanski <serge@monogon.tech> |
| 3 | Date: Tue, 4 Jun 2024 12:06:17 +0200 |
| 4 | Subject: [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 | |
| 11 | diff --git a/src/swtpm_localca/swtpm_localca.c b/src/swtpm_localca/swtpm_localca.c |
| 12 | index 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 | -- |
| 79 | 2.42.0 |
| 80 | |