Commit ae269dd8 authored by Rich Salz's avatar Rich Salz
Browse files

Use common STANZA for bn and exp tests



Standardize file:line messages
Reduce buff size; move to end of STANZA
Add some Title entries (with blank line after)
Add Title to some BN test files.

Reviewed-by: default avatarAndy Polyakov <appro@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/3608)
parent 71dd3b64
Loading
Loading
Loading
Loading
+7 −8
Original line number Diff line number Diff line
@@ -5,12 +5,11 @@
# in the file LICENSE in the source distribution or at
# https://www.openssl.org/source/license.html

# Modulus tests.

# ModMul tests.
#
# These test vectors satisfy A * B = ModMul (mod M) and 0 <= ModMul < M.

Title = ModMul tests


ModMul = ae2ca2ce7addaee2e2b7752e286b2bb6a58b51cfbed5c924f00398e59ec36fe6341cd83da43a33a12410f45f6228079c4aeb3912be87e2e81fa1799151bfa0fea29873097475b2c3efa312145d0bf7e51b2a7c9bc961a4f4dcf0c883ff90b919b87c21099fba40257645be31f95a3a277
A = 6b18497fed9befdf22a01d988d34213f6687d8a96e86c188dea4172e7c6095a0d18d3c86c0f5a1af9c6e3aaeb6baac2a510930b3ed06ec78ec2e12b
B = 1a058d99397db0d209f01212dd4023ae01b15da04fe62d1f76f21622b2695558c67d706c535ca7f19b36f8ef2d508ffd6cf6fcf25e5
@@ -2012,10 +2011,10 @@ B = 8bdfa8fe5ef3b2ad02bc63c4d
M = 84daecf412b8c50ad6dfdb546c3eb783dcc6f32003eda914bb


# ModExp tests.
#
# These test vectors satisfy A ^ E = ModExp (mod M) and 0 <= ModExp < M.

Title = ModExp tests

# Regression test for carry propagation bug in sqr8x_reduction.
ModExp = 19324b647d967d644b3219
A = 050505050505
@@ -2476,11 +2475,11 @@ E = d7e6df5d755284929b986cd9b61c9c2c8843f24c711fbdbae1a468edcae15940094372557072
M = e4e784aa1fa88625a43ba0185a153a929663920be7fe674a4d33c943d3b898cff051482e7050a070cede53be5e89f31515772c7aea637576f99f82708f89d9e244f6ad3a24a02cbe5c0ff7bcf2dad5491f53db7c3f2698a7c41b44f086652f17bb05fe4c5c0a92433c34086b49d7e1825b28bab6c5a9bd0bc95b53d659afa0d7


# ModSqrt tests.
#
# These test vectors satisfy (ModSqrt * ModSqrt) mod P = A mod P with P a prime.
# ModSqrt is in [0, (P-1)/2].

Title = ModSqrt

ModSqrt = 1
A = 1
P = 2
+4 −4
Original line number Diff line number Diff line
@@ -5,10 +5,10 @@
# in the file LICENSE in the source distribution or at
# https://www.openssl.org/source/license.html

# Square tests.
#
# These test vectors satisfy A^2 = Square.

Title = Square tests.

# Regression test for a BN_sqr overflow bug.
Square = 4000000000000000800000000000000240000000000000000000000000000001fffffffffffffff8000000000000000400000000000000000000000000000000
A = 80000000000000008000000000000001fffffffffffffffe0000000000000000
@@ -318,10 +318,10 @@ Square = eea8028b26e0df090504d54da714a6f5f2695202e53cff479c78aedd47a8dc676243ec5
A = -3dcb44be1e54c5a5d7db48055ca9afa1ebe2ae648aa6e16ac497502a7deee09ffa124720fad0ab163ce8b3ea6a90f110ea52b67dbc424d0cf1e8c9726dfd9e45bebcefaa5cd5706edeed27896525f31c6bbea3d67ee97badefabf3e2532470b66e3ae3100f66ddf50cf02fc3a8e3f44c304251d3b6a7ca3a6e4bd5d16a41bd97a4


# Product tests.
#
# These test vectors satisfy A * B = Product.

Title = Product tests

Product = 5befab3320f8f90542f3120235abd926aac3805a19e343f690
A = b057af553afb120db6b7764f8
B = 857734c4c27a1d17f7cf59dee
+6 −6
Original line number Diff line number Diff line
@@ -5,10 +5,10 @@
# in the file LICENSE in the source distribution or at
# https://www.openssl.org/source/license.html

# LShift1 tests.
#
# These test vectors satisfy A * 2 = LShift1

Title = Lshift1 tests

LShift1 = 0
A = 0

@@ -1213,10 +1213,10 @@ LShift1 = -ab4e80e4b56556d99108eb3cb35f17d1ae83da33b4138619070000000000000000000
A = -55a740725ab2ab6cc884759e59af8be8d741ed19da09c30c838000000000000000000000000


# LShift tests
#
# These test vectors satisfy A * 2^N = LShift.

Title = LShift tests

LShift = 18c9e860855d594dcb06d00b7d1933608ba906d85fa2d92c9e0
A = c64f43042aeaca6e5836805be8c99b045d4836c2fd16c964f0
N = 1
@@ -2018,10 +2018,10 @@ A = e8e7c5ae65d7333de82bcbfdd7cea60ffb11e600aa3088ec8e
N = 64


# RShift tests
#
# These test vectors satisfy A / 2^N = RShift, rounding towards zero.

Title = RShift tests

Rshift = 0
A = -1
N = 1
+21 −110
Original line number Diff line number Diff line
@@ -35,26 +35,12 @@ BIGNUM *bn_expand2(BIGNUM *b, int words);
BIGNUM *bn_expand2(BIGNUM *b, int words) { return NULL; }
#include "../crypto/bn/bn_lcl.h"

#define MAXPAIRS        20

/*
 * Things in boring, not in openssl.  TODO we should add them.
 */
#define HAVE_BN_PADDED 0
#define HAVE_BN_SQRT 0

typedef struct pair_st {
    char *key;
    char *value;
} PAIR;

typedef struct stanza_st {
    int curr;                           /* Current line in file */
    int start;                          /* Line where test starts */
    int numpairs;
    PAIR pairs[MAXPAIRS];
} STANZA;

typedef struct filetest_st {
    const char *name;
    int (*func)(STANZA *s);
@@ -68,7 +54,6 @@ typedef struct mpitest_st {

static const int NUM0 = 100;           /* number of tests */
static const int NUM1 = 50;            /* additional tests for some functions */
static BIO *fp;
static BN_CTX *ctx;

/*
@@ -113,7 +98,7 @@ static BIGNUM *getBN(STANZA *s, const char *attribute)
    BIGNUM *ret = NULL;

    if ((hex = findattr(s, attribute)) == NULL) {
        TEST_error("Can't find %s in test at line %d", attribute, s->start);
        TEST_error("%s:%d: Can't find %s", s->test_file, s->start, attribute);
        return NULL;
    }

@@ -1986,85 +1971,6 @@ err:
    return ret;
}


/* Delete leading and trailing spaces from a string */
static char *strip_spaces(char *p)
{
    char *q;

    /* Skip over leading spaces */
    while (*p && isspace(*p))
        p++;
    if (!*p)
        return NULL;

    for (q = p + strlen(p) - 1; q != p && isspace(*q); )
        *q-- = '\0';
    return *p ? p : NULL;
}

/*
 * Read next test stanza; return 1 if found, 0 on EOF or error.
 */
static int readstanza(STANZA *s)
{
    PAIR *pp = s->pairs;
    char *p, *equals, *key, *value;
    char buff[1024];

    while (BIO_gets(fp, buff, sizeof(buff))) {
        s->curr++;
        if (!TEST_ptr(p = strchr(buff, '\n'))) {
            TEST_info("Line %d too long", s->curr);
            return 0;
        }
        *p = '\0';

        /* Blank line marks end of tests. */
        if (buff[0] == '\0')
            break;

        /* Lines starting with a pound sign are ignored. */
        if (buff[0] == '#')
            continue;

        if (!TEST_ptr(equals = strchr(buff, '='))) {
            TEST_info("Missing = at line %d\n", s->curr);
            return 0;
        }
        *equals++ = '\0';
        if (s->numpairs == 0)
            s->start = s->curr;

        if (!TEST_ptr(key = strip_spaces(buff))
                || !TEST_ptr(value = strip_spaces(equals))
                || !TEST_int_lt(s->numpairs++, MAXPAIRS)
                || !TEST_ptr(pp->key = OPENSSL_strdup(key))
                || !TEST_ptr(pp->value = OPENSSL_strdup(value)))
            return 0;
        pp++;
    }

    /* If we read anything, return ok. */
    return 1;
}

static void clearstanza(STANZA *s)
{
    PAIR *pp = s->pairs;
    int i = s->numpairs;
    int start = s->start;
    int curr = s->curr;

    for ( ; --i >= 0; pp++) {
        OPENSSL_free(pp->key);
        OPENSSL_free(pp->value);
    }
    memset(s, 0, sizeof(*s));
    s->curr = curr;
    s->start = start;
}

static int file_test_run(STANZA *s)
{
    static const FILETEST filetests[] = {
@@ -2086,13 +1992,14 @@ static int file_test_run(STANZA *s)
    for ( ; --numtests >= 0; tp++) {
        if (findattr(s, tp->name) != NULL) {
            if (!tp->func(s)) {
                TEST_info("Failed %s test at %d", tp->name, s->start);
                TEST_info("%s:%d: Failed %s test",
                          s->test_file, s->start, tp->name);
                return 0;
            }
            return 1;
        }
    }
    TEST_info("Unknown test at %d", s->start);
    TEST_info("%s:%d: Unknown test", s->test_file, s->start);
    return 0;
}

@@ -2100,26 +2007,30 @@ static char * const *testfiles;

static int run_file_tests(int i)
{
    STANZA s;
    int errcnt = 0;
    STANZA *s = NULL;
    int c;

    if (!TEST_ptr(fp = BIO_new_file(testfiles[i], "rb")))
    if (!TEST_ptr(s = OPENSSL_zalloc(sizeof(*s))))
        return 0;
    if (!test_start_file(s, testfiles[i])) {
        OPENSSL_free(s);
        return 0;
    }

    /* Read test file. */
    set_test_title(testfiles[i]);
    memset(&s, 0, sizeof(s));
    while (!BIO_eof(fp) && readstanza(&s)) {
        if (s.numpairs == 0)
    while (!BIO_eof(s->fp) && test_readstanza(s)) {
        if (s->numpairs == 0)
            continue;
        if (!file_test_run(&s)) {
            errcnt++;
        }
        clearstanza(&s);
        if (!file_test_run(s))
            s->errors++;
        s->numtests++;
        test_clearstanza(s);
    }
    BIO_free(fp);
    test_end_file(s);
    c = s->errors;
    OPENSSL_free(s);

    return errcnt == 0;
    return c == 0;
}


+1 −1
Original line number Diff line number Diff line
@@ -10,7 +10,7 @@
IF[{- !$disabled{tests} -}]
  LIBS_NO_INST=libtestutil.a
  SOURCE[libtestutil.a]=testutil/basic_output.c testutil/output_helpers.c \
          testutil/driver.c testutil/tests.c testutil/cb.c \
          testutil/driver.c testutil/tests.c testutil/cb.c testutil/stanza.c \
          {- rebase_files("../apps", $target{apps_aux_src}) -} \
          testutil/test_main.c testutil/main.c
  INCLUDE[libtestutil.a]=.. ../include
Loading