Loading CHANGES +8 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,14 @@ Changes between 0.9.6 and 0.9.7 [xx XXX 2000] *) Fixes to BN_to_ASN1_INTEGER when bn is zero. This would previously result in a zero length in the ASN1_INTEGER structure which was not consistent with the structure when d2i_ASN1_INTEGER() was used and would cause ASN1_INTEGER_cmp() to fail. Enhance s2i_ASN1_INTEGER() to cope with hex and negative integers. Fix bug in i2a_ASN1_INTEGER() where it did not print out a minus for negative ASN1_INTEGER. [Steve Henson] *) Fix 'openssl passwd -1'. [Bodo Moeller] Loading apps/ocsp.c +1 −1 Original line number Diff line number Diff line Loading @@ -585,7 +585,7 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, if (status != V_OCSP_CERTSTATUS_REVOKED) continue; if (reason > 0) if (reason != -1) BIO_printf(out, "\tReason: %s\n", OCSP_crl_reason_str(reason)); Loading crypto/asn1/a_int.c +6 −0 Original line number Diff line number Diff line Loading @@ -399,6 +399,12 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai) len=((j == 0)?0:((j/8)+1)); ret->data=(unsigned char *)OPENSSL_malloc(len+4); ret->length=BN_bn2bin(bn,ret->data); /* Correct zero case */ if(!ret->length) { ret->data[0] = 0; ret->length = 1; } return(ret); err: if (ret != ai) M_ASN1_INTEGER_free(ret); Loading crypto/asn1/f_int.c +7 −1 Original line number Diff line number Diff line Loading @@ -69,10 +69,16 @@ int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a) if (a == NULL) return(0); if (a->type & V_ASN1_NEG) { if (BIO_write(bp, "-", 1) != 1) goto err; n = 1; } if (a->length == 0) { if (BIO_write(bp,"00",2) != 2) goto err; n=2; n += 2; } else { Loading crypto/x509v3/v3_utl.c +23 −4 Original line number Diff line number Diff line Loading @@ -154,21 +154,40 @@ ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *method, char *value) { BIGNUM *bn = NULL; ASN1_INTEGER *aint; int isneg, ishex; int ret; bn = BN_new(); if (!value) { X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_INVALID_NULL_VALUE); return 0; } if(!BN_dec2bn(&bn, value)) { if (value[0] == '-') { value++; isneg = 1; } else isneg = 0; if (value[0] == '0' && ((value[1] == 'x') || (value[1] == 'X'))) { value += 2; ishex = 1; } else ishex = 0; if (ishex) ret = BN_hex2bn(&bn, value); else ret = BN_dec2bn(&bn, value); if (!ret) { X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_BN_DEC2BN_ERROR); return 0; } if(!(aint = BN_to_ASN1_INTEGER(bn, NULL))) { if (isneg && BN_is_zero(bn)) isneg = 0; aint = BN_to_ASN1_INTEGER(bn, NULL); BN_free(bn); if (!aint) { X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_BN_TO_ASN1_INTEGER_ERROR); return 0; } BN_free(bn); if (isneg) aint->type |= V_ASN1_NEG; return aint; } Loading Loading
CHANGES +8 −0 Original line number Diff line number Diff line Loading @@ -3,6 +3,14 @@ Changes between 0.9.6 and 0.9.7 [xx XXX 2000] *) Fixes to BN_to_ASN1_INTEGER when bn is zero. This would previously result in a zero length in the ASN1_INTEGER structure which was not consistent with the structure when d2i_ASN1_INTEGER() was used and would cause ASN1_INTEGER_cmp() to fail. Enhance s2i_ASN1_INTEGER() to cope with hex and negative integers. Fix bug in i2a_ASN1_INTEGER() where it did not print out a minus for negative ASN1_INTEGER. [Steve Henson] *) Fix 'openssl passwd -1'. [Bodo Moeller] Loading
apps/ocsp.c +1 −1 Original line number Diff line number Diff line Loading @@ -585,7 +585,7 @@ static int print_ocsp_summary(BIO *out, OCSP_BASICRESP *bs, OCSP_REQUEST *req, if (status != V_OCSP_CERTSTATUS_REVOKED) continue; if (reason > 0) if (reason != -1) BIO_printf(out, "\tReason: %s\n", OCSP_crl_reason_str(reason)); Loading
crypto/asn1/a_int.c +6 −0 Original line number Diff line number Diff line Loading @@ -399,6 +399,12 @@ ASN1_INTEGER *BN_to_ASN1_INTEGER(BIGNUM *bn, ASN1_INTEGER *ai) len=((j == 0)?0:((j/8)+1)); ret->data=(unsigned char *)OPENSSL_malloc(len+4); ret->length=BN_bn2bin(bn,ret->data); /* Correct zero case */ if(!ret->length) { ret->data[0] = 0; ret->length = 1; } return(ret); err: if (ret != ai) M_ASN1_INTEGER_free(ret); Loading
crypto/asn1/f_int.c +7 −1 Original line number Diff line number Diff line Loading @@ -69,10 +69,16 @@ int i2a_ASN1_INTEGER(BIO *bp, ASN1_INTEGER *a) if (a == NULL) return(0); if (a->type & V_ASN1_NEG) { if (BIO_write(bp, "-", 1) != 1) goto err; n = 1; } if (a->length == 0) { if (BIO_write(bp,"00",2) != 2) goto err; n=2; n += 2; } else { Loading
crypto/x509v3/v3_utl.c +23 −4 Original line number Diff line number Diff line Loading @@ -154,21 +154,40 @@ ASN1_INTEGER *s2i_ASN1_INTEGER(X509V3_EXT_METHOD *method, char *value) { BIGNUM *bn = NULL; ASN1_INTEGER *aint; int isneg, ishex; int ret; bn = BN_new(); if (!value) { X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_INVALID_NULL_VALUE); return 0; } if(!BN_dec2bn(&bn, value)) { if (value[0] == '-') { value++; isneg = 1; } else isneg = 0; if (value[0] == '0' && ((value[1] == 'x') || (value[1] == 'X'))) { value += 2; ishex = 1; } else ishex = 0; if (ishex) ret = BN_hex2bn(&bn, value); else ret = BN_dec2bn(&bn, value); if (!ret) { X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_BN_DEC2BN_ERROR); return 0; } if(!(aint = BN_to_ASN1_INTEGER(bn, NULL))) { if (isneg && BN_is_zero(bn)) isneg = 0; aint = BN_to_ASN1_INTEGER(bn, NULL); BN_free(bn); if (!aint) { X509V3err(X509V3_F_S2I_ASN1_INTEGER,X509V3_R_BN_TO_ASN1_INTEGER_ERROR); return 0; } BN_free(bn); if (isneg) aint->type |= V_ASN1_NEG; return aint; } Loading