]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Add test case for uniform random generators
authorPauli <pauli@openssl.org>
Sat, 28 Oct 2023 09:49:08 +0000 (20:49 +1100)
committerTomas Mraz <tomas@openssl.org>
Wed, 1 Nov 2023 11:05:28 +0000 (12:05 +0100)
Reviewed-by: Tom Cosgrove <tom.cosgrove@arm.com>
Reviewed-by: Matthias St. Pierre <Matthias.St.Pierre@ncp-e.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/22499)

test/build.info
test/rand_test.c

index cd8254164a0ac3c69daf12772d26ea25b8848987..1784a41d8d22c13f970bd7336d32bbacd1155fb2 100644 (file)
@@ -103,7 +103,7 @@ IF[{- !$disabled{tests} -}]
 
   SOURCE[rand_test]=rand_test.c
   INCLUDE[rand_test]=../include ../apps/include
-  DEPEND[rand_test]=../libcrypto libtestutil.a
+  DEPEND[rand_test]=../libcrypto.a libtestutil.a
 
   SOURCE[rsa_complex]=rsa_complex.c
   INCLUDE[rsa_complex]=../include ../apps/include
index c6cf32610eb360ae0863e2d12b278e4713d89486..9f96b9b6dbbf2c17d2a50eb8943fb932f2d4c1ad 100644 (file)
@@ -11,6 +11,7 @@
 #include <openssl/rand.h>
 #include <openssl/bio.h>
 #include <openssl/core_names.h>
+#include "crypto/rand.h"
 #include "testutil.h"
 
 static int test_rand(void)
@@ -44,10 +45,42 @@ static int test_rand(void)
     return 1;
 }
 
+static int test_rand_uniform(void)
+{
+    uint32_t x, i, j;
+    int err = 0, res = 0;
+    OSSL_LIB_CTX *ctx;
+
+    if (!test_get_libctx(&ctx, NULL, NULL, NULL, NULL))
+        goto err;
+
+    for (i = 1; i < 100; i += 13) {
+        x = ossl_rand_uniform_uint32(ctx, i, &err);
+        if (!TEST_int_eq(err, 0)
+                || !TEST_uint_ge(x, 0)
+                || !TEST_uint_lt(x, i))
+            return 0;
+    }
+    for (i = 1; i < 100; i += 17)
+        for (j = i + 1; j < 150; j += 11) {
+            x = ossl_rand_range_uint32(ctx, i, j, &err);
+            if (!TEST_int_eq(err, 0)
+                    || !TEST_uint_ge(x, i)
+                    || !TEST_uint_lt(x, j))
+                return 0;
+        }
+
+    res = 1;
+ err:
+    OSSL_LIB_CTX_free(ctx);
+    return res;
+}
+
 int setup_tests(void)
 {
     if (!TEST_true(RAND_set_DRBG_type(NULL, "TEST-RAND", NULL, NULL, NULL)))
         return 0;
     ADD_TEST(test_rand);
+    ADD_TEST(test_rand_uniform);
     return 1;
 }