Commit 3cea73a7 authored by Dr. Stephen Henson's avatar Dr. Stephen Henson
Browse files

Fix print of ASN.1 BIGNUM type.



The ASN.1 BIGNUM type needs to be handled in a custom way as it is
not a generic ASN1_STRING type.

Reviewed-by: default avatarRich Salz <rsalz@openssl.org>
parent 23dd09b5
Loading
Loading
Loading
Loading
+16 −2
Original line number Diff line number Diff line
@@ -31,6 +31,8 @@ static int bn_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
                  int utype, char *free_cont, const ASN1_ITEM *it);
static int bn_secure_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
                         int utype, char *free_cont, const ASN1_ITEM *it);
static int bn_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it,
                    int indent, const ASN1_PCTX *pctx);

static ASN1_PRIMITIVE_FUNCS bignum_pf = {
    NULL, 0,
@@ -38,7 +40,8 @@ static ASN1_PRIMITIVE_FUNCS bignum_pf = {
    bn_free,
    0,
    bn_c2i,
    bn_i2c
    bn_i2c,
    bn_print
};

static ASN1_PRIMITIVE_FUNCS cbignum_pf = {
@@ -47,7 +50,8 @@ static ASN1_PRIMITIVE_FUNCS cbignum_pf = {
    bn_free,
    0,
    bn_secure_c2i,
    bn_i2c
    bn_i2c,
    bn_print
};

ASN1_ITEM_start(BIGNUM)
@@ -130,3 +134,13 @@ static int bn_secure_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len,
        bn_secure_new(pval, it);
    return bn_c2i(pval, cont, len, utype, free_cont, it);
}

static int bn_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it,
                    int indent, const ASN1_PCTX *pctx)
{
    if (!BN_print(out, *(BIGNUM **)pval))
        return 0;
    if (BIO_puts(out, "\n") <= 0)
        return 0;
    return 1;
}