|
@@ -1300,72 +1300,19 @@ static void der_Xcode_test(void)
|
|
|
mp_clear(mpinteger);
|
|
|
}
|
|
|
|
|
|
-#if !((defined(_WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__))
|
|
|
-
|
|
|
-#include <sys/stat.h>
|
|
|
-#include <sys/types.h>
|
|
|
-#include <dirent.h>
|
|
|
-
|
|
|
-static off_t fsize(const char *filename)
|
|
|
+#ifdef LTC_TEST_READDIR
|
|
|
+int _der_decode_sequence_flexi(const void *in, unsigned long inlen, void* ctx)
|
|
|
{
|
|
|
- struct stat st;
|
|
|
-
|
|
|
- if (stat(filename, &st) == 0) return st.st_size;
|
|
|
-
|
|
|
- return -1;
|
|
|
-}
|
|
|
-
|
|
|
-static void der_asn1_test(void)
|
|
|
-{
|
|
|
- DIR *d = opendir("tests/asn1");
|
|
|
- struct dirent *de;
|
|
|
- char fname[PATH_MAX];
|
|
|
- void* buf = NULL;
|
|
|
- FILE *f = NULL;
|
|
|
- off_t fsz;
|
|
|
- unsigned long sz;
|
|
|
- ltc_asn1_list *list;
|
|
|
- int err;
|
|
|
- if (d == NULL)
|
|
|
- return;
|
|
|
- while((de = readdir(d)) != NULL) {
|
|
|
- fname[0] = '\0';
|
|
|
- if (strcmp(de->d_name, ".") == 0 || strcmp(de->d_name, "..") == 0)
|
|
|
- continue;
|
|
|
- strcat(fname, "tests/asn1/");
|
|
|
- strcat(fname, de->d_name);
|
|
|
- fsz = fsize(fname);
|
|
|
- if (fsz == -1)
|
|
|
- break;
|
|
|
-#if defined(LTC_TEST_DBG) && LTC_TEST_DBG > 1
|
|
|
- fprintf(stderr, "Try to decode %s\n", fname);
|
|
|
-#endif
|
|
|
- f = fopen(fname, "rb");
|
|
|
- sz = fsz;
|
|
|
- buf = XMALLOC(fsz);
|
|
|
- if (fread(buf, 1, sz, f) != sz)
|
|
|
- break;
|
|
|
-
|
|
|
- if ((err = der_decode_sequence_flexi(buf, &sz, &list)) == CRYPT_OK) {
|
|
|
+ ltc_asn1_list** list = ctx;
|
|
|
+ if (der_decode_sequence_flexi(in, &inlen, list) == CRYPT_OK) {
|
|
|
#ifdef LTC_DER_TESTS_PRINT_FLEXI
|
|
|
- fprintf(stderr, "\n\n");
|
|
|
- _der_tests_print_flexi(list, 0);
|
|
|
- fprintf(stderr, "\n\n");
|
|
|
-#endif
|
|
|
- der_sequence_free(list);
|
|
|
- } else {
|
|
|
-#if defined(LTC_TEST_DBG)
|
|
|
- fprintf(stderr, "Could not decode %s: %s\n\n", fname, error_to_string(err));
|
|
|
+ fprintf(stderr, "\n\n");
|
|
|
+ _der_tests_print_flexi(*list, 0);
|
|
|
+ fprintf(stderr, "\n\n");
|
|
|
#endif
|
|
|
- }
|
|
|
- XFREE(buf);
|
|
|
- buf = NULL;
|
|
|
- fclose(f);
|
|
|
- f = NULL;
|
|
|
+ der_sequence_free(*list);
|
|
|
}
|
|
|
- if (buf != NULL) XFREE(buf);
|
|
|
- if (f != NULL) fclose(f);
|
|
|
- closedir(d);
|
|
|
+ return CRYPT_OK;
|
|
|
}
|
|
|
#endif
|
|
|
|
|
@@ -1620,6 +1567,9 @@ int der_test(void)
|
|
|
|
|
|
unsigned char utf8_buf[32];
|
|
|
wchar_t utf8_out[32];
|
|
|
+#ifdef LTC_TEST_READDIR
|
|
|
+ ltc_asn1_list *list;
|
|
|
+#endif
|
|
|
|
|
|
if (ltc_mp.name == NULL) return CRYPT_NOP;
|
|
|
|
|
@@ -1627,8 +1577,8 @@ int der_test(void)
|
|
|
|
|
|
der_Xcode_test();
|
|
|
|
|
|
-#if !((defined(_WIN32) || defined(_WIN32_WCE)) && !defined(__GNUC__))
|
|
|
- der_asn1_test();
|
|
|
+#ifdef LTC_TEST_READDIR
|
|
|
+ DO(test_process_dir("tests/asn1", &list, _der_decode_sequence_flexi, NULL, "DER ASN.1 special cases"));
|
|
|
#endif
|
|
|
|
|
|
der_custom_test();
|