X-Git-Url: http://wagner.pp.ru/gitweb/?a=blobdiff_plain;f=test_params.c;h=89bae3d43f1a966ee9aacc2781ad243b94f466aa;hb=4952acb810d5bca35ff514099a5c43bc13a06405;hp=f7d4b90f8fbb3989ea9b94ce4713f9e38bfb0207;hpb=ea0349deee971509f9afd5cafb3734485dec2ce6;p=openssl-gost%2Fengine.git diff --git a/test_params.c b/test_params.c index f7d4b90..89bae3d 100644 --- a/test_params.c +++ b/test_params.c @@ -39,9 +39,9 @@ #define cDBLUE "\033[0;34m" #define cNORM "\033[m" #define TEST_ASSERT(e) {if ((test = (e))) \ - printf(cRED " Test FAILED\n" cNORM); \ + printf(cRED " Test FAILED" cNORM "\n"); \ else \ - printf(cGREEN " Test passed\n" cNORM);} + printf(cGREEN " Test passed" cNORM "\n");} struct test_param { unsigned int param; /* NID of EC parameters */ @@ -873,20 +873,39 @@ static void hexdump(const void *ptr, size_t len) static void print_test_result(int err) { if (err == 1) - printf(cGREEN "correct\n" cNORM); + printf(cGREEN "correct" cNORM "\n"); else if (err == 0) - printf(cRED "incorrect\n" cNORM); + printf(cRED "incorrect" cNORM "\n"); else ERR_print_errors_fp(stderr); } +/* copy-paste from crypto/crmf/crmf_lib.c */ +static int X509_PUBKEY_cmp(X509_PUBKEY *a, X509_PUBKEY *b) +{ + X509_ALGOR *algA = NULL, *algB = NULL; + int res = 0; + + if (a == b) + return 0; + if (a == NULL || !X509_PUBKEY_get0_param(NULL, NULL, NULL, &algA, a) + || algA == NULL) + return -1; + if (b == NULL || !X509_PUBKEY_get0_param(NULL, NULL, NULL, &algB, b) + || algB == NULL) + return 1; + if ((res = X509_ALGOR_cmp(algA, algB)) != 0) + return res; + return !EVP_PKEY_cmp(X509_PUBKEY_get0(a), X509_PUBKEY_get0(b)); +} + static int test_cert(struct test_cert *tc) { int ret = 0, err; X509 *x; const unsigned char *p; - printf(cBLUE "Test %s (it):\n" cNORM, tc->name); + printf(cBLUE "Test %s (it): " cNORM, tc->name); p = tc->cert; T(x = d2i_X509(NULL, &p, tc->len)); @@ -914,6 +933,54 @@ static int test_cert(struct test_cert *tc) printf(" (curve %s)\n", OBJ_nid2sn(param_nid)); sk_ASN1_TYPE_pop_free(seq, ASN1_TYPE_free); + /* + * Conversion tests. + */ + /* Convert cert to DER and back. */ + BIO *bp; + T(bp = BIO_new(BIO_s_mem())); + T(i2d_X509_bio(bp, x)); + X509 *y = NULL; + T(d2i_X509_bio(bp, &y)); + err = X509_cmp(x, y); + printf(" d2i_X509_bio\t\t\t"); + print_test_result(!err); + ret |= err; + X509_free(y); + + /* Convert cert to PEM and back. */ + y = NULL; + T(PEM_write_bio_X509(bp, x)); + T(PEM_read_bio_X509(bp, &y, 0, NULL)); + err = X509_cmp(x, y); + printf(" PEM_read_bio_X509\t\t"); + print_test_result(!err); + ret |= err; + X509_free(y); + + /* Convert public key to PEM and back. */ + T(BIO_reset(bp)); + T(PEM_write_bio_X509_PUBKEY(bp, xk)); + X509_PUBKEY *tk = NULL; + T(PEM_read_bio_X509_PUBKEY(bp, &tk, NULL, NULL)); + err = X509_PUBKEY_cmp(xk, tk); + X509_PUBKEY_free(tk); + printf(" PEM_read_bio_X509_PUBKEY\t"); + print_test_result(!err); + ret |= err; + + /* Convert public key to DER and back. */ + T(BIO_reset(bp)); + T(i2d_X509_PUBKEY_bio(bp, xk)); + tk = NULL; + T(d2i_X509_PUBKEY_bio(bp, &tk)); + err = X509_PUBKEY_cmp(xk, tk); + X509_PUBKEY_free(tk); + printf(" d2i_X509_PUBKEY_bio\t\t"); + print_test_result(!err); + ret |= err; + BIO_free(bp); + /* * Verify */ @@ -983,7 +1050,7 @@ static int test_param(struct test_param *t) int hash_nid = 0; const char *sn = OBJ_nid2sn(t->param); - printf(cBLUE "Test %s (cp):\n" cNORM, sn); + printf(cBLUE "Test %s (cp):" cNORM "\n", sn); switch (t->len) { case 256 / 8: @@ -1093,13 +1160,7 @@ int main(int argc, char **argv) { int ret = 0; - setenv("OPENSSL_ENGINES", ENGINE_DIR, 0); OPENSSL_add_all_algorithms_conf(); - ERR_load_crypto_strings(); - ENGINE *eng; - T(eng = ENGINE_by_id("gost")); - T(ENGINE_init(eng)); - T(ENGINE_set_default(eng, ENGINE_METHOD_ALL)); struct test_param **tpp; for (tpp = test_params; *tpp; tpp++) @@ -1109,8 +1170,9 @@ int main(int argc, char **argv) for (tc = test_certs; tc->cert; tc++) ret |= test_cert(tc); - ENGINE_finish(eng); - ENGINE_free(eng); - + if (ret) + printf(cDRED "= Some tests FAILED!" cNORM "\n"); + else + printf(cDGREEN "= All tests passed!" cNORM "\n"); return ret; }