diff options
Diffstat (limited to 'src/daemon/https/minitasn1/decoding.c')
-rw-r--r-- | src/daemon/https/minitasn1/decoding.c | 156 |
1 files changed, 90 insertions, 66 deletions
diff --git a/src/daemon/https/minitasn1/decoding.c b/src/daemon/https/minitasn1/decoding.c index fcee0797..fe0eaef7 100644 --- a/src/daemon/https/minitasn1/decoding.c +++ b/src/daemon/https/minitasn1/decoding.c | |||
@@ -35,12 +35,14 @@ | |||
35 | 35 | ||
36 | 36 | ||
37 | static void | 37 | static void |
38 | MHD__asn1_error_description_tag_error (node_asn * node, char *ErrorDescription) | 38 | MHD__asn1_error_description_tag_error (node_asn * node, |
39 | char *ErrorDescription) | ||
39 | { | 40 | { |
40 | 41 | ||
41 | Estrcpy (ErrorDescription, ":: tag error near element '"); | 42 | Estrcpy (ErrorDescription, ":: tag error near element '"); |
42 | MHD__asn1_hierarchical_name (node, ErrorDescription + strlen (ErrorDescription), | 43 | MHD__asn1_hierarchical_name (node, |
43 | MAX_ERROR_DESCRIPTION_SIZE - 40); | 44 | ErrorDescription + strlen (ErrorDescription), |
45 | MAX_ERROR_DESCRIPTION_SIZE - 40); | ||
44 | Estrcat (ErrorDescription, "'"); | 46 | Estrcat (ErrorDescription, "'"); |
45 | 47 | ||
46 | } | 48 | } |
@@ -117,7 +119,7 @@ MHD__asn1_get_length_der (const unsigned char *der, int der_len, int *len) | |||
117 | **/ | 119 | **/ |
118 | int | 120 | int |
119 | MHD__asn1_get_tag_der (const unsigned char *der, int der_len, | 121 | MHD__asn1_get_tag_der (const unsigned char *der, int der_len, |
120 | unsigned char *cls, int *len, unsigned long *tag) | 122 | unsigned char *cls, int *len, unsigned long *tag) |
121 | { | 123 | { |
122 | int punt, ris; | 124 | int punt, ris; |
123 | 125 | ||
@@ -178,8 +180,8 @@ MHD__asn1_get_tag_der (const unsigned char *der, int der_len, | |||
178 | **/ | 180 | **/ |
179 | int | 181 | int |
180 | MHD__asn1_get_octet_der (const unsigned char *der, int der_len, | 182 | MHD__asn1_get_octet_der (const unsigned char *der, int der_len, |
181 | int *ret_len, unsigned char *str, int str_size, | 183 | int *ret_len, unsigned char *str, int str_size, |
182 | int *str_len) | 184 | int *str_len) |
183 | { | 185 | { |
184 | int len_len; | 186 | int len_len; |
185 | 187 | ||
@@ -209,7 +211,7 @@ MHD__asn1_get_octet_der (const unsigned char *der, int der_len, | |||
209 | */ | 211 | */ |
210 | static int | 212 | static int |
211 | MHD__asn1_get_time_der (const unsigned char *der, int der_len, int *ret_len, | 213 | MHD__asn1_get_time_der (const unsigned char *der, int der_len, int *ret_len, |
212 | char *str, int str_size) | 214 | char *str, int str_size) |
213 | { | 215 | { |
214 | int len_len, str_len; | 216 | int len_len, str_len; |
215 | 217 | ||
@@ -228,8 +230,8 @@ MHD__asn1_get_time_der (const unsigned char *der, int der_len, int *ret_len, | |||
228 | 230 | ||
229 | 231 | ||
230 | static void | 232 | static void |
231 | MHD__asn1_get_objectid_der (const unsigned char *der, int der_len, int *ret_len, | 233 | MHD__asn1_get_objectid_der (const unsigned char *der, int der_len, |
232 | char *str, int str_size) | 234 | int *ret_len, char *str, int str_size) |
233 | { | 235 | { |
234 | int len_len, len, k; | 236 | int len_len, len, k; |
235 | char temp[20]; | 237 | char temp[20]; |
@@ -286,8 +288,8 @@ MHD__asn1_get_objectid_der (const unsigned char *der, int der_len, int *ret_len, | |||
286 | **/ | 288 | **/ |
287 | int | 289 | int |
288 | MHD__asn1_get_bit_der (const unsigned char *der, int der_len, | 290 | MHD__asn1_get_bit_der (const unsigned char *der, int der_len, |
289 | int *ret_len, unsigned char *str, int str_size, | 291 | int *ret_len, unsigned char *str, int str_size, |
290 | int *bit_len) | 292 | int *bit_len) |
291 | { | 293 | { |
292 | int len_len, len_byte; | 294 | int len_len, len_byte; |
293 | 295 | ||
@@ -314,8 +316,8 @@ MHD__asn1_get_bit_der (const unsigned char *der, int der_len, | |||
314 | 316 | ||
315 | 317 | ||
316 | static int | 318 | static int |
317 | MHD__asn1_extract_tag_der (node_asn * node, const unsigned char *der, int der_len, | 319 | MHD__asn1_extract_tag_der (node_asn * node, const unsigned char *der, |
318 | int *ret_len) | 320 | int der_len, int *ret_len) |
319 | { | 321 | { |
320 | node_asn *p; | 322 | node_asn *p; |
321 | int counter, len2, len3, is_tag_implicit; | 323 | int counter, len2, len3, is_tag_implicit; |
@@ -353,8 +355,8 @@ MHD__asn1_extract_tag_der (node_asn * node, const unsigned char *der, int der_le | |||
353 | return ASN1_DER_ERROR; | 355 | return ASN1_DER_ERROR; |
354 | counter += len2; | 356 | counter += len2; |
355 | len3 = | 357 | len3 = |
356 | MHD__asn1_get_length_der (der + counter, der_len - counter, | 358 | MHD__asn1_get_length_der (der + counter, |
357 | &len2); | 359 | der_len - counter, &len2); |
358 | if (len3 < 0) | 360 | if (len3 < 0) |
359 | return ASN1_DER_ERROR; | 361 | return ASN1_DER_ERROR; |
360 | counter += len2; | 362 | counter += len2; |
@@ -567,7 +569,8 @@ MHD__asn1_delete_not_used (node_asn * node) | |||
567 | 569 | ||
568 | 570 | ||
569 | static MHD__asn1_retCode | 571 | static MHD__asn1_retCode |
570 | MHD__asn1_get_octet_string (const unsigned char *der, node_asn * node, int *len) | 572 | MHD__asn1_get_octet_string (const unsigned char *der, node_asn * node, |
573 | int *len) | ||
571 | { | 574 | { |
572 | int len2, len3, counter, counter2, counter_end, tot_len, indefinite; | 575 | int len2, len3, counter, counter2, counter_end, tot_len, indefinite; |
573 | unsigned char *temp, *temp2; | 576 | unsigned char *temp, *temp2; |
@@ -606,7 +609,8 @@ MHD__asn1_get_octet_string (const unsigned char *der, node_asn * node, int *len) | |||
606 | 609 | ||
607 | counter++; | 610 | counter++; |
608 | 611 | ||
609 | len2 = MHD__asn1_get_length_der (der + counter, *len - counter, &len3); | 612 | len2 = |
613 | MHD__asn1_get_length_der (der + counter, *len - counter, &len3); | ||
610 | if (len2 <= 0) | 614 | if (len2 <= 0) |
611 | return ASN1_DER_ERROR; | 615 | return ASN1_DER_ERROR; |
612 | 616 | ||
@@ -629,10 +633,10 @@ MHD__asn1_get_octet_string (const unsigned char *der, node_asn * node, int *len) | |||
629 | temp2 = temp + len2; | 633 | temp2 = temp + len2; |
630 | len2 = MHD__asn1_get_length_der (der, *len, &len3); | 634 | len2 = MHD__asn1_get_length_der (der, *len, &len3); |
631 | if (len2 < -1) | 635 | if (len2 < -1) |
632 | { | 636 | { |
633 | MHD__asn1_afree (temp); | 637 | MHD__asn1_afree (temp); |
634 | return ASN1_DER_ERROR; | 638 | return ASN1_DER_ERROR; |
635 | } | 639 | } |
636 | counter2 = len3 + 1; | 640 | counter2 = len3 + 1; |
637 | 641 | ||
638 | if (indefinite == -1) | 642 | if (indefinite == -1) |
@@ -643,12 +647,13 @@ MHD__asn1_get_octet_string (const unsigned char *der, node_asn * node, int *len) | |||
643 | while (counter2 < counter_end) | 647 | while (counter2 < counter_end) |
644 | { | 648 | { |
645 | len2 = | 649 | len2 = |
646 | MHD__asn1_get_length_der (der + counter2, *len - counter, &len3); | 650 | MHD__asn1_get_length_der (der + counter2, *len - counter, |
651 | &len3); | ||
647 | if (len2 < -1) | 652 | if (len2 < -1) |
648 | { | 653 | { |
649 | MHD__asn1_afree (temp); | 654 | MHD__asn1_afree (temp); |
650 | return ASN1_DER_ERROR; | 655 | return ASN1_DER_ERROR; |
651 | } | 656 | } |
652 | 657 | ||
653 | /* FIXME: to be checked. Is this ok? Has the | 658 | /* FIXME: to be checked. Is this ok? Has the |
654 | * size been checked before? | 659 | * size been checked before? |
@@ -757,7 +762,7 @@ MHD__asn1_get_indefinite_length_string (const unsigned char *der, int *len) | |||
757 | 762 | ||
758 | MHD__asn1_retCode | 763 | MHD__asn1_retCode |
759 | MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | 764 | MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, |
760 | char *errorDescription) | 765 | char *errorDescription) |
761 | { | 766 | { |
762 | node_asn *node, *p, *p2, *p3; | 767 | node_asn *node, *p, *p2, *p3; |
763 | char temp[128]; | 768 | char temp[128]; |
@@ -789,7 +794,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
789 | if (p->type & CONST_SET) | 794 | if (p->type & CONST_SET) |
790 | { | 795 | { |
791 | p2 = MHD__asn1_find_up (p); | 796 | p2 = MHD__asn1_find_up (p); |
792 | len2 = strtol ((const char*) p2->value, NULL, 10); | 797 | len2 = strtol ((const char *) p2->value, NULL, 10); |
793 | if (len2 == -1) | 798 | if (len2 == -1) |
794 | { | 799 | { |
795 | if (!der[counter] && !der[counter + 1]) | 800 | if (!der[counter] && !der[counter + 1]) |
@@ -819,7 +824,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
819 | if (type_field (p2->type) != TYPE_CHOICE) | 824 | if (type_field (p2->type) != TYPE_CHOICE) |
820 | ris = | 825 | ris = |
821 | MHD__asn1_extract_tag_der (p2, der + counter, | 826 | MHD__asn1_extract_tag_der (p2, der + counter, |
822 | len - counter, &len2); | 827 | len - counter, &len2); |
823 | else | 828 | else |
824 | { | 829 | { |
825 | p3 = p2->down; | 830 | p3 = p2->down; |
@@ -827,7 +832,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
827 | { | 832 | { |
828 | ris = | 833 | ris = |
829 | MHD__asn1_extract_tag_der (p3, der + counter, | 834 | MHD__asn1_extract_tag_der (p3, der + counter, |
830 | len - counter, &len2); | 835 | len - counter, |
836 | &len2); | ||
831 | if (ris == ASN1_SUCCESS) | 837 | if (ris == ASN1_SUCCESS) |
832 | break; | 838 | break; |
833 | p3 = p3->right; | 839 | p3 = p3->right; |
@@ -852,7 +858,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
852 | if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) | 858 | if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) |
853 | { | 859 | { |
854 | p2 = MHD__asn1_find_up (p); | 860 | p2 = MHD__asn1_find_up (p); |
855 | len2 = strtol ((const char*) p2->value, NULL, 10); | 861 | len2 = strtol ((const char *) p2->value, NULL, 10); |
856 | if (counter == len2) | 862 | if (counter == len2) |
857 | { | 863 | { |
858 | if (p->right) | 864 | if (p->right) |
@@ -878,7 +884,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
878 | if (counter < len) | 884 | if (counter < len) |
879 | ris = | 885 | ris = |
880 | MHD__asn1_extract_tag_der (p->down, der + counter, | 886 | MHD__asn1_extract_tag_der (p->down, der + counter, |
881 | len - counter, &len2); | 887 | len - counter, &len2); |
882 | else | 888 | else |
883 | ris = ASN1_DER_ERROR; | 889 | ris = ASN1_DER_ERROR; |
884 | if (ris == ASN1_SUCCESS) | 890 | if (ris == ASN1_SUCCESS) |
@@ -917,14 +923,15 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
917 | if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) | 923 | if ((p->type & CONST_OPTION) || (p->type & CONST_DEFAULT)) |
918 | { | 924 | { |
919 | p2 = MHD__asn1_find_up (p); | 925 | p2 = MHD__asn1_find_up (p); |
920 | len2 = strtol ((const char*) p2->value, NULL, 10); | 926 | len2 = strtol ((const char *) p2->value, NULL, 10); |
921 | if ((len2 != -1) && (counter > len2)) | 927 | if ((len2 != -1) && (counter > len2)) |
922 | ris = ASN1_TAG_ERROR; | 928 | ris = ASN1_TAG_ERROR; |
923 | } | 929 | } |
924 | 930 | ||
925 | if (ris == ASN1_SUCCESS) | 931 | if (ris == ASN1_SUCCESS) |
926 | ris = | 932 | ris = |
927 | MHD__asn1_extract_tag_der (p, der + counter, len - counter, &len2); | 933 | MHD__asn1_extract_tag_der (p, der + counter, len - counter, |
934 | &len2); | ||
928 | if (ris != ASN1_SUCCESS) | 935 | if (ris != ASN1_SUCCESS) |
929 | { | 936 | { |
930 | if (p->type & CONST_OPTION) | 937 | if (p->type & CONST_OPTION) |
@@ -940,7 +947,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
940 | else | 947 | else |
941 | { | 948 | { |
942 | if (errorDescription != NULL) | 949 | if (errorDescription != NULL) |
943 | MHD__asn1_error_description_tag_error (p, errorDescription); | 950 | MHD__asn1_error_description_tag_error (p, |
951 | errorDescription); | ||
944 | 952 | ||
945 | MHD__asn1_delete_structure (element); | 953 | MHD__asn1_delete_structure (element); |
946 | return ASN1_TAG_ERROR; | 954 | return ASN1_TAG_ERROR; |
@@ -978,7 +986,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
978 | case TYPE_INTEGER: | 986 | case TYPE_INTEGER: |
979 | case TYPE_ENUMERATED: | 987 | case TYPE_ENUMERATED: |
980 | len2 = | 988 | len2 = |
981 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 989 | MHD__asn1_get_length_der (der + counter, len - counter, |
990 | &len3); | ||
982 | if (len2 < 0) | 991 | if (len2 < 0) |
983 | return ASN1_DER_ERROR; | 992 | return ASN1_DER_ERROR; |
984 | if (len2 + len3 > len - counter) | 993 | if (len2 + len3 > len - counter) |
@@ -989,7 +998,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
989 | break; | 998 | break; |
990 | case TYPE_OBJECT_ID: | 999 | case TYPE_OBJECT_ID: |
991 | MHD__asn1_get_objectid_der (der + counter, len - counter, &len2, | 1000 | MHD__asn1_get_objectid_der (der + counter, len - counter, &len2, |
992 | temp, sizeof (temp)); | 1001 | temp, sizeof (temp)); |
993 | tlen = strlen (temp); | 1002 | tlen = strlen (temp); |
994 | if (tlen > 0) | 1003 | if (tlen > 0) |
995 | MHD__asn1_set_value (p, temp, tlen + 1); | 1004 | MHD__asn1_set_value (p, temp, tlen + 1); |
@@ -998,8 +1007,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
998 | break; | 1007 | break; |
999 | case TYPE_TIME: | 1008 | case TYPE_TIME: |
1000 | result = | 1009 | result = |
1001 | MHD__asn1_get_time_der (der + counter, len - counter, &len2, temp, | 1010 | MHD__asn1_get_time_der (der + counter, len - counter, &len2, |
1002 | sizeof (temp) - 1); | 1011 | temp, sizeof (temp) - 1); |
1003 | if (result != ASN1_SUCCESS) | 1012 | if (result != ASN1_SUCCESS) |
1004 | { | 1013 | { |
1005 | MHD__asn1_delete_structure (element); | 1014 | MHD__asn1_delete_structure (element); |
@@ -1021,7 +1030,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1021 | break; | 1030 | break; |
1022 | case TYPE_GENERALSTRING: | 1031 | case TYPE_GENERALSTRING: |
1023 | len2 = | 1032 | len2 = |
1024 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 1033 | MHD__asn1_get_length_der (der + counter, len - counter, |
1034 | &len3); | ||
1025 | if (len2 < 0) | 1035 | if (len2 < 0) |
1026 | return ASN1_DER_ERROR; | 1036 | return ASN1_DER_ERROR; |
1027 | if (len3 + len2 > len - counter) | 1037 | if (len3 + len2 > len - counter) |
@@ -1032,7 +1042,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1032 | break; | 1042 | break; |
1033 | case TYPE_BIT_STRING: | 1043 | case TYPE_BIT_STRING: |
1034 | len2 = | 1044 | len2 = |
1035 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 1045 | MHD__asn1_get_length_der (der + counter, len - counter, |
1046 | &len3); | ||
1036 | if (len2 < 0) | 1047 | if (len2 < 0) |
1037 | return ASN1_DER_ERROR; | 1048 | return ASN1_DER_ERROR; |
1038 | if (len3 + len2 > len - counter) | 1049 | if (len3 + len2 > len - counter) |
@@ -1045,7 +1056,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1045 | case TYPE_SET: | 1056 | case TYPE_SET: |
1046 | if (move == UP) | 1057 | if (move == UP) |
1047 | { | 1058 | { |
1048 | len2 = strtol ( (const char*) p->value, NULL, 10); | 1059 | len2 = strtol ((const char *) p->value, NULL, 10); |
1049 | MHD__asn1_set_value (p, NULL, 0); | 1060 | MHD__asn1_set_value (p, NULL, 0); |
1050 | if (len2 == -1) | 1061 | if (len2 == -1) |
1051 | { /* indefinite length method */ | 1062 | { /* indefinite length method */ |
@@ -1074,7 +1085,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1074 | else | 1085 | else |
1075 | { /* move==DOWN || move==RIGHT */ | 1086 | { /* move==DOWN || move==RIGHT */ |
1076 | len3 = | 1087 | len3 = |
1077 | MHD__asn1_get_length_der (der + counter, len - counter, &len2); | 1088 | MHD__asn1_get_length_der (der + counter, len - counter, |
1089 | &len2); | ||
1078 | if (len3 < -1) | 1090 | if (len3 < -1) |
1079 | return ASN1_DER_ERROR; | 1091 | return ASN1_DER_ERROR; |
1080 | counter += len2; | 1092 | counter += len2; |
@@ -1113,7 +1125,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1113 | case TYPE_SET_OF: | 1125 | case TYPE_SET_OF: |
1114 | if (move == UP) | 1126 | if (move == UP) |
1115 | { | 1127 | { |
1116 | len2 = strtol ( (const char*) p->value, NULL, 10); | 1128 | len2 = strtol ((const char *) p->value, NULL, 10); |
1117 | if (len2 == -1) | 1129 | if (len2 == -1) |
1118 | { /* indefinite length method */ | 1130 | { /* indefinite length method */ |
1119 | if ((counter + 2) > len) | 1131 | if ((counter + 2) > len) |
@@ -1152,7 +1164,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1152 | else | 1164 | else |
1153 | { /* move==DOWN || move==RIGHT */ | 1165 | { /* move==DOWN || move==RIGHT */ |
1154 | len3 = | 1166 | len3 = |
1155 | MHD__asn1_get_length_der (der + counter, len - counter, &len2); | 1167 | MHD__asn1_get_length_der (der + counter, len - counter, |
1168 | &len2); | ||
1156 | if (len3 < -1) | 1169 | if (len3 < -1) |
1157 | return ASN1_DER_ERROR; | 1170 | return ASN1_DER_ERROR; |
1158 | counter += len2; | 1171 | counter += len2; |
@@ -1190,7 +1203,7 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1190 | return ASN1_DER_ERROR; | 1203 | return ASN1_DER_ERROR; |
1191 | len4 = | 1204 | len4 = |
1192 | MHD__asn1_get_length_der (der + counter + len2, | 1205 | MHD__asn1_get_length_der (der + counter + len2, |
1193 | len - counter - len2, &len3); | 1206 | len - counter - len2, &len3); |
1194 | if (len4 < -1) | 1207 | if (len4 < -1) |
1195 | return ASN1_DER_ERROR; | 1208 | return ASN1_DER_ERROR; |
1196 | if (len4 > len - counter + len2 + len3) | 1209 | if (len4 > len - counter + len2 + len3) |
@@ -1199,14 +1212,16 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1199 | { | 1212 | { |
1200 | len2 += len4; | 1213 | len2 += len4; |
1201 | MHD__asn1_length_der (len2 + len3, NULL, &len4); | 1214 | MHD__asn1_length_der (len2 + len3, NULL, &len4); |
1202 | temp2 = (unsigned char *) MHD__asn1_alloca (len2 + len3 + len4); | 1215 | temp2 = |
1216 | (unsigned char *) MHD__asn1_alloca (len2 + len3 + len4); | ||
1203 | if (temp2 == NULL) | 1217 | if (temp2 == NULL) |
1204 | { | 1218 | { |
1205 | MHD__asn1_delete_structure (element); | 1219 | MHD__asn1_delete_structure (element); |
1206 | return ASN1_MEM_ALLOC_ERROR; | 1220 | return ASN1_MEM_ALLOC_ERROR; |
1207 | } | 1221 | } |
1208 | 1222 | ||
1209 | MHD__asn1_octet_der (der + counter, len2 + len3, temp2, &len4); | 1223 | MHD__asn1_octet_der (der + counter, len2 + len3, temp2, |
1224 | &len4); | ||
1210 | MHD__asn1_set_value (p, temp2, len4); | 1225 | MHD__asn1_set_value (p, temp2, len4); |
1211 | MHD__asn1_afree (temp2); | 1226 | MHD__asn1_afree (temp2); |
1212 | counter += len2 + len3; | 1227 | counter += len2 + len3; |
@@ -1221,7 +1236,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1221 | 1236 | ||
1222 | len2 = len - counter; | 1237 | len2 = len - counter; |
1223 | ris = | 1238 | ris = |
1224 | MHD__asn1_get_indefinite_length_string (der + counter, &len2); | 1239 | MHD__asn1_get_indefinite_length_string (der + counter, |
1240 | &len2); | ||
1225 | if (ris != ASN1_SUCCESS) | 1241 | if (ris != ASN1_SUCCESS) |
1226 | { | 1242 | { |
1227 | MHD__asn1_delete_structure (element); | 1243 | MHD__asn1_delete_structure (element); |
@@ -1328,7 +1344,8 @@ MHD__asn1_der_decoding (ASN1_TYPE * element, const void *ider, int len, | |||
1328 | **/ | 1344 | **/ |
1329 | MHD__asn1_retCode | 1345 | MHD__asn1_retCode |
1330 | MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | 1346 | MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, |
1331 | const char *name_element, int *start, int *end) | 1347 | const char *name_element, int *start, |
1348 | int *end) | ||
1332 | { | 1349 | { |
1333 | node_asn *node, *node_to_find, *p, *p2, *p3; | 1350 | node_asn *node, *node_to_find, *p, *p2, *p3; |
1334 | int counter, len2, len3, len4, move, ris; | 1351 | int counter, len2, len3, len4, move, ris; |
@@ -1369,7 +1386,7 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1369 | if (p->type & CONST_SET) | 1386 | if (p->type & CONST_SET) |
1370 | { | 1387 | { |
1371 | p2 = MHD__asn1_find_up (p); | 1388 | p2 = MHD__asn1_find_up (p); |
1372 | len2 = strtol ( (const char* ) p2->value, NULL, 10); | 1389 | len2 = strtol ((const char *) p2->value, NULL, 10); |
1373 | if (len2 == -1) | 1390 | if (len2 == -1) |
1374 | { | 1391 | { |
1375 | if (!der[counter] && !der[counter + 1]) | 1392 | if (!der[counter] && !der[counter + 1]) |
@@ -1396,13 +1413,13 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1396 | if (type_field (p2->type) != TYPE_CHOICE) | 1413 | if (type_field (p2->type) != TYPE_CHOICE) |
1397 | ris = | 1414 | ris = |
1398 | MHD__asn1_extract_tag_der (p2, der + counter, | 1415 | MHD__asn1_extract_tag_der (p2, der + counter, |
1399 | len - counter, &len2); | 1416 | len - counter, &len2); |
1400 | else | 1417 | else |
1401 | { | 1418 | { |
1402 | p3 = p2->down; | 1419 | p3 = p2->down; |
1403 | ris = | 1420 | ris = |
1404 | MHD__asn1_extract_tag_der (p3, der + counter, | 1421 | MHD__asn1_extract_tag_der (p3, der + counter, |
1405 | len - counter, &len2); | 1422 | len - counter, &len2); |
1406 | } | 1423 | } |
1407 | if (ris == ASN1_SUCCESS) | 1424 | if (ris == ASN1_SUCCESS) |
1408 | { | 1425 | { |
@@ -1425,14 +1442,15 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1425 | p = p->down; | 1442 | p = p->down; |
1426 | ris = | 1443 | ris = |
1427 | MHD__asn1_extract_tag_der (p, der + counter, len - counter, | 1444 | MHD__asn1_extract_tag_der (p, der + counter, len - counter, |
1428 | &len2); | 1445 | &len2); |
1429 | if (p == node_to_find) | 1446 | if (p == node_to_find) |
1430 | *start = counter; | 1447 | *start = counter; |
1431 | } | 1448 | } |
1432 | 1449 | ||
1433 | if (ris == ASN1_SUCCESS) | 1450 | if (ris == ASN1_SUCCESS) |
1434 | ris = | 1451 | ris = |
1435 | MHD__asn1_extract_tag_der (p, der + counter, len - counter, &len2); | 1452 | MHD__asn1_extract_tag_der (p, der + counter, len - counter, |
1453 | &len2); | ||
1436 | if (ris != ASN1_SUCCESS) | 1454 | if (ris != ASN1_SUCCESS) |
1437 | { | 1455 | { |
1438 | if (p->type & CONST_OPTION) | 1456 | if (p->type & CONST_OPTION) |
@@ -1472,7 +1490,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1472 | case TYPE_INTEGER: | 1490 | case TYPE_INTEGER: |
1473 | case TYPE_ENUMERATED: | 1491 | case TYPE_ENUMERATED: |
1474 | len2 = | 1492 | len2 = |
1475 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 1493 | MHD__asn1_get_length_der (der + counter, len - counter, |
1494 | &len3); | ||
1476 | if (len2 < 0) | 1495 | if (len2 < 0) |
1477 | return ASN1_DER_ERROR; | 1496 | return ASN1_DER_ERROR; |
1478 | counter += len3 + len2; | 1497 | counter += len3 + len2; |
@@ -1480,7 +1499,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1480 | break; | 1499 | break; |
1481 | case TYPE_OBJECT_ID: | 1500 | case TYPE_OBJECT_ID: |
1482 | len2 = | 1501 | len2 = |
1483 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 1502 | MHD__asn1_get_length_der (der + counter, len - counter, |
1503 | &len3); | ||
1484 | if (len2 < 0) | 1504 | if (len2 < 0) |
1485 | return ASN1_DER_ERROR; | 1505 | return ASN1_DER_ERROR; |
1486 | counter += len2 + len3; | 1506 | counter += len2 + len3; |
@@ -1488,7 +1508,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1488 | break; | 1508 | break; |
1489 | case TYPE_TIME: | 1509 | case TYPE_TIME: |
1490 | len2 = | 1510 | len2 = |
1491 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 1511 | MHD__asn1_get_length_der (der + counter, len - counter, |
1512 | &len3); | ||
1492 | if (len2 < 0) | 1513 | if (len2 < 0) |
1493 | return ASN1_DER_ERROR; | 1514 | return ASN1_DER_ERROR; |
1494 | counter += len2 + len3; | 1515 | counter += len2 + len3; |
@@ -1504,7 +1525,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1504 | break; | 1525 | break; |
1505 | case TYPE_GENERALSTRING: | 1526 | case TYPE_GENERALSTRING: |
1506 | len2 = | 1527 | len2 = |
1507 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 1528 | MHD__asn1_get_length_der (der + counter, len - counter, |
1529 | &len3); | ||
1508 | if (len2 < 0) | 1530 | if (len2 < 0) |
1509 | return ASN1_DER_ERROR; | 1531 | return ASN1_DER_ERROR; |
1510 | counter += len3 + len2; | 1532 | counter += len3 + len2; |
@@ -1512,7 +1534,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1512 | break; | 1534 | break; |
1513 | case TYPE_BIT_STRING: | 1535 | case TYPE_BIT_STRING: |
1514 | len2 = | 1536 | len2 = |
1515 | MHD__asn1_get_length_der (der + counter, len - counter, &len3); | 1537 | MHD__asn1_get_length_der (der + counter, len - counter, |
1538 | &len3); | ||
1516 | if (len2 < 0) | 1539 | if (len2 < 0) |
1517 | return ASN1_DER_ERROR; | 1540 | return ASN1_DER_ERROR; |
1518 | counter += len3 + len2; | 1541 | counter += len3 + len2; |
@@ -1523,7 +1546,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1523 | if (move != UP) | 1546 | if (move != UP) |
1524 | { | 1547 | { |
1525 | len3 = | 1548 | len3 = |
1526 | MHD__asn1_get_length_der (der + counter, len - counter, &len2); | 1549 | MHD__asn1_get_length_der (der + counter, len - counter, |
1550 | &len2); | ||
1527 | if (len3 < -1) | 1551 | if (len3 < -1) |
1528 | return ASN1_DER_ERROR; | 1552 | return ASN1_DER_ERROR; |
1529 | counter += len2; | 1553 | counter += len2; |
@@ -1544,7 +1568,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1544 | if (move != UP) | 1568 | if (move != UP) |
1545 | { | 1569 | { |
1546 | len3 = | 1570 | len3 = |
1547 | MHD__asn1_get_length_der (der + counter, len - counter, &len2); | 1571 | MHD__asn1_get_length_der (der + counter, len - counter, |
1572 | &len2); | ||
1548 | if (len3 < -1) | 1573 | if (len3 < -1) |
1549 | return ASN1_DER_ERROR; | 1574 | return ASN1_DER_ERROR; |
1550 | counter += len2; | 1575 | counter += len2; |
@@ -1576,7 +1601,7 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1576 | 1601 | ||
1577 | len4 = | 1602 | len4 = |
1578 | MHD__asn1_get_length_der (der + counter + len2, | 1603 | MHD__asn1_get_length_der (der + counter + len2, |
1579 | len - counter - len2, &len3); | 1604 | len - counter - len2, &len3); |
1580 | if (len4 < -1) | 1605 | if (len4 < -1) |
1581 | return ASN1_DER_ERROR; | 1606 | return ASN1_DER_ERROR; |
1582 | 1607 | ||
@@ -1594,7 +1619,8 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1594 | 1619 | ||
1595 | len2 = len - counter; | 1620 | len2 = len - counter; |
1596 | ris = | 1621 | ris = |
1597 | MHD__asn1_get_indefinite_length_string (der + counter, &len2); | 1622 | MHD__asn1_get_indefinite_length_string (der + counter, |
1623 | &len2); | ||
1598 | if (ris != ASN1_SUCCESS) | 1624 | if (ris != ASN1_SUCCESS) |
1599 | return ris; | 1625 | return ris; |
1600 | counter += len2; | 1626 | counter += len2; |
@@ -1646,5 +1672,3 @@ MHD__asn1_der_decoding_startEnd (ASN1_TYPE element, const void *ider, int len, | |||
1646 | 1672 | ||
1647 | return ASN1_ELEMENT_NOT_FOUND; | 1673 | return ASN1_ELEMENT_NOT_FOUND; |
1648 | } | 1674 | } |
1649 | |||
1650 | |||