|
@@ -28,7 +28,8 @@
|
|
*/
|
|
*/
|
|
int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|
int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|
{
|
|
{
|
|
- int err, type;
|
|
|
|
|
|
+ int err;
|
|
|
|
+ ltc_asn1_type type;
|
|
unsigned long size, x;
|
|
unsigned long size, x;
|
|
void *data;
|
|
void *data;
|
|
va_list args;
|
|
va_list args;
|
|
@@ -40,7 +41,7 @@ int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|
va_start(args, inlen);
|
|
va_start(args, inlen);
|
|
x = 0;
|
|
x = 0;
|
|
for (;;) {
|
|
for (;;) {
|
|
- type = va_arg(args, int);
|
|
|
|
|
|
+ type = va_arg(args, ltc_asn1_type);
|
|
size = va_arg(args, unsigned long);
|
|
size = va_arg(args, unsigned long);
|
|
data = va_arg(args, void*);
|
|
data = va_arg(args, void*);
|
|
|
|
|
|
@@ -69,7 +70,8 @@ int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|
++x;
|
|
++x;
|
|
break;
|
|
break;
|
|
|
|
|
|
- default:
|
|
|
|
|
|
+ case LTC_ASN1_EOL:
|
|
|
|
+ case LTC_ASN1_CONSTRUCTED:
|
|
va_end(args);
|
|
va_end(args);
|
|
return CRYPT_INVALID_ARG;
|
|
return CRYPT_INVALID_ARG;
|
|
}
|
|
}
|
|
@@ -90,7 +92,7 @@ int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|
va_start(args, inlen);
|
|
va_start(args, inlen);
|
|
x = 0;
|
|
x = 0;
|
|
for (;;) {
|
|
for (;;) {
|
|
- type = va_arg(args, int);
|
|
|
|
|
|
+ type = va_arg(args, ltc_asn1_type);
|
|
size = va_arg(args, unsigned long);
|
|
size = va_arg(args, unsigned long);
|
|
data = va_arg(args, void*);
|
|
data = va_arg(args, void*);
|
|
|
|
|
|
@@ -118,17 +120,14 @@ int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|
case LTC_ASN1_TELETEX_STRING:
|
|
case LTC_ASN1_TELETEX_STRING:
|
|
LTC_SET_ASN1(list, x++, type, data, size);
|
|
LTC_SET_ASN1(list, x++, type, data, size);
|
|
break;
|
|
break;
|
|
-
|
|
|
|
- default:
|
|
|
|
- va_end(args);
|
|
|
|
- err = CRYPT_INVALID_ARG;
|
|
|
|
- goto LBL_ERR;
|
|
|
|
|
|
+ case LTC_ASN1_EOL:
|
|
|
|
+ case LTC_ASN1_CONSTRUCTED:
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
va_end(args);
|
|
va_end(args);
|
|
|
|
|
|
err = der_decode_sequence(in, inlen, list, x);
|
|
err = der_decode_sequence(in, inlen, list, x);
|
|
-LBL_ERR:
|
|
|
|
XFREE(list);
|
|
XFREE(list);
|
|
return err;
|
|
return err;
|
|
}
|
|
}
|