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;
if (val) {
while (len > 0 && abs(val) > 255) {
if(val >= 0) {
do {
if(len < 1)
return ASN1_OVERFLOW;
*p-- = val % 256;
len--;
val /= 256;
--len;
} while(val);
if(p[1] >= 128) {
if(len < 1)
return ASN1_OVERFLOW;
*p-- = 0;
len--;
}
if (len > 0 && abs(val) > 0) {
*p-- = val;
--len;
if ((signed char)val != val) {
if (len < 1)
return ASN1_OVERFLOW;
*p-- = (val < 0) ? 0xff: 0;
--len;
}
} else {
val = ~val;
do {
if(len < 1)
return ASN1_OVERFLOW;
*p-- = ~(val % 256);
len--;
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
der_put_length (unsigned char *p, size_t len, size_t val, size_t *size)
{