bug-gnulib
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH] getentropy, getrandom: new modules


From: Bruno Haible
Subject: Re: [PATCH] getentropy, getrandom: new modules
Date: Sat, 30 May 2020 14:58:46 +0200
User-agent: KMail/5.1.3 (Linux/4.4.0-177-generic; KDE/5.18.0; x86_64; ; )

There are several problems with this commit:
  - It causes a Continuous Integration failure.
  - It partially overlaps with the crypto/gc-random module.
  - The ChangeLog entry lists files that were not committed.
  - It conflicts with the declaration on Solaris 11.3 and newer.
  - It adds a new header file, <sys/random.h>, but without the usual
    header file tests in C and C++.

Let me start with the ChangeLog entry:

> * modules/getrandom, modules/getrandom-tests:
> * tests/test-getentropy.c, tests/test-getrandom.c:
> New files.

The files modules/getrandom-tests and tests/test-getrandom.c were
not committed. Let me add some.


2020-05-30  Bruno Haible  <bruno@clisp.org>

        getrandom: Add tests.
        * tests/test-getrandom.c: New file.
        * modules/getrandom-tests: New file.

============================ tests/test-getrandom.c ============================
/* Test of getting random bytes.
   Copyright (C) 2020 Free Software Foundation, Inc.

   This program is free software: you can redistribute it and/or modify
   it under the terms of the GNU General Public License as published by
   the Free Software Foundation; either version 3 of the License, or
   (at your option) any later version.

   This program is distributed in the hope that it will be useful,
   but WITHOUT ANY WARRANTY; without even the implied warranty of
   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
   GNU General Public License for more details.

   You should have received a copy of the GNU General Public License
   along with this program.  If not, see <https://www.gnu.org/licenses/>.  */

/* Written by Bruno Haible.  */

#include <config.h>

#include <sys/random.h>

#include "signature.h"
SIGNATURE_CHECK (getrandom, ssize_t, (void *, size_t, unsigned int));

#include <errno.h>
#include <string.h>

#include "macros.h"

int
main (void)
{
  char buf1[8];
  char buf2[8];
  char large_buf[100000];
  ssize_t ret;

  /* Check that different calls produce different results (with a high
     probability).  */
  ret = getrandom (buf1, sizeof (buf1), 0);
  if (ret < 0)
    ASSERT (errno == ENOSYS);
  else
    {
      ret = getrandom (buf2, sizeof (buf2), 0);
      if (ret < 0)
        ASSERT (errno == ENOSYS);
      else
        {
          /* It is very unlikely that two calls to getrandom produce the
             same results.  */
          ASSERT (memcmp (buf1, buf2, sizeof (buf1)) != 0);
        }
    }

  /* Likewise with the "truly random" number generator.  */
  ret = getrandom (buf1, sizeof (buf1), GRND_RANDOM);
  if (ret < 0)
    ASSERT (errno == ENOSYS);
  else
    {
      ret = getrandom (buf2, sizeof (buf2), GRND_RANDOM);
      if (ret < 0)
        ASSERT (errno == ENOSYS);
      else
        {
          /* It is very unlikely that two calls to getrandom produce the
             same results.  */
          ASSERT (memcmp (buf1, buf2, sizeof (buf1)) != 0);
        }
    }

  /* Check that GRND_NONBLOCK works.  */
  ret = getrandom (large_buf, sizeof (large_buf), GRND_RANDOM | GRND_NONBLOCK);
  /* It is very unlikely that so many truly random bytes were ready.  */
  if (ret < 0)
    ASSERT (errno == ENOSYS || errno == EAGAIN);
  else
    ASSERT (ret > 0 && ret < sizeof (large_buf));

  return 0;
}
=========================== modules/getrandom-tests ===========================
Files:
tests/test-getrandom.c
tests/signature.h
tests/macros.h

Depends-on:

configure.ac:

Makefile.am:
TESTS += test-getrandom
check_PROGRAMS += test-getrandom




reply via email to

[Prev in Thread] Current Thread [Next in Thread]