|
@@ -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) {
|