static int test_tbl_standard(void) { const ASN1_STRING_TABLE *tmp; int last_nid = -1; size_t i; for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++) { if (tmp->nid < last_nid) { last_nid = 0; break; } last_nid = tmp->nid; } if (TEST_int_ne(last_nid, 0)) { TEST_info("asn1 tbl_standard: Table order OK"); return 1; } TEST_info("asn1 tbl_standard: out of order"); for (tmp = tbl_standard, i = 0; i < OSSL_NELEM(tbl_standard); i++, tmp++) TEST_note("asn1 tbl_standard: Index %zu, NID %d, Name=%s", i, tmp->nid, OBJ_nid2ln(tmp->nid)); return 0; }
static int test_SU_stack(void) { STACK_OF(SU) *s = sk_SU_new_null(); SU v[10]; const int n = OSSL_NELEM(v); int i; int testresult = 0; /* allocate and push */ for (i = 0; i < n; i++) { if ((i & 1) == 0) v[i].n = i; else v[i].c = 'A' + i; if (!TEST_int_eq(sk_SU_num(s), i)) { TEST_info("SU stack size %d", i); goto end; } sk_SU_push(s, v + i); } if (!TEST_int_eq(sk_SU_num(s), n)) goto end; /* check the pointers are correct */ for (i = 0; i < n; i++) if (!TEST_ptr_eq(sk_SU_value(s, i), v + i)) { TEST_info("SU pointer check %d", i); goto end; } testresult = 1; end: sk_SU_free(s); return testresult; }
int setup_tests(void) { /* * On platforms where |time_t| is an unsigned integer, t will be a * positive number. * * We check if we're on a platform with a signed |time_t| with '!(t > 0)' * because some compilers are picky if you do 't < 0', or even 't <= 0' * if |t| is unsigned. */ time_t t = -1; /* * On some platforms, |time_t| is signed, but a negative value is an * error, and using it with gmtime() or localtime() generates a NULL. * If that is the case, we can't perform tests on negative values. */ struct tm *ptm = localtime(&t); ADD_ALL_TESTS(test_table_pos, OSSL_NELEM(tbl_testdata_pos)); if (!(t > 0) && ptm != NULL) { TEST_info("Adding negative-sign time_t tests"); ADD_ALL_TESTS(test_table_neg, OSSL_NELEM(tbl_testdata_neg)); } if (sizeof(time_t) > sizeof(uint32_t)) { TEST_info("Adding 64-bit time_t tests"); ADD_ALL_TESTS(test_table_pos_64bit, OSSL_NELEM(tbl_testdata_pos_64bit)); if (!(t > 0) && ptm != NULL) { TEST_info("Adding negative-sign 64-bit time_t tests"); ADD_ALL_TESTS(test_table_neg_64bit, OSSL_NELEM(tbl_testdata_neg_64bit)); } } ADD_ALL_TESTS(test_table_compare, OSSL_NELEM(tbl_compare_testdata)); return 1; }
/* * Create an SSL connection, but does not ready any post-handshake * NewSessionTicket messages. */ int create_bare_ssl_connection(SSL *serverssl, SSL *clientssl, int want) { int retc = -1, rets = -1, err, abortctr = 0; int clienterr = 0, servererr = 0; int isdtls = SSL_is_dtls(serverssl); do { err = SSL_ERROR_WANT_WRITE; while (!clienterr && retc <= 0 && err == SSL_ERROR_WANT_WRITE) { retc = SSL_connect(clientssl); if (retc <= 0) err = SSL_get_error(clientssl, retc); } if (!clienterr && retc <= 0 && err != SSL_ERROR_WANT_READ) { TEST_info("SSL_connect() failed %d, %d", retc, err); clienterr = 1; } if (want != SSL_ERROR_NONE && err == want) return 0; err = SSL_ERROR_WANT_WRITE; while (!servererr && rets <= 0 && err == SSL_ERROR_WANT_WRITE) { rets = SSL_accept(serverssl); if (rets <= 0) err = SSL_get_error(serverssl, rets); } if (!servererr && rets <= 0 && err != SSL_ERROR_WANT_READ && err != SSL_ERROR_WANT_X509_LOOKUP) { TEST_info("SSL_accept() failed %d, %d", rets, err); servererr = 1; } if (want != SSL_ERROR_NONE && err == want) return 0; if (clienterr && servererr) return 0; if (isdtls) { if (rets > 0 && retc <= 0) DTLSv1_handle_timeout(serverssl); if (retc > 0 && rets <= 0) DTLSv1_handle_timeout(clientssl); } if (++abortctr == MAXLOOPS) { TEST_info("No progress made"); return 0; } if (isdtls && abortctr <= 50 && (abortctr % 10) == 0) { /* * It looks like we're just spinning. Pause for a short period to * give the DTLS timer a chance to do something. We only do this for * the first few times to prevent hangs. */ ossl_sleep(50); } } while (retc <=0 || rets <= 0); return 1; }
static int check_alerts(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx) { if (!TEST_int_eq(result->client_alert_sent, result->client_alert_received)) { TEST_info("Client sent alert %s but server received %s.", print_alert(result->client_alert_sent), print_alert(result->client_alert_received)); /* * We can't bail here because the peer doesn't always get far enough * to process a received alert. Specifically, in protocol version * negotiation tests, we have the following scenario. * Client supports TLS v1.2 only; Server supports TLS v1.1. * Client proposes TLS v1.2; server responds with 1.1; * Client now sends a protocol alert, using TLS v1.2 in the header. * The server, however, rejects the alert because of version mismatch * in the record layer; therefore, the server appears to never * receive the alert. */ /* return 0; */ } if (!TEST_int_eq(result->server_alert_sent, result->server_alert_received)) { TEST_info("Server sent alert %s but client received %s.", print_alert(result->server_alert_sent), print_alert(result->server_alert_received)); /* return 0; */ } /* Tolerate an alert if one wasn't explicitly specified in the test. */ if (test_ctx->expected_client_alert /* * The info callback alert value is computed as * (s->s3->send_alert[0] << 8) | s->s3->send_alert[1] * where the low byte is the alert code and the high byte is other stuff. */ && (result->client_alert_sent & 0xff) != test_ctx->expected_client_alert) { TEST_error("ClientAlert mismatch: expected %s, got %s.", print_alert(test_ctx->expected_client_alert), print_alert(result->client_alert_sent)); return 0; } if (test_ctx->expected_server_alert && (result->server_alert_sent & 0xff) != test_ctx->expected_server_alert) { TEST_error("ServerAlert mismatch: expected %s, got %s.", print_alert(test_ctx->expected_server_alert), print_alert(result->server_alert_sent)); return 0; } if (!TEST_int_le(result->client_num_fatal_alerts_sent, 1)) return 0; if (!TEST_int_le(result->server_num_fatal_alerts_sent, 1)) return 0; return 1; }
int create_ssl_connection(SSL *serverssl, SSL *clientssl, int want) { int retc = -1, rets = -1, err, abortctr = 0; int clienterr = 0, servererr = 0; unsigned char buf; size_t readbytes; do { err = SSL_ERROR_WANT_WRITE; while (!clienterr && retc <= 0 && err == SSL_ERROR_WANT_WRITE) { retc = SSL_connect(clientssl); if (retc <= 0) err = SSL_get_error(clientssl, retc); } if (!clienterr && retc <= 0 && err != SSL_ERROR_WANT_READ) { TEST_info("SSL_connect() failed %d, %d", retc, err); clienterr = 1; } if (want != SSL_ERROR_NONE && err == want) return 0; err = SSL_ERROR_WANT_WRITE; while (!servererr && rets <= 0 && err == SSL_ERROR_WANT_WRITE) { rets = SSL_accept(serverssl); if (rets <= 0) err = SSL_get_error(serverssl, rets); } if (!servererr && rets <= 0 && err != SSL_ERROR_WANT_READ) { TEST_info("SSL_accept() failed %d, %d", rets, err); servererr = 1; } if (want != SSL_ERROR_NONE && err == want) return 0; if (clienterr && servererr) return 0; if (++abortctr == MAXLOOPS) { TEST_info("No progress made"); return 0; } } while (retc <=0 || rets <= 0); /* * We attempt to read some data on the client side which we expect to fail. * This will ensure we have received the NewSessionTicket in TLSv1.3 where * appropriate. */ if (SSL_read_ex(clientssl, &buf, sizeof(buf), &readbytes) > 0) { if (!TEST_ulong_eq(readbytes, 0)) return 0; } else if (!TEST_int_eq(SSL_get_error(clientssl, 0), SSL_ERROR_WANT_READ)) { return 0; } return 1; }
static int test_default_cipherlist(SSL_CTX *ctx) { STACK_OF(SSL_CIPHER) *ciphers = NULL; SSL *ssl = NULL; int i, ret = 0, num_expected_ciphers, num_ciphers; uint32_t expected_cipher_id, cipher_id; if (ctx == NULL) return 0; if (!TEST_ptr(ssl = SSL_new(ctx)) || !TEST_ptr(ciphers = SSL_get1_supported_ciphers(ssl))) goto err; num_expected_ciphers = OSSL_NELEM(default_ciphers_in_order); num_ciphers = sk_SSL_CIPHER_num(ciphers); if (!TEST_int_eq(num_ciphers, num_expected_ciphers)) goto err; for (i = 0; i < num_ciphers; i++) { expected_cipher_id = default_ciphers_in_order[i]; cipher_id = SSL_CIPHER_get_id(sk_SSL_CIPHER_value(ciphers, i)); if (!TEST_int_eq(cipher_id, expected_cipher_id)) { TEST_info("Wrong cipher at position %d", i); goto err; } } ret = 1; err: sk_SSL_CIPHER_free(ciphers); SSL_free(ssl); return ret; }
static int dofptest(int test, double val, const char *width, int prec) { static const char *fspecs[] = { "e", "f", "g", "E", "G" }; char format[80], result[80]; int ret = 1, i; for (i = 0; i < nelem(fspecs); i++) { const char *fspec = fspecs[i]; if (prec >= 0) BIO_snprintf(format, sizeof(format), "%%%s.%d%s", width, prec, fspec); else BIO_snprintf(format, sizeof(format), "%%%s%s", width, fspec); BIO_snprintf(result, sizeof(result), format, val); if (justprint) { if (i == 0) printf(" /* %d */ { \"%s\"", test, result); else printf(", \"%s\"", result); } else if (!TEST_str_eq(fpexpected[test][i], result)) { TEST_info("test %d format=|%s| exp=|%s|, ret=|%s|", test, format, fpexpected[test][i], result); ret = 0; } } if (justprint) printf(" },\n"); return ret; }
void register_tests(void) { if (sizeof(time_t) < 8) TEST_info("Skipping; time_t is less than 64-bits"); else ADD_ALL_TESTS_NOSUBTEST(test_gmtime, 1000000); }
static int test_record(SSL3_RECORD *rec, RECORD_DATA *recd, int enc) { int ret = 0; unsigned char *refd; size_t refdatalen; if (enc) refd = multihexstr2buf(recd->ciphertext, &refdatalen); else refd = multihexstr2buf(recd->plaintext, &refdatalen); if (!TEST_ptr(refd)) { TEST_info("Failed to get reference data"); goto err; } if (!TEST_mem_eq(rec->data, rec->length, refd, refdatalen)) goto err; ret = 1; err: OPENSSL_free(refd); return ret; }
static int execute_cts128(const CTS128_FIXTURE *fixture, int num) { const unsigned char *test_iv = cts128_test_iv; size_t test_iv_len = sizeof(cts128_test_iv); const unsigned char *orig_vector = aes_cts128_vectors[num].data; size_t len = aes_cts128_vectors[num].size; const unsigned char *test_input = cts128_test_input; const AES_KEY *encrypt_key_schedule = cts128_encrypt_key_schedule(); const AES_KEY *decrypt_key_schedule = cts128_decrypt_key_schedule(); unsigned char iv[16]; /* The largest test inputs are = 64 bytes. */ unsigned char cleartext[64], ciphertext[64], vector[64]; size_t tail, size; TEST_info("%s_vector_%lu", fixture->case_name, (unsigned long)len); tail = fixture->last_blocks_correction(orig_vector, vector, len); /* test block-based encryption */ memcpy(iv, test_iv, test_iv_len); if (!TEST_size_t_eq(fixture->encrypt_block(test_input, ciphertext, len, encrypt_key_schedule, iv, (block128_f)AES_encrypt), len) || !TEST_mem_eq(ciphertext, len, vector, len) || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv))) return 0; /* test block-based decryption */ memcpy(iv, test_iv, test_iv_len); size = fixture->decrypt_block(ciphertext, cleartext, len, decrypt_key_schedule, iv, (block128_f)AES_decrypt); if (!TEST_true(len == size || len + 16 == size) || !TEST_mem_eq(cleartext, len, test_input, len) || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv))) return 0; /* test streamed encryption */ memcpy(iv, test_iv, test_iv_len); if (!TEST_size_t_eq(fixture->encrypt_stream(test_input, ciphertext, len, encrypt_key_schedule, iv, (cbc128_f) AES_cbc_encrypt), len) || !TEST_mem_eq(ciphertext, len, vector, len) || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv))) return 0; /* test streamed decryption */ memcpy(iv, test_iv, test_iv_len); if (!TEST_size_t_eq(fixture->decrypt_stream(ciphertext, cleartext, len, decrypt_key_schedule, iv, (cbc128_f)AES_cbc_encrypt), len) || !TEST_mem_eq(cleartext, len, test_input, len) || !TEST_mem_eq(iv, sizeof(iv), vector + len - tail, sizeof(iv))) return 0; return 1; }
static int test_func(void) { if (!TEST_int_eq(SSL_CTX_get_min_proto_version(ctx), TLS1_2_VERSION) && !TEST_int_eq(SSL_CTX_get_max_proto_version(ctx), TLS1_2_VERSION)) { TEST_info("min/max version setting incorrect"); return 0; } return 1; }
static int check_result(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx) { if (!TEST_int_eq(result->result, test_ctx->expected_result)) { TEST_info("ExpectedResult mismatch: expected %s, got %s.", ssl_test_result_name(test_ctx->expected_result), ssl_test_result_name(result->result)); return 0; } return 1; }
static int check_servername(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx) { if (!TEST_int_eq(result->servername, test_ctx->expected_servername)) { TEST_info("Client ServerName mismatch, expected %s, got %s.", ssl_servername_name(test_ctx->expected_servername), ssl_servername_name(result->servername)); return 0; } return 1; }
static int test_offset(int idx) { ASN1_TIME at; const TESTDATA *testdata = &tests[idx]; int ret = -2; int day, sec; at.data = (unsigned char*)testdata->data; at.length = strlen(testdata->data); at.type = testdata->type; if (!TEST_true(ASN1_TIME_diff(&day, &sec, &the_asn1_time, &at))) { TEST_info("ASN1_TIME_diff() failed for %s\n", at.data); return 0; } if (day > 0) ret = 1; else if (day < 0) ret = -1; else if (sec > 0) ret = 1; else if (sec < 0) ret = -1; else ret = 0; if (!TEST_int_eq(testdata->time_result, ret)) { TEST_info("ASN1_TIME_diff() test failed for %s day=%d sec=%d\n", at.data, day, sec); return 0; } if (at.type == V_ASN1_UTCTIME) ret = ASN1_UTCTIME_cmp_time_t(&at, the_time); else return 1; /* no other cmp_time_t() functions available, yet */ if (!TEST_int_eq(testdata->time_result, ret)) { TEST_info("ASN1_UTCTIME_cmp_time_t() test failed for %s\n", at.data); return 0; } return 1; }
static int check_protocol(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx) { if (!TEST_int_eq(result->client_protocol, result->server_protocol)) { TEST_info("Client has protocol %s but server has %s.", ssl_protocol_name(result->client_protocol), ssl_protocol_name(result->server_protocol)); return 0; } if (test_ctx->expected_protocol) { if (!TEST_int_eq(result->client_protocol, test_ctx->expected_protocol)) { TEST_info("Protocol mismatch: expected %s, got %s.\n", ssl_protocol_name(test_ctx->expected_protocol), ssl_protocol_name(result->client_protocol)); return 0; } } return 1; }
static int cast_test_vector(int z) { int testresult = 1; CAST_KEY key; unsigned char out[80]; CAST_set_key(&key, k_len[z], k); CAST_ecb_encrypt(in, out, &key, CAST_ENCRYPT); if (!TEST_mem_eq(out, sizeof(c[z]), c[z], sizeof(c[z]))) { TEST_info("CAST_ENCRYPT iteration %d failed (len=%d)", z, k_len[z]); testresult = 0; } CAST_ecb_encrypt(out, out, &key, CAST_DECRYPT); if (!TEST_mem_eq(out, sizeof(in), in, sizeof(in))) { TEST_info("CAST_DECRYPT iteration %d failed (len=%d)", z, k_len[z]); testresult = 0; } return testresult; }
int setup_tests(void) { time_t t = -1; struct tm *ptm = localtime(&t); ADD_ALL_TESTS(test_table_pos, OSSL_NELEM(tbl_testdata_pos)); if (ptm != NULL) { TEST_info("Adding negative-sign time_t tests"); ADD_ALL_TESTS(test_table_neg, OSSL_NELEM(tbl_testdata_neg)); } if (sizeof(time_t) > sizeof(uint32_t)) { TEST_info("Adding 64-bit time_t tests"); ADD_ALL_TESTS(test_table_pos_64bit, OSSL_NELEM(tbl_testdata_pos_64bit)); if (ptm != NULL) { TEST_info("Adding negative-sign 64-bit time_t tests"); ADD_ALL_TESTS(test_table_neg_64bit, OSSL_NELEM(tbl_testdata_neg_64bit)); } } return 1; }
static int check_session_id(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx) { if (test_ctx->session_id_expected == SSL_TEST_SESSION_ID_IGNORE) return 1; if (!TEST_int_eq(result->session_id, test_ctx->session_id_expected)) { TEST_info("Client SessionIdExpected mismatch, expected %s, got %s\n.", ssl_session_id_name(test_ctx->session_id_expected), ssl_session_id_name(result->session_id)); return 0; } return 1; }
static int check_session_ticket(HANDSHAKE_RESULT *result, SSL_TEST_CTX *test_ctx) { if (test_ctx->session_ticket_expected == SSL_TEST_SESSION_TICKET_IGNORE) return 1; if (!TEST_int_eq(result->session_ticket, test_ctx->session_ticket_expected)) { TEST_info("Client SessionTicketExpected mismatch, expected %s, got %s.", ssl_session_ticket_name(test_ctx->session_ticket_expected), ssl_session_ticket_name(result->session_ticket)); return 0; } return 1; }
static int test_string_tbl(void) { const ASN1_STRING_TABLE *tmp = NULL; int nid = 12345678, nid2 = 87654321, rv = 0, ret = 0; tmp = ASN1_STRING_TABLE_get(nid); if (!TEST_ptr_null(tmp)) { TEST_info("asn1 string table: ASN1_STRING_TABLE_get non-exist nid"); goto out; } ret = ASN1_STRING_TABLE_add(nid, -1, -1, MBSTRING_ASC, 0); if (!TEST_true(ret)) { TEST_info("asn1 string table: add NID(%d) failed", nid); goto out; } ret = ASN1_STRING_TABLE_add(nid2, -1, -1, MBSTRING_ASC, 0); if (!TEST_true(ret)) { TEST_info("asn1 string table: add NID(%d) failed", nid2); goto out; } tmp = ASN1_STRING_TABLE_get(nid); if (!TEST_ptr(tmp)) { TEST_info("asn1 string table: get NID(%d) failed", nid); goto out; } tmp = ASN1_STRING_TABLE_get(nid2); if (!TEST_ptr(tmp)) { TEST_info("asn1 string table: get NID(%d) failed", nid2); goto out; } ASN1_STRING_TABLE_cleanup(); /* check if all newly added NIDs are cleaned up */ tmp = ASN1_STRING_TABLE_get(nid); if (!TEST_ptr_null(tmp)) { TEST_info("asn1 string table: get NID(%d) failed", nid); goto out; } tmp = ASN1_STRING_TABLE_get(nid2); if (!TEST_ptr_null(tmp)) { TEST_info("asn1 string table: get NID(%d) failed", nid2); goto out; } rv = 1; out: return rv; }
static void showbn(const char *name, const BIGNUM *bn) { BIO *b; const char *text; if (!TEST_ptr(b = BIO_new(BIO_s_mem()))) return; BIO_write(b, name, strlen(name)); BIO_write(b, " = ", 3); BN_print(b, bn); BIO_write(b, "\0", 1); BIO_get_mem_data(b, &text); TEST_info("%s", text); BIO_free(b); }
int setup_tests(void) { #ifndef OPENSSL_NO_ENGINE if ((e = ENGINE_by_id("afalg")) == NULL) { /* Probably a platform env issue, not a test failure. */ TEST_info("Can't load AFALG engine"); } else { # ifndef OPENSSL_NO_AFALGENG ADD_TEST(test_afalg_aes_128_cbc); # endif } #endif return 1; }
static int test_provider(OSSL_PROVIDER *prov, const char *expected_greeting) { const char *greeting = NULL; int ret = 0; ret = TEST_true(ossl_provider_activate(prov)) && TEST_true(ossl_provider_get_params(prov, greeting_request)) && TEST_ptr(greeting = greeting_request[0].data) && TEST_size_t_gt(greeting_request[0].data_size, 0) && TEST_str_eq(greeting, expected_greeting); TEST_info("Got this greeting: %s\n", greeting); ossl_provider_free(prov); return ret; }
static int call_run_cert(int i) { int failed = 0; const struct set_name_fn *pfn = &name_fns[i]; X509 *crt; const char *const *pname; TEST_info("%s", pfn->name); for (pname = names; *pname != NULL; pname++) { if (!TEST_ptr(crt = make_cert()) || !TEST_true(pfn->fn(crt, *pname)) || !run_cert(crt, *pname, pfn)) failed = 1; X509_free(crt); } return failed == 0; }
static int test_x509_cmp_time(int idx) { ASN1_TIME t; int result; memset(&t, 0, sizeof(t)); t.type = x509_cmp_tests[idx].type; t.data = (unsigned char*)(x509_cmp_tests[idx].data); t.length = strlen(x509_cmp_tests[idx].data); result = X509_cmp_time(&t, &x509_cmp_tests[idx].cmp_time); if (!TEST_int_eq(result, x509_cmp_tests[idx].expected)) { TEST_info("test_x509_cmp_time(%d) failed: expected %d, got %d\n", idx, x509_cmp_tests[idx].expected, result); return 0; } return 1; }
static int test_standard_methods(void) { const EVP_PKEY_ASN1_METHOD **tmp; int last_pkey_id = -1; size_t i; int ok = 1; for (tmp = standard_methods, i = 0; i < OSSL_NELEM(standard_methods); i++, tmp++) { if ((*tmp)->pkey_id < last_pkey_id) { last_pkey_id = 0; break; } last_pkey_id = (*tmp)->pkey_id; /* * One of the following must be true: * * pem_str == NULL AND ASN1_PKEY_ALIAS is set * pem_str != NULL AND ASN1_PKEY_ALIAS is clear * * Anything else is an error and may lead to a corrupt ASN1 method table */ if (!TEST_true(((*tmp)->pem_str == NULL && ((*tmp)->pkey_flags & ASN1_PKEY_ALIAS) != 0) || ((*tmp)->pem_str != NULL && ((*tmp)->pkey_flags & ASN1_PKEY_ALIAS) == 0))) { TEST_note("asn1 standard methods: Index %zu, pkey ID %d, Name=%s", i, (*tmp)->pkey_id, OBJ_nid2sn((*tmp)->pkey_id)); ok = 0; } } if (TEST_int_ne(last_pkey_id, 0)) { TEST_info("asn1 standard methods: Table order OK"); return ok; } TEST_note("asn1 standard methods: out of order"); for (tmp = standard_methods, i = 0; i < OSSL_NELEM(standard_methods); i++, tmp++) TEST_note("asn1 standard methods: Index %zu, pkey ID %d, Name=%s", i, (*tmp)->pkey_id, OBJ_nid2sn((*tmp)->pkey_id)); return 0; }
static int test_mdc2(int idx) { unsigned char md[MDC2_DIGEST_LENGTH]; MDC2_CTX c; const TESTDATA testdata = tests[idx]; MDC2_Init(&c); MDC2_Update(&c, (const unsigned char *)testdata.input, strlen(testdata.input)); MDC2_Final(&(md[0]), &c); if (!TEST_mem_eq(testdata.expected, MDC2_DIGEST_LENGTH, md, MDC2_DIGEST_LENGTH)) { TEST_info("mdc2 test %d: unexpected output", idx); return 0; } return 1; }
/* * Test wrapping old style PEM password callback in a UI method through the * use of UI utility functions */ static int test_old(void) { UI_METHOD *ui_method = NULL; UI *ui = NULL; char defpass[] = "password"; char pass[16]; int ok = 0; if (!TEST_ptr(ui_method = UI_UTIL_wrap_read_pem_callback( test_pem_password_cb, 0)) || !TEST_ptr(ui = UI_new_method(ui_method))) goto err; /* The wrapper passes the UI userdata as the callback userdata param */ UI_add_user_data(ui, defpass); if (!UI_add_input_string(ui, "prompt", UI_INPUT_FLAG_DEFAULT_PWD, pass, 0, sizeof(pass) - 1)) goto err; switch (UI_process(ui)) { case -2: TEST_info("test_old: UI process interrupted or cancelled"); /* fall through */ case -1: goto err; default: break; } if (TEST_str_eq(pass, defpass)) ok = 1; err: UI_free(ui); UI_destroy_method(ui_method); return ok; }
int test_main(int argc, char **argv) { int result = 0; if (argc != 2) { TEST_info("Missing file argument"); goto end; } if (!TEST_ptr(conf = NCONF_new(NULL)) /* argv[1] should point to test/ssl_test_ctx_test.conf */ || !TEST_int_gt(NCONF_load(conf, argv[1], NULL), 0)) goto end; ADD_TEST(test_empty_configuration); ADD_TEST(test_good_configuration); ADD_ALL_TESTS(test_bad_configuration, OSSL_NELEM(bad_configurations)); result = run_tests(argv[0]); end: NCONF_free(conf); return result; }