]> www.wagner.pp.ru Git - openssl-gost/engine.git/blobdiff - test_curves.c
tcl_tests: ca.try: Ignore openssl crl exit status for 'corrupted CRL' test
[openssl-gost/engine.git] / test_curves.c
index 7c57c34ae9e496e32563cc520d72df9c29ba6268..865ee8d2d4e3c2bb0bc3eb24f66229c04917e83a 100644 (file)
@@ -5,7 +5,11 @@
  * See https://www.openssl.org/source/license.html for details
  */
 
-#include "e_gost_err.h"
+#ifdef _MSC_VER
+# pragma warning(push, 3)
+# include <openssl/applink.c>
+# pragma warning(pop)
+#endif
 #include "gost_lcl.h"
 #include <openssl/evp.h>
 #include <openssl/rand.h>
 #include <openssl/bn.h>
 #include <string.h>
 
-#define T(e) ({ if (!(e)) { \
-               ERR_print_errors_fp(stderr); \
-               OpenSSLDie(__FILE__, __LINE__, #e); \
-           } \
-        })
+#define T(e) \
+    if (!(e)) { \
+        ERR_print_errors_fp(stderr); \
+        OpenSSLDie(__FILE__, __LINE__, #e); \
+    }
 
 #define cRED   "\033[1;31m"
 #define cDRED  "\033[0;31m"
 #define cBLUE  "\033[1;34m"
 #define cDBLUE "\033[0;34m"
 #define cNORM  "\033[m"
-#define TEST_ASSERT(e) {if ((test = (e))) \
-                printf(cRED "  Test FAILED\n" cNORM); \
-            else \
-                printf(cGREEN "  Test passed\n" cNORM);}
+#define TEST_ASSERT(e) { \
+       test = e; \
+       if (test) \
+               printf(cRED "  Test FAILED" cNORM "\n"); \
+       else \
+               printf(cGREEN "  Test passed" cNORM "\n"); \
+}
 
 struct test_curve {
     int nid;
@@ -90,7 +97,7 @@ static int parameter_test(struct test_curve *tc)
     printf("\n");
 
     if (!OBJ_nid2obj(nid)) {
-       printf(cRED "NID %d not found\n" cNORM, nid);
+       printf(cRED "NID %d not found" cNORM "\n", nid);
        return 1;
     }
 
@@ -106,7 +113,7 @@ static int parameter_test(struct test_curve *tc)
     EC_KEY *ec;
     T(ec = EC_KEY_new());
     if (!fill_GOST_EC_params(ec, nid)) {
-       printf(cRED "fill_GOST_EC_params FAIL\n" cNORM);
+       printf(cRED "fill_GOST_EC_params FAIL" cNORM "\n");
        ERR_print_errors_fp(stderr);
        return 1;
     }
@@ -168,6 +175,15 @@ static int parameter_test(struct test_curve *tc)
     BN_mod_add(xxx, xxx, ax, p, ctx);
     BN_mod_add(xxx, xxx, b, p, ctx);
     T(BN_cmp(yy, xxx) == 0);
+    BN_free(yy);
+    BN_free(r);
+    BN_free(xxx);
+    BN_free(ax);
+    BN_free(p);
+    BN_free(a);
+    BN_free(b);
+    BN_free(x);
+    BN_free(y);
 
     /* Check order */
     const BIGNUM *order;
@@ -180,6 +196,7 @@ static int parameter_test(struct test_curve *tc)
     T(EC_POINT_mul(group, point, NULL, generator, order, ctx));
     /* generator * order is the point at infinity? */
     T(EC_POINT_is_at_infinity(group, point) == 1);
+    EC_POINT_free(point);
 
     /* Check if order is cyclic */
     BIGNUM *k1 = BN_new();
@@ -191,12 +208,19 @@ static int parameter_test(struct test_curve *tc)
     BN_add(k2, k2, order);
     T(EC_POINT_mul(group, p1, NULL, generator, k1, ctx));
     T(EC_POINT_mul(group, p2, NULL, generator, k2, ctx));
+    T(EC_POINT_cmp(group, p1, p2, ctx) == 0);
+    BN_free(k1);
+    BN_free(k2);
+    EC_POINT_free(p1);
+    EC_POINT_free(p2);
 
     /* Cofactor is 1 or 4 */
     const BIGNUM *c;
     T(c = EC_GROUP_get0_cofactor(group));
     T(BN_is_word(c, 1) || BN_is_word(c, 4));
 
+    BN_CTX_free(ctx);
+    EC_KEY_free(ec);
     TEST_ASSERT(0);
     return test;
 }
@@ -211,8 +235,8 @@ int main(int argc, char **argv)
     }
 
     if (ret)
-       printf(cDRED "= Some tests FAILED!\n" cNORM);
+       printf(cDRED "= Some tests FAILED!" cNORM "\n");
     else
-       printf(cDGREEN "= All tests passed!\n" cNORM);
+       printf(cDGREEN "= All tests passed!" cNORM "\n");
     return ret;
 }