Import OpenSSL 1.1.1l
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 1995-2019 The OpenSSL Project Authors. All Rights Reserved.
|
||||
* Copyright 1995-2021 The OpenSSL Project Authors. All Rights Reserved.
|
||||
*
|
||||
* Licensed under the OpenSSL license (the "License"). You may not use
|
||||
* this file except in compliance with the License. You can obtain a copy
|
||||
@@ -305,6 +305,75 @@ static int test_div_recip(void)
|
||||
return st;
|
||||
}
|
||||
|
||||
static struct {
|
||||
int n, divisor, result, remainder;
|
||||
} signed_mod_tests[] = {
|
||||
{ 10, 3, 3, 1 },
|
||||
{ -10, 3, -3, -1 },
|
||||
{ 10, -3, -3, 1 },
|
||||
{ -10, -3, 3, -1 },
|
||||
};
|
||||
|
||||
static BIGNUM *set_signed_bn(int value)
|
||||
{
|
||||
BIGNUM *bn = BN_new();
|
||||
|
||||
if (bn == NULL)
|
||||
return NULL;
|
||||
if (!BN_set_word(bn, value < 0 ? -value : value)) {
|
||||
BN_free(bn);
|
||||
return NULL;
|
||||
}
|
||||
BN_set_negative(bn, value < 0);
|
||||
return bn;
|
||||
}
|
||||
|
||||
static int test_signed_mod_replace_ab(int n)
|
||||
{
|
||||
BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL;
|
||||
int st = 0;
|
||||
|
||||
if (!TEST_ptr(a = set_signed_bn(signed_mod_tests[n].n))
|
||||
|| !TEST_ptr(b = set_signed_bn(signed_mod_tests[n].divisor))
|
||||
|| !TEST_ptr(c = set_signed_bn(signed_mod_tests[n].result))
|
||||
|| !TEST_ptr(d = set_signed_bn(signed_mod_tests[n].remainder)))
|
||||
goto err;
|
||||
|
||||
if (TEST_true(BN_div(a, b, a, b, ctx))
|
||||
&& TEST_BN_eq(a, c)
|
||||
&& TEST_BN_eq(b, d))
|
||||
st = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
return st;
|
||||
}
|
||||
|
||||
static int test_signed_mod_replace_ba(int n)
|
||||
{
|
||||
BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL;
|
||||
int st = 0;
|
||||
|
||||
if (!TEST_ptr(a = set_signed_bn(signed_mod_tests[n].n))
|
||||
|| !TEST_ptr(b = set_signed_bn(signed_mod_tests[n].divisor))
|
||||
|| !TEST_ptr(c = set_signed_bn(signed_mod_tests[n].result))
|
||||
|| !TEST_ptr(d = set_signed_bn(signed_mod_tests[n].remainder)))
|
||||
goto err;
|
||||
|
||||
if (TEST_true(BN_div(b, a, a, b, ctx))
|
||||
&& TEST_BN_eq(b, c)
|
||||
&& TEST_BN_eq(a, d))
|
||||
st = 1;
|
||||
err:
|
||||
BN_free(a);
|
||||
BN_free(b);
|
||||
BN_free(c);
|
||||
BN_free(d);
|
||||
return st;
|
||||
}
|
||||
|
||||
static int test_mod(void)
|
||||
{
|
||||
BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL, *e = NULL;
|
||||
@@ -326,8 +395,10 @@ static int test_mod(void)
|
||||
BN_set_negative(b, rand_neg());
|
||||
if (!(TEST_true(BN_mod(c, a, b, ctx))
|
||||
&& TEST_true(BN_div(d, e, a, b, ctx))
|
||||
&& TEST_true(BN_sub(e, e, c))
|
||||
&& TEST_BN_eq_zero(e)))
|
||||
&& TEST_BN_eq(e, c)
|
||||
&& TEST_true(BN_mul(c, d, b, ctx))
|
||||
&& TEST_true(BN_add(d, c, e))
|
||||
&& TEST_BN_eq(d, a)))
|
||||
goto err;
|
||||
}
|
||||
st = 1;
|
||||
@@ -2759,6 +2830,8 @@ int setup_tests(void)
|
||||
if (n == 0) {
|
||||
ADD_TEST(test_sub);
|
||||
ADD_TEST(test_div_recip);
|
||||
ADD_ALL_TESTS(test_signed_mod_replace_ab, OSSL_NELEM(signed_mod_tests));
|
||||
ADD_ALL_TESTS(test_signed_mod_replace_ba, OSSL_NELEM(signed_mod_tests));
|
||||
ADD_TEST(test_mod);
|
||||
ADD_TEST(test_modexp_mont5);
|
||||
ADD_TEST(test_kronecker);
|
||||
|
||||
Reference in New Issue
Block a user