fix der_put_int

git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@5419 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
Johan Danielsson
1999-02-25 10:05:20 +00:00
parent de38c0a04e
commit 044e371dae

View File

@@ -78,38 +78,41 @@ der_put_int (unsigned char *p, size_t len, int val, size_t *size)
{ {
unsigned char *base = p; unsigned char *base = p;
if (val) { if(val >= 0) {
while (len > 0 && abs(val) > 255) { do {
if(len < 1)
return ASN1_OVERFLOW;
*p-- = val % 256; *p-- = val % 256;
len--;
val /= 256; val /= 256;
--len; } while(val);
if(p[1] >= 128) {
if(len < 1)
return ASN1_OVERFLOW;
*p-- = 0;
len--;
} }
if (len > 0 && abs(val) > 0) { } else {
*p-- = val; val = ~val;
--len; do {
if ((signed char)val != val) { if(len < 1)
if (len < 1) return ASN1_OVERFLOW;
return ASN1_OVERFLOW; *p-- = ~(val % 256);
*p-- = (val < 0) ? 0xff: 0; len--;
--len;
}
val /= 256; val /= 256;
} while(val);
if(p[1] < 128) {
if(len < 1)
return ASN1_OVERFLOW;
*p++ = 0xff;
len--;
} }
if (val != 0)
return ASN1_OVERFLOW;
else {
*size = base - p;
return 0;
}
} else if (len < 1)
return ASN1_OVERFLOW;
else {
*p = 0;
*size = 1;
return 0;
} }
*size = base - p;
return 0;
} }
int int
der_put_length (unsigned char *p, size_t len, size_t val, size_t *size) der_put_length (unsigned char *p, size_t len, size_t val, size_t *size)
{ {