diff options
Diffstat (limited to 'lib/libssl/src/crypto/asn1/x_long.c')
-rw-r--r-- | lib/libssl/src/crypto/asn1/x_long.c | 73 |
1 files changed, 45 insertions, 28 deletions
diff --git a/lib/libssl/src/crypto/asn1/x_long.c b/lib/libssl/src/crypto/asn1/x_long.c index 1417284d3c3..81dcc4fc296 100644 --- a/lib/libssl/src/crypto/asn1/x_long.c +++ b/lib/libssl/src/crypto/asn1/x_long.c @@ -10,7 +10,7 @@ * are met: * * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. + * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in @@ -84,25 +84,29 @@ static ASN1_PRIMITIVE_FUNCS long_pf = { }; ASN1_ITEM_start(LONG) - ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, ASN1_LONG_UNDEF, "LONG" +ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, ASN1_LONG_UNDEF, "LONG" ASN1_ITEM_end(LONG) ASN1_ITEM_start(ZLONG) - ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, 0, "ZLONG" +ASN1_ITYPE_PRIMITIVE, V_ASN1_INTEGER, NULL, 0, &long_pf, 0, "ZLONG" ASN1_ITEM_end(ZLONG) -static int long_new(ASN1_VALUE **pval, const ASN1_ITEM *it) +static int +long_new(ASN1_VALUE **pval, const ASN1_ITEM *it) { *(long *)pval = it->size; return 1; } -static void long_free(ASN1_VALUE **pval, const ASN1_ITEM *it) +static void +long_free(ASN1_VALUE **pval, const ASN1_ITEM *it) { *(long *)pval = it->size; } -static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const ASN1_ITEM *it) +static int +long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, + const ASN1_ITEM *it) { long ltmp; unsigned long utmp; @@ -113,58 +117,70 @@ static int long_i2c(ASN1_VALUE **pval, unsigned char *cont, int *putype, const A /* use memcpy, because we may not be long aligned */ memcpy(<mp, cp, sizeof(long)); - if(ltmp == it->size) return -1; + if (ltmp == it->size) + return -1; /* Convert the long to positive: we subtract one if negative so * we can cleanly handle the padding if only the MSB of the leading - * octet is set. + * octet is set. */ - if(ltmp < 0) utmp = -ltmp - 1; - else utmp = ltmp; + if (ltmp < 0) + utmp = -ltmp - 1; + else + utmp = ltmp; clen = BN_num_bits_word(utmp); /* If MSB of leading octet set we need to pad */ - if(!(clen & 0x7)) pad = 1; - else pad = 0; + if (!(clen & 0x7)) + pad = 1; + else + pad = 0; /* Convert number of bits to number of octets */ clen = (clen + 7) >> 3; - if(cont) { - if(pad) *cont++ = (ltmp < 0) ? 0xff : 0; - for(i = clen - 1; i >= 0; i--) { + if (cont) { + if (pad) + *cont++ = (ltmp < 0) ? 0xff : 0; + for (i = clen - 1; i >= 0; i--) { cont[i] = (unsigned char)(utmp & 0xff); - if(ltmp < 0) cont[i] ^= 0xff; + if (ltmp < 0) + cont[i] ^= 0xff; utmp >>= 8; } } return clen + pad; } -static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, - int utype, char *free_cont, const ASN1_ITEM *it) +static int +long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, int utype, + char *free_cont, const ASN1_ITEM *it) { int neg, i; long ltmp; unsigned long utmp = 0; char *cp = (char *)pval; - if(len > (int)sizeof(long)) { + if (len > (int)sizeof(long)) { ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); return 0; } /* Is it negative? */ - if(len && (cont[0] & 0x80)) neg = 1; - else neg = 0; + if (len && (cont[0] & 0x80)) + neg = 1; + else + neg = 0; utmp = 0; - for(i = 0; i < len; i++) { + for (i = 0; i < len; i++) { utmp <<= 8; - if(neg) utmp |= cont[i] ^ 0xff; - else utmp |= cont[i]; + if (neg) + utmp |= cont[i] ^ 0xff; + else + utmp |= cont[i]; } ltmp = (long)utmp; - if(neg) { + if (neg) { ltmp++; ltmp = -ltmp; } - if(ltmp == it->size) { + if (ltmp == it->size) { ASN1err(ASN1_F_LONG_C2I, ASN1_R_INTEGER_TOO_LARGE_FOR_LONG); return 0; } @@ -172,8 +188,9 @@ static int long_c2i(ASN1_VALUE **pval, const unsigned char *cont, int len, return 1; } -static int long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, - int indent, const ASN1_PCTX *pctx) +static int +long_print(BIO *out, ASN1_VALUE **pval, const ASN1_ITEM *it, int indent, + const ASN1_PCTX *pctx) { return BIO_printf(out, "%ld\n", *(long *)pval); } |