* 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;
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;
}
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;
}
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;
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();
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;
}
}
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;
}