All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Nina Schoetterl-Glausch" <nsg@linux.ibm.com>,
	"Nico Boehr" <nrb@linux.ibm.com>,
	"Thomas Huth" <thuth@redhat.com>,
	"Andrew Jones" <andrew.jones@linux.dev>
Cc: <linux-s390@vger.kernel.org>,
	"Claudio Imbrenda" <imbrenda@linux.ibm.com>,
	"David Hildenbrand" <david@redhat.com>,
	"Janosch Frank" <frankja@linux.ibm.com>, <kvm@vger.kernel.org>
Subject: Re: [kvm-unit-tests PATCH v3 1/7] lib: Add pseudo random functions
Date: Tue, 25 Jun 2024 13:08:29 +1000	[thread overview]
Message-ID: <D28RMVNELBHS.HJUXVDHDPAC4@gmail.com> (raw)
In-Reply-To: <20240620141700.4124157-2-nsg@linux.ibm.com>

On Fri Jun 21, 2024 at 12:16 AM AEST, Nina Schoetterl-Glausch wrote:
> Add functions for generating pseudo random 32 and 64 bit values.
> The implementation uses SHA-256 and so the randomness should have good
> quality.
> Implement the necessary subset of SHA-256.
> The PRNG algorithm is equivalent to the following python snippet:
>
> def prng32(seed):
>     from hashlib import sha256
>     state = seed.to_bytes(8, byteorder="big")
>     while True:
>         state = sha256(state).digest()
>         for i in range(8):
>             yield int.from_bytes(state[i*4:(i+1)*4], byteorder="big")
>

Nice, could use this for powerpc radom SPR value tests (and
probably other things too).

> Acked-by: Andrew Jones <andrew.jones@linux.dev>
> Signed-off-by: Nina Schoetterl-Glausch <nsg@linux.ibm.com>
> ---
>
> Notes:
>     Since a PRNG with better quality was asked for I decided to use SHA-256
>     because:
>      * it is a standard, commonly used algorithm
>      * high quality randomness is assured
>      * the implementation can be checked against the spec
>      * the implementation can be easily checked via comparison
>     
>     I tested the implementation in the following way:
>     
>     cat <<'EOF' > rand.py
>     #!/usr/bin/python3
>     
>     def prng32(seed):
>         from hashlib import sha256
>         state = seed.to_bytes(8, byteorder="big")
>         while True:
>             state = sha256(state).digest()
>             for i in range(8):
>                 yield int.from_bytes(state[i*4:(i+1)*4], byteorder="big")
>     
>     r = prng32(0)
>     for i in range(100):
>         print(f"{next(r):08x}")
>     
>     EOF
>     
>     cat <<'EOF' > rand.c
>     #include <stdio.h>
>     #include "rand.h"
>     
>     void main(void)
>     {
>     	prng_state state = prng_init(0);
>     	for (int i = 0; i < 100; i++) {
>     		printf("%08x\n", prng32(&state));
>     	}
>     }
>     EOF
>     cat <<'EOF' > libcflat.h
>     #define ARRAY_SIZE(_a) (sizeof(_a)/sizeof((_a)[0]))
>     EOF
>     chmod +x rand.py
>     ln -s lib/rand.c librand.c
>     gcc -Ilib librand.c rand.c
>     diff <(./a.out) <(./rand.py)

Cool... you made a unit test for the unit tests. We could start a
make check? :)

Acked-by: Nicholas Piggin <npiggin@gmail.com>

Thanks,
Nick

  reply	other threads:[~2024-06-25  3:08 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-20 14:16 [kvm-unit-tests PATCH v3 0/7] s390x: STFLE nested interpretation Nina Schoetterl-Glausch
2024-06-20 14:16 ` [kvm-unit-tests PATCH v3 1/7] lib: Add pseudo random functions Nina Schoetterl-Glausch
2024-06-25  3:08   ` Nicholas Piggin [this message]
2024-06-25  7:06     ` Nina Schoetterl-Glausch
2024-08-12 14:17   ` Andrew Jones
2024-10-10  8:25   ` Nico Boehr
2024-10-10  8:37     ` Andrew Jones
2024-06-20 14:16 ` [kvm-unit-tests PATCH v3 2/7] s390x: lib: Remove double include Nina Schoetterl-Glausch
2024-06-21  6:58   ` Janosch Frank
2024-06-20 14:16 ` [kvm-unit-tests PATCH v3 3/7] s390x: Add sie_is_pv Nina Schoetterl-Glausch
2024-06-20 16:41   ` Claudio Imbrenda
2024-06-21  6:59   ` Janosch Frank
2024-06-25  1:58   ` Nicholas Piggin
2024-06-20 14:16 ` [kvm-unit-tests PATCH v3 4/7] s390x: Add function for checking diagnose intercepts Nina Schoetterl-Glausch
2024-06-20 16:47   ` Claudio Imbrenda
2024-06-20 17:46     ` Nina Schoetterl-Glausch
2024-06-21  7:13   ` Janosch Frank
2024-06-25  2:14   ` Nicholas Piggin
2024-06-25  8:11     ` Nina Schoetterl-Glausch
2024-06-25 23:52       ` Nicholas Piggin
2024-06-20 14:16 ` [kvm-unit-tests PATCH v3 5/7] s390x: Add library functions for exiting from snippet Nina Schoetterl-Glausch
2024-06-20 16:55   ` Claudio Imbrenda
2024-06-20 17:16     ` Nina Schoetterl-Glausch
2024-06-20 17:26       ` Claudio Imbrenda
2024-06-25  3:13         ` Nicholas Piggin
2024-06-25  2:43   ` Nicholas Piggin
2024-10-16 14:42     ` Nina Schoetterl-Glausch
2024-06-25  2:57   ` Nicholas Piggin
2024-06-25  9:21     ` Claudio Imbrenda
2024-06-20 14:16 ` [kvm-unit-tests PATCH v3 6/7] s390x: Use library functions for snippet exit Nina Schoetterl-Glausch
2024-06-20 16:56   ` Claudio Imbrenda
2024-06-25  2:58   ` Nicholas Piggin
2024-06-20 14:17 ` [kvm-unit-tests PATCH v3 7/7] s390x: Add test for STFLE interpretive execution (format-0) Nina Schoetterl-Glausch
2024-06-20 17:25   ` Claudio Imbrenda
2024-06-20 17:42     ` Nina Schoetterl-Glausch
2024-06-25  3:11   ` Nicholas Piggin
2024-08-27 14:08   ` Nico Boehr
2024-09-02 14:24     ` Nina Schoetterl-Glausch
2024-09-03 10:46       ` Heiko Carstens
2024-10-10  8:27       ` Nico Boehr
2024-10-15 11:01         ` Nina Schoetterl-Glausch

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=D28RMVNELBHS.HJUXVDHDPAC4@gmail.com \
    --to=npiggin@gmail.com \
    --cc=andrew.jones@linux.dev \
    --cc=david@redhat.com \
    --cc=frankja@linux.ibm.com \
    --cc=imbrenda@linux.ibm.com \
    --cc=kvm@vger.kernel.org \
    --cc=linux-s390@vger.kernel.org \
    --cc=nrb@linux.ibm.com \
    --cc=nsg@linux.ibm.com \
    --cc=thuth@redhat.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.