gcrypt: Let read_bignum() return bits, not bytes.
authorAndre Noll <maan@tuebingen.mpg.de>
Tue, 28 Aug 2018 18:18:02 +0000 (20:18 +0200)
committerAndre Noll <maan@tuebingen.mpg.de>
Tue, 25 Dec 2018 16:45:24 +0000 (17:45 +0100)
Callers need this to check if the size of the public key is acceptable.
Since sizes of cryptographic keys are generally measured in bits,
its natural to return bits here.

gcrypt.c

index 9b05a94..abc3272 100644 (file)
--- a/gcrypt.c
+++ b/gcrypt.c
@@ -205,11 +205,11 @@ static inline int get_long_form_num_length_bytes(unsigned char c)
 
 /*
  * Returns: Number of bytes scanned. This may differ from the value returned via
- * bn_bytes because the latter does not include the ASN.1 prefix and a leading
- * zero is not considered as an additional byte for bn_bytes.
+ * bitsp because the latter does not include the ASN.1 prefix and a leading
+ * zero is not considered as an additional byte for the number of bits.
  */
 static int read_bignum(unsigned char *start, unsigned char *end, gcry_mpi_t *bn,
-               int *bn_bytes)
+               unsigned *bitsp)
 {
        int i, bn_size;
        gcry_error_t gret;
@@ -247,8 +247,8 @@ static int read_bignum(unsigned char *start, unsigned char *end, gcry_mpi_t *bn,
                cp++;
                bn_size--;
        }
-       if (bn_bytes)
-               *bn_bytes = bn_size;
+       if (bitsp)
+               *bitsp = bn_size * 8;
        cp += bn_size;
 //     unsigned char *buf;
 //     gcry_mpi_aprint(GCRYMPI_FMT_HEX, &buf, NULL, *bn);
@@ -293,7 +293,8 @@ static int get_private_key(const char *key_file, struct asymmetric_key **result)
        gcry_mpi_t n = NULL, e = NULL, d = NULL, p = NULL, q = NULL,
                u = NULL;
        unsigned char *blob, *cp, *end;
-       int ret, n_size;
+       int ret;
+       unsigned bits;
        gcry_error_t gret;
        size_t erroff, blob_size;
        gcry_sexp_t sexp;
@@ -310,7 +311,7 @@ static int get_private_key(const char *key_file, struct asymmetric_key **result)
        PARA_INFO_LOG("reading RSA params at offset %d\n", ret);
        cp = blob + ret;
 
-       ret = read_bignum(cp, end, &n, &n_size);
+       ret = read_bignum(cp, end, &n, &bits);
        if (ret < 0)
                goto free_blob;
        cp += ret;
@@ -357,7 +358,7 @@ static int get_private_key(const char *key_file, struct asymmetric_key **result)
        key = para_malloc(sizeof(*key));
        key->sexp = sexp;
        *result = key;
-       ret = n_size * 8;
+       ret = bits;
        PARA_INFO_LOG("succesfully read %d bit private key\n", ret);
 release_u:
        gcry_mpi_release(u);