add missing types to decode routines
This commit is contained in:
parent
800182338e
commit
00c111b1c8
@ -51,6 +51,16 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen,
|
|||||||
data = list[x].data;
|
data = list[x].data;
|
||||||
|
|
||||||
switch (list[x].type) {
|
switch (list[x].type) {
|
||||||
|
case LTC_ASN1_BOOLEAN:
|
||||||
|
if (der_decode_boolean(in, *inlen, data) == CRYPT_OK) {
|
||||||
|
if (der_length_boolean(&z) == CRYPT_OK) {
|
||||||
|
list[x].used = 1;
|
||||||
|
*inlen = z;
|
||||||
|
return CRYPT_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case LTC_ASN1_INTEGER:
|
case LTC_ASN1_INTEGER:
|
||||||
if (der_decode_integer(in, *inlen, data) == CRYPT_OK) {
|
if (der_decode_integer(in, *inlen, data) == CRYPT_OK) {
|
||||||
if (der_length_integer(data, &z) == CRYPT_OK) {
|
if (der_length_integer(data, &z) == CRYPT_OK) {
|
||||||
@ -82,6 +92,17 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LTC_ASN1_RAW_BIT_STRING:
|
||||||
|
if (der_decode_raw_bit_string(in, *inlen, data, &size) == CRYPT_OK) {
|
||||||
|
if (der_length_bit_string(size, &z) == CRYPT_OK) {
|
||||||
|
list[x].used = 1;
|
||||||
|
list[x].size = size;
|
||||||
|
*inlen = z;
|
||||||
|
return CRYPT_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case LTC_ASN1_OCTET_STRING:
|
case LTC_ASN1_OCTET_STRING:
|
||||||
if (der_decode_octet_string(in, *inlen, data, &size) == CRYPT_OK) {
|
if (der_decode_octet_string(in, *inlen, data, &size) == CRYPT_OK) {
|
||||||
if (der_length_octet_string(size, &z) == CRYPT_OK) {
|
if (der_length_octet_string(size, &z) == CRYPT_OK) {
|
||||||
@ -112,6 +133,17 @@ int der_decode_choice(const unsigned char *in, unsigned long *inlen,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LTC_ASN1_TELETEX_STRING:
|
||||||
|
if (der_decode_teletex_string(in, *inlen, data, &size) == CRYPT_OK) {
|
||||||
|
if (der_length_teletex_string(data, size, &z) == CRYPT_OK) {
|
||||||
|
list[x].used = 1;
|
||||||
|
list[x].size = size;
|
||||||
|
*inlen = z;
|
||||||
|
return CRYPT_OK;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case LTC_ASN1_IA5_STRING:
|
case LTC_ASN1_IA5_STRING:
|
||||||
if (der_decode_ia5_string(in, *inlen, data, &size) == CRYPT_OK) {
|
if (der_decode_ia5_string(in, *inlen, data, &size) == CRYPT_OK) {
|
||||||
if (der_length_ia5_string(data, size, &z) == CRYPT_OK) {
|
if (der_length_ia5_string(data, size, &z) == CRYPT_OK) {
|
||||||
|
@ -187,6 +187,18 @@ int der_decode_sequence_ex(const unsigned char *in, unsigned long inlen,
|
|||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case LTC_ASN1_TELETEX_STRING:
|
||||||
|
z = inlen;
|
||||||
|
if ((err = der_decode_teletex_string(in + x, z, data, &size)) != CRYPT_OK) {
|
||||||
|
if (!ordered) { continue; }
|
||||||
|
goto LBL_ERR;
|
||||||
|
}
|
||||||
|
list[i].size = size;
|
||||||
|
if ((err = der_length_teletex_string(data, size, &z)) != CRYPT_OK) {
|
||||||
|
goto LBL_ERR;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
case LTC_ASN1_IA5_STRING:
|
case LTC_ASN1_IA5_STRING:
|
||||||
z = inlen;
|
z = inlen;
|
||||||
if ((err = der_decode_ia5_string(in + x, z, data, &size)) != CRYPT_OK) {
|
if ((err = der_decode_ia5_string(in + x, z, data, &size)) != CRYPT_OK) {
|
||||||
|
@ -64,6 +64,8 @@ int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|||||||
case LTC_ASN1_SETOF:
|
case LTC_ASN1_SETOF:
|
||||||
case LTC_ASN1_SEQUENCE:
|
case LTC_ASN1_SEQUENCE:
|
||||||
case LTC_ASN1_CHOICE:
|
case LTC_ASN1_CHOICE:
|
||||||
|
case LTC_ASN1_RAW_BIT_STRING:
|
||||||
|
case LTC_ASN1_TELETEX_STRING:
|
||||||
++x;
|
++x;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -112,6 +114,8 @@ int der_decode_sequence_multi(const unsigned char *in, unsigned long inlen, ...)
|
|||||||
case LTC_ASN1_SET:
|
case LTC_ASN1_SET:
|
||||||
case LTC_ASN1_SETOF:
|
case LTC_ASN1_SETOF:
|
||||||
case LTC_ASN1_CHOICE:
|
case LTC_ASN1_CHOICE:
|
||||||
|
case LTC_ASN1_RAW_BIT_STRING:
|
||||||
|
case LTC_ASN1_TELETEX_STRING:
|
||||||
LTC_SET_ASN1(list, x++, type, data, size);
|
LTC_SET_ASN1(list, x++, type, data, size);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user