1e1051a39Sopenharmony_ci/* 2e1051a39Sopenharmony_ci * Copyright 2017-2022 The OpenSSL Project Authors. All Rights Reserved. 3e1051a39Sopenharmony_ci * Copyright (c) 2017, Oracle and/or its affiliates. All rights reserved. 4e1051a39Sopenharmony_ci * 5e1051a39Sopenharmony_ci * Licensed under the Apache License 2.0 (the "License"). You may not use 6e1051a39Sopenharmony_ci * this file except in compliance with the License. You can obtain a copy 7e1051a39Sopenharmony_ci * in the file LICENSE in the source distribution or at 8e1051a39Sopenharmony_ci * https://www.openssl.org/source/license.html 9e1051a39Sopenharmony_ci */ 10e1051a39Sopenharmony_ci 11e1051a39Sopenharmony_ci#include <stdio.h> 12e1051a39Sopenharmony_ci#include <string.h> 13e1051a39Sopenharmony_ci 14e1051a39Sopenharmony_ci#include <openssl/opensslconf.h> 15e1051a39Sopenharmony_ci#include <openssl/err.h> 16e1051a39Sopenharmony_ci#include <openssl/crypto.h> 17e1051a39Sopenharmony_ci#include <openssl/bn.h> 18e1051a39Sopenharmony_ci 19e1051a39Sopenharmony_ci#include "internal/nelem.h" 20e1051a39Sopenharmony_ci#include "testutil.h" 21e1051a39Sopenharmony_ci 22e1051a39Sopenharmony_ci#define TEST(expected, test) test_case((expected), #test, (test)) 23e1051a39Sopenharmony_ci 24e1051a39Sopenharmony_cistatic int test_case(int expected, const char *test, int result) 25e1051a39Sopenharmony_ci{ 26e1051a39Sopenharmony_ci if (result != expected) { 27e1051a39Sopenharmony_ci fprintf(stderr, "# FATAL: %s != %d\n", test, expected); 28e1051a39Sopenharmony_ci return 0; 29e1051a39Sopenharmony_ci } 30e1051a39Sopenharmony_ci return 1; 31e1051a39Sopenharmony_ci} 32e1051a39Sopenharmony_ci 33e1051a39Sopenharmony_cistatic int test_int(void) 34e1051a39Sopenharmony_ci{ 35e1051a39Sopenharmony_ci if (!TEST(1, TEST_int_eq(1, 1)) 36e1051a39Sopenharmony_ci || !TEST(0, TEST_int_eq(1, -1)) 37e1051a39Sopenharmony_ci || !TEST(1, TEST_int_ne(1, 2)) 38e1051a39Sopenharmony_ci || !TEST(0, TEST_int_ne(3, 3)) 39e1051a39Sopenharmony_ci || !TEST(1, TEST_int_lt(4, 9)) 40e1051a39Sopenharmony_ci || !TEST(0, TEST_int_lt(9, 4)) 41e1051a39Sopenharmony_ci || !TEST(1, TEST_int_le(4, 9)) 42e1051a39Sopenharmony_ci || !TEST(1, TEST_int_le(5, 5)) 43e1051a39Sopenharmony_ci || !TEST(0, TEST_int_le(9, 4)) 44e1051a39Sopenharmony_ci || !TEST(1, TEST_int_gt(8, 5)) 45e1051a39Sopenharmony_ci || !TEST(0, TEST_int_gt(5, 8)) 46e1051a39Sopenharmony_ci || !TEST(1, TEST_int_ge(8, 5)) 47e1051a39Sopenharmony_ci || !TEST(1, TEST_int_ge(6, 6)) 48e1051a39Sopenharmony_ci || !TEST(0, TEST_int_ge(5, 8))) 49e1051a39Sopenharmony_ci goto err; 50e1051a39Sopenharmony_ci return 1; 51e1051a39Sopenharmony_ci 52e1051a39Sopenharmony_cierr: 53e1051a39Sopenharmony_ci return 0; 54e1051a39Sopenharmony_ci} 55e1051a39Sopenharmony_ci 56e1051a39Sopenharmony_cistatic int test_uint(void) 57e1051a39Sopenharmony_ci{ 58e1051a39Sopenharmony_ci if (!TEST(1, TEST_uint_eq(3u, 3u)) 59e1051a39Sopenharmony_ci || !TEST(0, TEST_uint_eq(3u, 5u)) 60e1051a39Sopenharmony_ci || !TEST(1, TEST_uint_ne(4u, 2u)) 61e1051a39Sopenharmony_ci || !TEST(0, TEST_uint_ne(6u, 6u)) 62e1051a39Sopenharmony_ci || !TEST(1, TEST_uint_lt(5u, 9u)) 63e1051a39Sopenharmony_ci || !TEST(0, TEST_uint_lt(9u, 5u)) 64e1051a39Sopenharmony_ci || !TEST(1, TEST_uint_le(5u, 9u)) 65e1051a39Sopenharmony_ci || !TEST(1, TEST_uint_le(7u, 7u)) 66e1051a39Sopenharmony_ci || !TEST(0, TEST_uint_le(9u, 5u)) 67e1051a39Sopenharmony_ci || !TEST(1, TEST_uint_gt(11u, 1u)) 68e1051a39Sopenharmony_ci || !TEST(0, TEST_uint_gt(1u, 11u)) 69e1051a39Sopenharmony_ci || !TEST(1, TEST_uint_ge(11u, 1u)) 70e1051a39Sopenharmony_ci || !TEST(1, TEST_uint_ge(6u, 6u)) 71e1051a39Sopenharmony_ci || !TEST(0, TEST_uint_ge(1u, 11u))) 72e1051a39Sopenharmony_ci goto err; 73e1051a39Sopenharmony_ci return 1; 74e1051a39Sopenharmony_ci 75e1051a39Sopenharmony_cierr: 76e1051a39Sopenharmony_ci return 0; 77e1051a39Sopenharmony_ci} 78e1051a39Sopenharmony_ci 79e1051a39Sopenharmony_cistatic int test_char(void) 80e1051a39Sopenharmony_ci{ 81e1051a39Sopenharmony_ci if (!TEST(1, TEST_char_eq('a', 'a')) 82e1051a39Sopenharmony_ci || !TEST(0, TEST_char_eq('a', 'A')) 83e1051a39Sopenharmony_ci || !TEST(1, TEST_char_ne('a', 'c')) 84e1051a39Sopenharmony_ci || !TEST(0, TEST_char_ne('e', 'e')) 85e1051a39Sopenharmony_ci || !TEST(1, TEST_char_lt('i', 'x')) 86e1051a39Sopenharmony_ci || !TEST(0, TEST_char_lt('x', 'i')) 87e1051a39Sopenharmony_ci || !TEST(1, TEST_char_le('i', 'x')) 88e1051a39Sopenharmony_ci || !TEST(1, TEST_char_le('n', 'n')) 89e1051a39Sopenharmony_ci || !TEST(0, TEST_char_le('x', 'i')) 90e1051a39Sopenharmony_ci || !TEST(1, TEST_char_gt('w', 'n')) 91e1051a39Sopenharmony_ci || !TEST(0, TEST_char_gt('n', 'w')) 92e1051a39Sopenharmony_ci || !TEST(1, TEST_char_ge('w', 'n')) 93e1051a39Sopenharmony_ci || !TEST(1, TEST_char_ge('p', 'p')) 94e1051a39Sopenharmony_ci || !TEST(0, TEST_char_ge('n', 'w'))) 95e1051a39Sopenharmony_ci goto err; 96e1051a39Sopenharmony_ci return 1; 97e1051a39Sopenharmony_ci 98e1051a39Sopenharmony_cierr: 99e1051a39Sopenharmony_ci return 0; 100e1051a39Sopenharmony_ci} 101e1051a39Sopenharmony_ci 102e1051a39Sopenharmony_cistatic int test_uchar(void) 103e1051a39Sopenharmony_ci{ 104e1051a39Sopenharmony_ci if (!TEST(1, TEST_uchar_eq(49, 49)) 105e1051a39Sopenharmony_ci || !TEST(0, TEST_uchar_eq(49, 60)) 106e1051a39Sopenharmony_ci || !TEST(1, TEST_uchar_ne(50, 2)) 107e1051a39Sopenharmony_ci || !TEST(0, TEST_uchar_ne(66, 66)) 108e1051a39Sopenharmony_ci || !TEST(1, TEST_uchar_lt(60, 80)) 109e1051a39Sopenharmony_ci || !TEST(0, TEST_uchar_lt(80, 60)) 110e1051a39Sopenharmony_ci || !TEST(1, TEST_uchar_le(60, 80)) 111e1051a39Sopenharmony_ci || !TEST(1, TEST_uchar_le(78, 78)) 112e1051a39Sopenharmony_ci || !TEST(0, TEST_uchar_le(80, 60)) 113e1051a39Sopenharmony_ci || !TEST(1, TEST_uchar_gt(88, 37)) 114e1051a39Sopenharmony_ci || !TEST(0, TEST_uchar_gt(37, 88)) 115e1051a39Sopenharmony_ci || !TEST(1, TEST_uchar_ge(88, 37)) 116e1051a39Sopenharmony_ci || !TEST(1, TEST_uchar_ge(66, 66)) 117e1051a39Sopenharmony_ci || !TEST(0, TEST_uchar_ge(37, 88))) 118e1051a39Sopenharmony_ci goto err; 119e1051a39Sopenharmony_ci return 1; 120e1051a39Sopenharmony_ci 121e1051a39Sopenharmony_cierr: 122e1051a39Sopenharmony_ci return 0; 123e1051a39Sopenharmony_ci} 124e1051a39Sopenharmony_ci 125e1051a39Sopenharmony_cistatic int test_long(void) 126e1051a39Sopenharmony_ci{ 127e1051a39Sopenharmony_ci if (!TEST(1, TEST_long_eq(123l, 123l)) 128e1051a39Sopenharmony_ci || !TEST(0, TEST_long_eq(123l, -123l)) 129e1051a39Sopenharmony_ci || !TEST(1, TEST_long_ne(123l, 500l)) 130e1051a39Sopenharmony_ci || !TEST(0, TEST_long_ne(1000l, 1000l)) 131e1051a39Sopenharmony_ci || !TEST(1, TEST_long_lt(-8923l, 102934563l)) 132e1051a39Sopenharmony_ci || !TEST(0, TEST_long_lt(102934563l, -8923l)) 133e1051a39Sopenharmony_ci || !TEST(1, TEST_long_le(-8923l, 102934563l)) 134e1051a39Sopenharmony_ci || !TEST(1, TEST_long_le(12345l, 12345l)) 135e1051a39Sopenharmony_ci || !TEST(0, TEST_long_le(102934563l, -8923l)) 136e1051a39Sopenharmony_ci || !TEST(1, TEST_long_gt(84325677l, 12345l)) 137e1051a39Sopenharmony_ci || !TEST(0, TEST_long_gt(12345l, 84325677l)) 138e1051a39Sopenharmony_ci || !TEST(1, TEST_long_ge(84325677l, 12345l)) 139e1051a39Sopenharmony_ci || !TEST(1, TEST_long_ge(465869l, 465869l)) 140e1051a39Sopenharmony_ci || !TEST(0, TEST_long_ge(12345l, 84325677l))) 141e1051a39Sopenharmony_ci goto err; 142e1051a39Sopenharmony_ci return 1; 143e1051a39Sopenharmony_ci 144e1051a39Sopenharmony_cierr: 145e1051a39Sopenharmony_ci return 0; 146e1051a39Sopenharmony_ci} 147e1051a39Sopenharmony_ci 148e1051a39Sopenharmony_cistatic int test_ulong(void) 149e1051a39Sopenharmony_ci{ 150e1051a39Sopenharmony_ci if (!TEST(1, TEST_ulong_eq(919ul, 919ul)) 151e1051a39Sopenharmony_ci || !TEST(0, TEST_ulong_eq(919ul, 10234ul)) 152e1051a39Sopenharmony_ci || !TEST(1, TEST_ulong_ne(8190ul, 66ul)) 153e1051a39Sopenharmony_ci || !TEST(0, TEST_ulong_ne(10555ul, 10555ul)) 154e1051a39Sopenharmony_ci || !TEST(1, TEST_ulong_lt(10234ul, 1000000ul)) 155e1051a39Sopenharmony_ci || !TEST(0, TEST_ulong_lt(1000000ul, 10234ul)) 156e1051a39Sopenharmony_ci || !TEST(1, TEST_ulong_le(10234ul, 1000000ul)) 157e1051a39Sopenharmony_ci || !TEST(1, TEST_ulong_le(100000ul, 100000ul)) 158e1051a39Sopenharmony_ci || !TEST(0, TEST_ulong_le(1000000ul, 10234ul)) 159e1051a39Sopenharmony_ci || !TEST(1, TEST_ulong_gt(100000000ul, 22ul)) 160e1051a39Sopenharmony_ci || !TEST(0, TEST_ulong_gt(22ul, 100000000ul)) 161e1051a39Sopenharmony_ci || !TEST(1, TEST_ulong_ge(100000000ul, 22ul)) 162e1051a39Sopenharmony_ci || !TEST(1, TEST_ulong_ge(10555ul, 10555ul)) 163e1051a39Sopenharmony_ci || !TEST(0, TEST_ulong_ge(22ul, 100000000ul))) 164e1051a39Sopenharmony_ci goto err; 165e1051a39Sopenharmony_ci return 1; 166e1051a39Sopenharmony_ci 167e1051a39Sopenharmony_cierr: 168e1051a39Sopenharmony_ci return 0; 169e1051a39Sopenharmony_ci} 170e1051a39Sopenharmony_ci 171e1051a39Sopenharmony_cistatic int test_size_t(void) 172e1051a39Sopenharmony_ci{ 173e1051a39Sopenharmony_ci if (!TEST(1, TEST_size_t_eq((size_t)10, (size_t)10)) 174e1051a39Sopenharmony_ci || !TEST(0, TEST_size_t_eq((size_t)10, (size_t)12)) 175e1051a39Sopenharmony_ci || !TEST(1, TEST_size_t_ne((size_t)10, (size_t)12)) 176e1051a39Sopenharmony_ci || !TEST(0, TEST_size_t_ne((size_t)24, (size_t)24)) 177e1051a39Sopenharmony_ci || !TEST(1, TEST_size_t_lt((size_t)30, (size_t)88)) 178e1051a39Sopenharmony_ci || !TEST(0, TEST_size_t_lt((size_t)88, (size_t)30)) 179e1051a39Sopenharmony_ci || !TEST(1, TEST_size_t_le((size_t)30, (size_t)88)) 180e1051a39Sopenharmony_ci || !TEST(1, TEST_size_t_le((size_t)33, (size_t)33)) 181e1051a39Sopenharmony_ci || !TEST(0, TEST_size_t_le((size_t)88, (size_t)30)) 182e1051a39Sopenharmony_ci || !TEST(1, TEST_size_t_gt((size_t)52, (size_t)33)) 183e1051a39Sopenharmony_ci || !TEST(0, TEST_size_t_gt((size_t)33, (size_t)52)) 184e1051a39Sopenharmony_ci || !TEST(1, TEST_size_t_ge((size_t)52, (size_t)33)) 185e1051a39Sopenharmony_ci || !TEST(1, TEST_size_t_ge((size_t)38, (size_t)38)) 186e1051a39Sopenharmony_ci || !TEST(0, TEST_size_t_ge((size_t)33, (size_t)52))) 187e1051a39Sopenharmony_ci goto err; 188e1051a39Sopenharmony_ci return 1; 189e1051a39Sopenharmony_ci 190e1051a39Sopenharmony_cierr: 191e1051a39Sopenharmony_ci return 0; 192e1051a39Sopenharmony_ci} 193e1051a39Sopenharmony_ci 194e1051a39Sopenharmony_cistatic int test_time_t(void) 195e1051a39Sopenharmony_ci{ 196e1051a39Sopenharmony_ci if (!TEST(1, TEST_time_t_eq((time_t)10, (time_t)10)) 197e1051a39Sopenharmony_ci || !TEST(0, TEST_time_t_eq((time_t)10, (time_t)12)) 198e1051a39Sopenharmony_ci || !TEST(1, TEST_time_t_ne((time_t)10, (time_t)12)) 199e1051a39Sopenharmony_ci || !TEST(0, TEST_time_t_ne((time_t)24, (time_t)24)) 200e1051a39Sopenharmony_ci || !TEST(1, TEST_time_t_lt((time_t)30, (time_t)88)) 201e1051a39Sopenharmony_ci || !TEST(0, TEST_time_t_lt((time_t)88, (time_t)30)) 202e1051a39Sopenharmony_ci || !TEST(1, TEST_time_t_le((time_t)30, (time_t)88)) 203e1051a39Sopenharmony_ci || !TEST(1, TEST_time_t_le((time_t)33, (time_t)33)) 204e1051a39Sopenharmony_ci || !TEST(0, TEST_time_t_le((time_t)88, (time_t)30)) 205e1051a39Sopenharmony_ci || !TEST(1, TEST_time_t_gt((time_t)52, (time_t)33)) 206e1051a39Sopenharmony_ci || !TEST(0, TEST_time_t_gt((time_t)33, (time_t)52)) 207e1051a39Sopenharmony_ci || !TEST(1, TEST_time_t_ge((time_t)52, (time_t)33)) 208e1051a39Sopenharmony_ci || !TEST(1, TEST_time_t_ge((time_t)38, (time_t)38)) 209e1051a39Sopenharmony_ci || !TEST(0, TEST_time_t_ge((time_t)33, (time_t)52))) 210e1051a39Sopenharmony_ci goto err; 211e1051a39Sopenharmony_ci return 1; 212e1051a39Sopenharmony_ci 213e1051a39Sopenharmony_cierr: 214e1051a39Sopenharmony_ci return 0; 215e1051a39Sopenharmony_ci} 216e1051a39Sopenharmony_ci 217e1051a39Sopenharmony_cistatic int test_pointer(void) 218e1051a39Sopenharmony_ci{ 219e1051a39Sopenharmony_ci int x = 0; 220e1051a39Sopenharmony_ci char y = 1; 221e1051a39Sopenharmony_ci 222e1051a39Sopenharmony_ci if (!TEST(1, TEST_ptr(&y)) 223e1051a39Sopenharmony_ci || !TEST(0, TEST_ptr(NULL)) 224e1051a39Sopenharmony_ci || !TEST(0, TEST_ptr_null(&y)) 225e1051a39Sopenharmony_ci || !TEST(1, TEST_ptr_null(NULL)) 226e1051a39Sopenharmony_ci || !TEST(1, TEST_ptr_eq(NULL, NULL)) 227e1051a39Sopenharmony_ci || !TEST(0, TEST_ptr_eq(NULL, &y)) 228e1051a39Sopenharmony_ci || !TEST(0, TEST_ptr_eq(&y, NULL)) 229e1051a39Sopenharmony_ci || !TEST(0, TEST_ptr_eq(&y, &x)) 230e1051a39Sopenharmony_ci || !TEST(1, TEST_ptr_eq(&x, &x)) 231e1051a39Sopenharmony_ci || !TEST(0, TEST_ptr_ne(NULL, NULL)) 232e1051a39Sopenharmony_ci || !TEST(1, TEST_ptr_ne(NULL, &y)) 233e1051a39Sopenharmony_ci || !TEST(1, TEST_ptr_ne(&y, NULL)) 234e1051a39Sopenharmony_ci || !TEST(1, TEST_ptr_ne(&y, &x)) 235e1051a39Sopenharmony_ci || !TEST(0, TEST_ptr_ne(&x, &x))) 236e1051a39Sopenharmony_ci goto err; 237e1051a39Sopenharmony_ci return 1; 238e1051a39Sopenharmony_ci 239e1051a39Sopenharmony_cierr: 240e1051a39Sopenharmony_ci return 0; 241e1051a39Sopenharmony_ci} 242e1051a39Sopenharmony_ci 243e1051a39Sopenharmony_cistatic int test_bool(void) 244e1051a39Sopenharmony_ci{ 245e1051a39Sopenharmony_ci if (!TEST(0, TEST_true(0)) 246e1051a39Sopenharmony_ci || !TEST(1, TEST_true(1)) 247e1051a39Sopenharmony_ci || !TEST(1, TEST_false(0)) 248e1051a39Sopenharmony_ci || !TEST(0, TEST_false(1))) 249e1051a39Sopenharmony_ci goto err; 250e1051a39Sopenharmony_ci return 1; 251e1051a39Sopenharmony_ci 252e1051a39Sopenharmony_cierr: 253e1051a39Sopenharmony_ci return 0; 254e1051a39Sopenharmony_ci} 255e1051a39Sopenharmony_ci 256e1051a39Sopenharmony_cistatic int test_string(void) 257e1051a39Sopenharmony_ci{ 258e1051a39Sopenharmony_ci static char buf[] = "abc"; 259e1051a39Sopenharmony_ci 260e1051a39Sopenharmony_ci if (!TEST(1, TEST_str_eq(NULL, NULL)) 261e1051a39Sopenharmony_ci || !TEST(1, TEST_str_eq("abc", buf)) 262e1051a39Sopenharmony_ci || !TEST(0, TEST_str_eq("abc", NULL)) 263e1051a39Sopenharmony_ci || !TEST(0, TEST_str_eq("abc", "")) 264e1051a39Sopenharmony_ci || !TEST(0, TEST_str_eq(NULL, buf)) 265e1051a39Sopenharmony_ci || !TEST(0, TEST_str_ne(NULL, NULL)) 266e1051a39Sopenharmony_ci || !TEST(0, TEST_str_eq("", NULL)) 267e1051a39Sopenharmony_ci || !TEST(0, TEST_str_eq(NULL, "")) 268e1051a39Sopenharmony_ci || !TEST(0, TEST_str_ne("", "")) 269e1051a39Sopenharmony_ci || !TEST(0, TEST_str_eq("\1\2\3\4\5", "\1x\3\6\5")) 270e1051a39Sopenharmony_ci || !TEST(0, TEST_str_ne("abc", buf)) 271e1051a39Sopenharmony_ci || !TEST(1, TEST_str_ne("abc", NULL)) 272e1051a39Sopenharmony_ci || !TEST(1, TEST_str_ne(NULL, buf)) 273e1051a39Sopenharmony_ci || !TEST(0, TEST_str_eq("abcdef", "abcdefghijk"))) 274e1051a39Sopenharmony_ci goto err; 275e1051a39Sopenharmony_ci return 1; 276e1051a39Sopenharmony_ci 277e1051a39Sopenharmony_cierr: 278e1051a39Sopenharmony_ci return 0; 279e1051a39Sopenharmony_ci} 280e1051a39Sopenharmony_ci 281e1051a39Sopenharmony_cistatic int test_memory(void) 282e1051a39Sopenharmony_ci{ 283e1051a39Sopenharmony_ci static char buf[] = "xyz"; 284e1051a39Sopenharmony_ci 285e1051a39Sopenharmony_ci if (!TEST(1, TEST_mem_eq(NULL, 0, NULL, 0)) 286e1051a39Sopenharmony_ci || !TEST(1, TEST_mem_eq(NULL, 1, NULL, 2)) 287e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_eq(NULL, 0, "xyz", 3)) 288e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_eq(NULL, 7, "abc", 3)) 289e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_ne(NULL, 0, NULL, 0)) 290e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_eq(NULL, 0, "", 0)) 291e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_eq("", 0, NULL, 0)) 292e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_ne("", 0, "", 0)) 293e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_eq("xyz", 3, NULL, 0)) 294e1051a39Sopenharmony_ci || !TEST(0, TEST_mem_eq("xyz", 3, buf, sizeof(buf))) 295e1051a39Sopenharmony_ci || !TEST(1, TEST_mem_eq("xyz", 4, buf, sizeof(buf)))) 296e1051a39Sopenharmony_ci goto err; 297e1051a39Sopenharmony_ci return 1; 298e1051a39Sopenharmony_ci 299e1051a39Sopenharmony_cierr: 300e1051a39Sopenharmony_ci return 0; 301e1051a39Sopenharmony_ci} 302e1051a39Sopenharmony_ci 303e1051a39Sopenharmony_cistatic int test_memory_overflow(void) 304e1051a39Sopenharmony_ci{ 305e1051a39Sopenharmony_ci /* Verify that the memory printing overflows without walking the stack */ 306e1051a39Sopenharmony_ci const char *p = "1234567890123456789012345678901234567890123456789012"; 307e1051a39Sopenharmony_ci const char *q = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 308e1051a39Sopenharmony_ci 309e1051a39Sopenharmony_ci return TEST(0, TEST_mem_eq(p, strlen(p), q, strlen(q))); 310e1051a39Sopenharmony_ci} 311e1051a39Sopenharmony_ci 312e1051a39Sopenharmony_cistatic int test_bignum(void) 313e1051a39Sopenharmony_ci{ 314e1051a39Sopenharmony_ci BIGNUM *a = NULL, *b = NULL, *c = NULL; 315e1051a39Sopenharmony_ci int r = 0; 316e1051a39Sopenharmony_ci 317e1051a39Sopenharmony_ci if (!TEST(1, TEST_int_eq(BN_dec2bn(&a, "0"), 1)) 318e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_eq_word(a, 0)) 319e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_eq_word(a, 30)) 320e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_abs_eq_word(a, 0)) 321e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_eq_one(a)) 322e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_eq_zero(a)) 323e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_ne_zero(a)) 324e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_le_zero(a)) 325e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_lt_zero(a)) 326e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_ge_zero(a)) 327e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_gt_zero(a)) 328e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_even(a)) 329e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_odd(a)) 330e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_eq(b, c)) 331e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_eq(a, b)) 332e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_ne(NULL, c)) 333e1051a39Sopenharmony_ci || !TEST(1, TEST_int_eq(BN_dec2bn(&b, "1"), 1)) 334e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_eq_word(b, 1)) 335e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_eq_one(b)) 336e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_abs_eq_word(b, 0)) 337e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_abs_eq_word(b, 1)) 338e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_eq_zero(b)) 339e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_ne_zero(b)) 340e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_le_zero(b)) 341e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_lt_zero(b)) 342e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_ge_zero(b)) 343e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_gt_zero(b)) 344e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_even(b)) 345e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_odd(b)) 346e1051a39Sopenharmony_ci || !TEST(1, TEST_int_eq(BN_dec2bn(&c, "-334739439"), 10)) 347e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_eq_word(c, 334739439)) 348e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_abs_eq_word(c, 334739439)) 349e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_eq_zero(c)) 350e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_ne_zero(c)) 351e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_le_zero(c)) 352e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_lt_zero(c)) 353e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_ge_zero(c)) 354e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_gt_zero(c)) 355e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_even(c)) 356e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_odd(c)) 357e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_eq(a, a)) 358e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_ne(a, a)) 359e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_eq(a, b)) 360e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_ne(a, b)) 361e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_lt(a, c)) 362e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_lt(c, b)) 363e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_lt(b, c)) 364e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_le(a, c)) 365e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_le(c, b)) 366e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_le(b, c)) 367e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_gt(a, c)) 368e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_gt(c, b)) 369e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_gt(b, c)) 370e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_ge(a, c)) 371e1051a39Sopenharmony_ci || !TEST(0, TEST_BN_ge(c, b)) 372e1051a39Sopenharmony_ci || !TEST(1, TEST_BN_ge(b, c))) 373e1051a39Sopenharmony_ci goto err; 374e1051a39Sopenharmony_ci 375e1051a39Sopenharmony_ci r = 1; 376e1051a39Sopenharmony_cierr: 377e1051a39Sopenharmony_ci BN_free(a); 378e1051a39Sopenharmony_ci BN_free(b); 379e1051a39Sopenharmony_ci BN_free(c); 380e1051a39Sopenharmony_ci return r; 381e1051a39Sopenharmony_ci} 382e1051a39Sopenharmony_ci 383e1051a39Sopenharmony_cistatic int test_long_output(void) 384e1051a39Sopenharmony_ci{ 385e1051a39Sopenharmony_ci const char *p = "1234567890123456789012345678901234567890123456789012"; 386e1051a39Sopenharmony_ci const char *q = "1234567890klmnopqrs01234567890EFGHIJKLM0123456789XYZ"; 387e1051a39Sopenharmony_ci const char *r = "1234567890123456789012345678901234567890123456789012" 388e1051a39Sopenharmony_ci "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY+" 389e1051a39Sopenharmony_ci "12345678901234567890123ABC78901234567890123456789012"; 390e1051a39Sopenharmony_ci const char *s = "1234567890123456789012345678901234567890123456789012" 391e1051a39Sopenharmony_ci "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY-" 392e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789012" 393e1051a39Sopenharmony_ci "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 394e1051a39Sopenharmony_ci 395e1051a39Sopenharmony_ci return TEST(0, TEST_str_eq(p, q)) 396e1051a39Sopenharmony_ci & TEST(0, TEST_str_eq(q, r)) 397e1051a39Sopenharmony_ci & TEST(0, TEST_str_eq(r, s)) 398e1051a39Sopenharmony_ci & TEST(0, TEST_mem_eq(r, strlen(r), s, strlen(s))); 399e1051a39Sopenharmony_ci} 400e1051a39Sopenharmony_ci 401e1051a39Sopenharmony_cistatic int test_long_bignum(void) 402e1051a39Sopenharmony_ci{ 403e1051a39Sopenharmony_ci int r; 404e1051a39Sopenharmony_ci BIGNUM *a = NULL, *b = NULL, *c = NULL, *d = NULL; 405e1051a39Sopenharmony_ci const char as[] = "1234567890123456789012345678901234567890123456789012" 406e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789012" 407e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789012" 408e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789012" 409e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789012" 410e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789012" 411e1051a39Sopenharmony_ci "FFFFFF"; 412e1051a39Sopenharmony_ci const char bs[] = "1234567890123456789012345678901234567890123456789012" 413e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789013" 414e1051a39Sopenharmony_ci "987657"; 415e1051a39Sopenharmony_ci const char cs[] = "-" /* 64 characters plus sign */ 416e1051a39Sopenharmony_ci "123456789012345678901234567890" 417e1051a39Sopenharmony_ci "123456789012345678901234567890" 418e1051a39Sopenharmony_ci "ABCD"; 419e1051a39Sopenharmony_ci const char ds[] = "-" /* 63 characters plus sign */ 420e1051a39Sopenharmony_ci "23456789A123456789B123456789C" 421e1051a39Sopenharmony_ci "123456789D123456789E123456789F" 422e1051a39Sopenharmony_ci "ABCD"; 423e1051a39Sopenharmony_ci 424e1051a39Sopenharmony_ci r = TEST_true(BN_hex2bn(&a, as)) 425e1051a39Sopenharmony_ci && TEST_true(BN_hex2bn(&b, bs)) 426e1051a39Sopenharmony_ci && TEST_true(BN_hex2bn(&c, cs)) 427e1051a39Sopenharmony_ci && TEST_true(BN_hex2bn(&d, ds)) 428e1051a39Sopenharmony_ci && (TEST(0, TEST_BN_eq(a, b)) 429e1051a39Sopenharmony_ci & TEST(0, TEST_BN_eq(b, a)) 430e1051a39Sopenharmony_ci & TEST(0, TEST_BN_eq(b, NULL)) 431e1051a39Sopenharmony_ci & TEST(0, TEST_BN_eq(NULL, a)) 432e1051a39Sopenharmony_ci & TEST(1, TEST_BN_ne(a, NULL)) 433e1051a39Sopenharmony_ci & TEST(0, TEST_BN_eq(c, d))); 434e1051a39Sopenharmony_ci BN_free(a); 435e1051a39Sopenharmony_ci BN_free(b); 436e1051a39Sopenharmony_ci BN_free(c); 437e1051a39Sopenharmony_ci BN_free(d); 438e1051a39Sopenharmony_ci return r; 439e1051a39Sopenharmony_ci} 440e1051a39Sopenharmony_ci 441e1051a39Sopenharmony_cistatic int test_messages(void) 442e1051a39Sopenharmony_ci{ 443e1051a39Sopenharmony_ci TEST_info("This is an %s message.", "info"); 444e1051a39Sopenharmony_ci TEST_error("This is an %s message.", "error"); 445e1051a39Sopenharmony_ci return 1; 446e1051a39Sopenharmony_ci} 447e1051a39Sopenharmony_ci 448e1051a39Sopenharmony_cistatic int test_single_eval(void) 449e1051a39Sopenharmony_ci{ 450e1051a39Sopenharmony_ci int i = 4; 451e1051a39Sopenharmony_ci long l = -9000; 452e1051a39Sopenharmony_ci char c = 'd'; 453e1051a39Sopenharmony_ci unsigned char uc = 22; 454e1051a39Sopenharmony_ci unsigned long ul = 500; 455e1051a39Sopenharmony_ci size_t st = 1234; 456e1051a39Sopenharmony_ci char buf[4] = { 0 }, *p = buf; 457e1051a39Sopenharmony_ci 458e1051a39Sopenharmony_ci /* int */ 459e1051a39Sopenharmony_ci return TEST_int_eq(i++, 4) 460e1051a39Sopenharmony_ci && TEST_int_eq(i, 5) 461e1051a39Sopenharmony_ci && TEST_int_gt(++i, 5) 462e1051a39Sopenharmony_ci && TEST_int_le(5, i++) 463e1051a39Sopenharmony_ci && TEST_int_ne(--i, 5) 464e1051a39Sopenharmony_ci && TEST_int_eq(12, i *= 2) 465e1051a39Sopenharmony_ci /* Long */ 466e1051a39Sopenharmony_ci && TEST_long_eq(l--, -9000L) 467e1051a39Sopenharmony_ci && TEST_long_eq(++l, -9000L) 468e1051a39Sopenharmony_ci && TEST_long_ne(-9000L, l /= 2) 469e1051a39Sopenharmony_ci && TEST_long_lt(--l, -4500L) 470e1051a39Sopenharmony_ci /* char */ 471e1051a39Sopenharmony_ci && TEST_char_eq(++c, 'e') 472e1051a39Sopenharmony_ci && TEST_char_eq('e', c--) 473e1051a39Sopenharmony_ci && TEST_char_ne('d', --c) 474e1051a39Sopenharmony_ci && TEST_char_le('b', --c) 475e1051a39Sopenharmony_ci && TEST_char_lt(c++, 'c') 476e1051a39Sopenharmony_ci /* unsigned char */ 477e1051a39Sopenharmony_ci && TEST_uchar_eq(22, uc++) 478e1051a39Sopenharmony_ci && TEST_uchar_eq(uc /= 2, 11) 479e1051a39Sopenharmony_ci && TEST_ulong_eq(ul ^= 1, 501) 480e1051a39Sopenharmony_ci && TEST_ulong_eq(502, ul ^= 3) 481e1051a39Sopenharmony_ci && TEST_ulong_eq(ul = ul * 3 - 6, 1500) 482e1051a39Sopenharmony_ci /* size_t */ 483e1051a39Sopenharmony_ci && TEST_size_t_eq((--i, st++), 1234) 484e1051a39Sopenharmony_ci && TEST_size_t_eq(st, 1235) 485e1051a39Sopenharmony_ci && TEST_int_eq(11, i) 486e1051a39Sopenharmony_ci /* pointers */ 487e1051a39Sopenharmony_ci && TEST_ptr_eq(p++, buf) 488e1051a39Sopenharmony_ci && TEST_ptr_eq(buf + 2, ++p) 489e1051a39Sopenharmony_ci && TEST_ptr_eq(buf, p -= 2) 490e1051a39Sopenharmony_ci && TEST_ptr(++p) 491e1051a39Sopenharmony_ci && TEST_ptr_eq(p, buf + 1) 492e1051a39Sopenharmony_ci && TEST_ptr_null(p = NULL) 493e1051a39Sopenharmony_ci /* strings */ 494e1051a39Sopenharmony_ci && TEST_str_eq(p = &("123456"[1]), "23456") 495e1051a39Sopenharmony_ci && TEST_str_eq("3456", ++p) 496e1051a39Sopenharmony_ci && TEST_str_ne(p++, "456") 497e1051a39Sopenharmony_ci /* memory */ 498e1051a39Sopenharmony_ci && TEST_mem_eq(--p, sizeof("3456"), "3456", sizeof("3456")) 499e1051a39Sopenharmony_ci && TEST_mem_ne(p++, sizeof("456"), "456", sizeof("456")) 500e1051a39Sopenharmony_ci && TEST_mem_eq(p--, sizeof("456"), "456", sizeof("456")); 501e1051a39Sopenharmony_ci} 502e1051a39Sopenharmony_ci 503e1051a39Sopenharmony_cistatic int test_output(void) 504e1051a39Sopenharmony_ci{ 505e1051a39Sopenharmony_ci const char s[] = "1234567890123456789012345678901234567890123456789012" 506e1051a39Sopenharmony_ci "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 507e1051a39Sopenharmony_ci 508e1051a39Sopenharmony_ci test_output_string("test", s, sizeof(s) - 1); 509e1051a39Sopenharmony_ci test_output_memory("test", (const unsigned char *)s, sizeof(s)); 510e1051a39Sopenharmony_ci return 1; 511e1051a39Sopenharmony_ci} 512e1051a39Sopenharmony_ci 513e1051a39Sopenharmony_cistatic const char *bn_output_tests[] = { 514e1051a39Sopenharmony_ci NULL, 515e1051a39Sopenharmony_ci "0", 516e1051a39Sopenharmony_ci "-12345678", 517e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789012" 518e1051a39Sopenharmony_ci "1234567890123456789012345678901234567890123456789013" 519e1051a39Sopenharmony_ci "987657" 520e1051a39Sopenharmony_ci}; 521e1051a39Sopenharmony_ci 522e1051a39Sopenharmony_cistatic int test_bn_output(int n) 523e1051a39Sopenharmony_ci{ 524e1051a39Sopenharmony_ci BIGNUM *b = NULL; 525e1051a39Sopenharmony_ci 526e1051a39Sopenharmony_ci if (bn_output_tests[n] != NULL 527e1051a39Sopenharmony_ci && !TEST_true(BN_hex2bn(&b, bn_output_tests[n]))) 528e1051a39Sopenharmony_ci return 0; 529e1051a39Sopenharmony_ci test_output_bignum(bn_output_tests[n], b); 530e1051a39Sopenharmony_ci BN_free(b); 531e1051a39Sopenharmony_ci return 1; 532e1051a39Sopenharmony_ci} 533e1051a39Sopenharmony_ci 534e1051a39Sopenharmony_cistatic int test_skip_one(void) 535e1051a39Sopenharmony_ci{ 536e1051a39Sopenharmony_ci return TEST_skip("skip test"); 537e1051a39Sopenharmony_ci} 538e1051a39Sopenharmony_ci 539e1051a39Sopenharmony_cistatic int test_skip_many(int n) 540e1051a39Sopenharmony_ci{ 541e1051a39Sopenharmony_ci return TEST_skip("skip tests: %d", n); 542e1051a39Sopenharmony_ci} 543e1051a39Sopenharmony_ci 544e1051a39Sopenharmony_cistatic int test_skip_null(void) 545e1051a39Sopenharmony_ci{ 546e1051a39Sopenharmony_ci /* 547e1051a39Sopenharmony_ci * This is not a recommended way of skipping a test, a reason or 548e1051a39Sopenharmony_ci * description should be included. 549e1051a39Sopenharmony_ci */ 550e1051a39Sopenharmony_ci return TEST_skip(NULL); 551e1051a39Sopenharmony_ci} 552e1051a39Sopenharmony_ci 553e1051a39Sopenharmony_ciint setup_tests(void) 554e1051a39Sopenharmony_ci{ 555e1051a39Sopenharmony_ci ADD_TEST(test_int); 556e1051a39Sopenharmony_ci ADD_TEST(test_uint); 557e1051a39Sopenharmony_ci ADD_TEST(test_char); 558e1051a39Sopenharmony_ci ADD_TEST(test_uchar); 559e1051a39Sopenharmony_ci ADD_TEST(test_long); 560e1051a39Sopenharmony_ci ADD_TEST(test_ulong); 561e1051a39Sopenharmony_ci ADD_TEST(test_size_t); 562e1051a39Sopenharmony_ci ADD_TEST(test_time_t); 563e1051a39Sopenharmony_ci ADD_TEST(test_pointer); 564e1051a39Sopenharmony_ci ADD_TEST(test_bool); 565e1051a39Sopenharmony_ci ADD_TEST(test_string); 566e1051a39Sopenharmony_ci ADD_TEST(test_memory); 567e1051a39Sopenharmony_ci ADD_TEST(test_memory_overflow); 568e1051a39Sopenharmony_ci ADD_TEST(test_bignum); 569e1051a39Sopenharmony_ci ADD_TEST(test_long_bignum); 570e1051a39Sopenharmony_ci ADD_TEST(test_long_output); 571e1051a39Sopenharmony_ci ADD_TEST(test_messages); 572e1051a39Sopenharmony_ci ADD_TEST(test_single_eval); 573e1051a39Sopenharmony_ci ADD_TEST(test_output); 574e1051a39Sopenharmony_ci ADD_ALL_TESTS(test_bn_output, OSSL_NELEM(bn_output_tests)); 575e1051a39Sopenharmony_ci ADD_TEST(test_skip_one); 576e1051a39Sopenharmony_ci ADD_TEST(test_skip_null); 577e1051a39Sopenharmony_ci ADD_ALL_TESTS(test_skip_many, 3); 578e1051a39Sopenharmony_ci return 1; 579e1051a39Sopenharmony_ci} 580