# US 2020/0401378 A1 · Parallel generation of pseudorandom number sequences using multiple generators with brined initial states

> Agents: this data is available as JSON from the patentgrep API and MCP server — see https://patentgrep.com/llms.txt

- Number: US 2020/0401378 A1
- Document ID: US20200401378A1
- Status: Published application
- Kind: A1
- Application number: 16/548,076
- Filed: 2019-08-22
- Published: 2020-12-24
- Earliest claimed: 2019-06-18
- Assignees: Oracle International Corporation
- Applicants: Oracle International Corporation
- Inventors: Guy L. Steele, Jr.
- Web page: https://patentgrep.com/patent/US20200401378A1

## CPC

- G06F 7/582: {Pseudo-random number generators}
- G06F 7/586: {using an integer algorithm, e.g. using linear congruential method}
- G06F 9/3885: {using a plurality of independent parallel functional units}
- G06F 9/48: Program initiating; Program switching, e.g. by interrupt
- G06F 7/584: {using finite field arithmetic, e.g. using a linear feedback shift register}
- G06F 7/588: {Random number generators, i.e. based on natural stochastic processes}
- G06F 9/4881: {Scheduling strategies for dispatcher, e.g. round robin, multi-level priority queues}
- G06F 9/526: {Mutual exclusion algorithms}
- G06F 9/54: Interprogram communication
- H04L 9/0656: {Pseudorandom key sequence combined element-for-element with data sequence, e.g. one-time-pad [OTP] or Vernam's cipher}
- H04L 9/0662: {with particular pseudorandom sequence generator}
- H04L 9/0668: {producing a non-linear pseudorandom sequence}
- H04L 9/0841: {involving Diffie-Hellman or related key agreement protocols}
- H04L 9/3247: {involving digital signatures}
- G06F: ELECTRIC DIGITAL DATA PROCESSING (computer systems based on specific computational models G06N)
- H04L: TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION (arrangements common to telegraphic and telephonic communication H04M)

## Abstract

Embodiments comprise construction of a collection of pseudorandom number generators (PRNGs), with either a known or unknown cardinality, using unique brine values that comprise a salt value for the collection and also different index values for each PRNG for the collection. The additive parameters of such PRNGs are based on the respective brine values of the PRNGs, thereby ensuring that the PRNGs in the collection have different state cycles. Embodiments make it likely that PRNGs from different collections have distinct additive parameters by choosing a pseudorandom salt value for each collection. According to embodiments, a stream of generators in a collection is created by a spliterator that carries a salt value for the collection and combines the salt value with index values for the generators to produce brined additive parameters for the PRNGs in the stream. According to embodiments, such a stream may be executed by multiple threads in parallel.

## Claims

### Claim 1

A computer-executed method comprising:
receiving a request to create a collection of pseudorandom number generators (PRNGs);
in response to receiving the request to create a collection of PRNGs, creating the collection of PRNGs by:
generating a salt value comprising a first pseudorandom number, and
creating each PRNG of the collection of PRNGs based on a respective brine value that comprises both (a) at least a portion of the salt value and (b) a respective index value that is unique to the respective PRNG within the collection of PRNGs;
wherein the method is performed by one or more computing devices.

### Claim 2 (depends on 1)

The method of claim 1, further comprising:
receiving a request for a particular PRNG, of the created collection of PRNGs, to generate a pseudorandom number;
wherein the particular PRNG was created based on a particular brine value;
in response to receiving the request for the particular PRNG to generate a pseudorandom number, the particular PRNG utilizing at least a portion of the particular brine value to generate a pseudorandom number; and
the particular PRNG returning the generated pseudorandom number as a response to the request to generate a pseudorandom number.

### Claim 3 (depends on 1)

The method of claim 1, wherein creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value by causing an additive parameter for the particular PRNG to comprise at least part of the particular brine value.

### Claim 4 (depends on 1)

The method of claim 1, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
the method further comprises generating the particular brine value by:
determining a number of bits, wherein a set of bits that comprises the determined number of bits is capable of representing at least a known cardinality of the collection of PRNGs,
populating a first set of bits in a representation of the particular brine value with the particular portion of the salt value, and
populating a second set of bits in the representation of the particular brine value with the particular index value, wherein the number of bits in the particular set of bits is the determined number of bits.

### Claim 5 (depends on 1)

The method of claim 1, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
the method further comprises generating the particular brine value by:
populating a first set of bits, in a representation of the particular brine value, with a sliding boundary index value, wherein the number of the first set of bits is pre-determined,
wherein the sliding boundary index value identifies a particular bit in the representation of the particular brine value,
populating a second set of bits, a boundary of which is the particular bit in the representation of the particular brine value, with the particular index value, and
populating a third set of bits, comprising bits of the representation of the particular brine value that are not in the first set of bits and also not in the second set of bits, with the particular portion of the salt value.

### Claim 6 (depends on 1)

The method of claim 1, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
the method further comprises generating the particular brine value by:
setting a respective flag bit of each bit group, of one or more first bit groups in a representation of the particular brine value, to indicate that the respective bit group includes salt value information,
wherein the one or more first bit groups collectively represent the particular portion of the salt value, and
setting an index flag bit, of one or more second bit groups in the representation of the particular brine value, to indicate a boundary bit for the particular index value,
wherein the one or more second bit groups collectively represent the particular index value.

### Claim 7 (depends on 1)

The method of claim 1, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
the method further comprises generating the particular brine value by:
populating a first set of one or more bit groups, in a representation of the particular brine value, with the particular portion of the salt value,
wherein each bit group, of the first set of one or more bit groups, represents a value that does not satisfy a boundary value test,
populating a boundary bit group, in the representation of the particular brine value, with a value that satisfies the boundary value test, and
populating a second set of one or more bit groups, in the representation of the particular brine value, with the particular index value,
wherein the boundary bit group is located, in the representation of the particular brine value, between the first set of one or more bit groups and the second set of one or more bit groups.

### Claim 8 (depends on 7)

The method of claim 7, wherein the boundary value test tests whether a value represented by bits is a maximum number representable by the bits.

### Claim 9 (depends on 1)

The method of claim 1, wherein creating the collection of PRNGs is performed by at least two threads of a processor running respective PRNG generators, which use the same salt value, in parallel.

### Claim 10 (depends on 1)

The method of claim 1, further comprising causing two or more PRNGs, of the collection of PRNGs, to produce pseudorandom numbers in parallel by running the two or more PRNGs on respective threads of a processor.

### Claim 11 (depends on 1)

The method of claim 1, wherein each PRNG, of the collection of PRNGs, utilizes an xorshift generator algorithm of a group of xorshift generator algorithms comprising: xoroshiro64; xoroshiro128; xoshiro256; xoshiro512; and xoroshiro1024.

### Claim 12 (depends on 1)

The method of claim 1, further comprising:
receiving a second request to create a second collection of PRNGs;
in response to receiving the second request to create a second collection of PRNGs, creating the second collection of PRNGs by:
generating a second salt value comprising a second pseudorandom number,
wherein the second pseudorandom number is different from the first pseudorandom number, and
creating each PRNG of the second collection of PRNGs based on a respective brine value that comprises both (a) at least a portion of the second salt value and (b) a respective index value that is unique to the respective PRNG within the second collection of PRNGs.

### Claim 13

One or more non-transitory computer-readable media storing instructions that, when executed by one or more processors, cause:
receiving a request to create a collection of pseudorandom number generators (PRNGs);
in response to receiving the request to create a collection of PRNGs, creating the collection of PRNGs by:
generating a salt value comprising a first pseudorandom number, and
creating each PRNG of the collection of PRNGs based on a respective brine value that comprises both (a) at least a portion of the salt value and (b) a respective index value that is unique to the respective PRNG within the collection of PRNGs.

### Claim 14 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein the instructions further comprise instructions that, when executed by one or more processors, cause:
receiving a request for a particular PRNG, of the created collection of PRNGs, to generate a pseudorandom number;
wherein the particular PRNG was created based on a particular brine value;
in response to receiving the request for the particular PRNG to generate a pseudorandom number, the particular PRNG utilizing at least a portion of the particular brine value to generate a pseudorandom number; and
the particular PRNG returning the generated pseudorandom number as a response to the request to generate a pseudorandom number.

### Claim 15 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value by causing an additive parameter for the particular PRNG to comprise at least part of the particular brine value.

### Claim 16 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
the instructions further comprise instructions that, when executed by one or more processors, cause generating the particular brine value by:
determining a number of bits, wherein a set of bits that comprises the determined number of bits is capable of representing at least a known cardinality of the collection of PRNGs,
populating a first set of bits in a representation of the particular brine value with the particular portion of the salt value, and
populating a second set of bits in the representation of the particular brine value with the particular index value, wherein the number of bits in the particular set of bits is the determined number of bits.

### Claim 17 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
wherein the instructions further comprise instructions that, when executed by one or more processors, cause generating the particular brine value by:
populating a first set of bits, in a representation of the particular brine value, with a sliding boundary index value, wherein the number of the first set of bits is pre-determined,
wherein the sliding boundary index value identifies a particular bit in the representation of the particular brine value,
populating a second set of bits, a boundary of which is the particular bit in the representation of the particular brine value, with the particular index value, and
populating a third set of bits, comprising bits of the representation of the particular brine value that are not in the first set of bits and also not in the second set of bits, with the particular portion of the salt value.

### Claim 18 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
wherein the instructions further comprise instructions that, when executed by one or more processors, cause generating the particular brine value by:
setting a respective flag bit of each bit group, of one or more first bit groups in a representation of the particular brine value, to indicate that the respective bit group includes salt value information,
wherein the one or more first bit groups collectively represent the particular portion of the salt value, and
setting an index flag bit, of one or more second bit groups in the representation of the particular brine value, to indicate a boundary bit for the particular index value,
wherein the one or more second bit groups collectively represent the particular index value.

### Claim 19 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein:
creating each PRNG of the collection of PRNGs based on a respective brine value comprises creating a particular PRNG based on a particular brine value that comprises a particular portion of the salt value and a particular index value that is unique to the particular PRNG;
wherein the instructions further comprise instructions that, when executed by one or more processors, cause generating the particular brine value by:
populating a first set of one or more bit groups, in a representation of the particular brine value, with the particular portion of the salt value,
wherein each bit group, of the first set of one or more bit groups, represents a value that does not satisfy a boundary value test,
populating a boundary bit group, in the representation of the particular brine value, with a value that satisfies the boundary value test, and
populating a second set of one or more bit groups, in the representation of the particular brine value, with the particular index value,
wherein the boundary bit group is located, in the representation of the particular brine value, between the first set of one or more bit groups and the second set of one or more bit groups.

### Claim 20 (depends on 19)

The one or more non-transitory computer-readable media of claim 19, wherein the boundary value test tests whether a value represented by bits is a maximum number representable by the bits.

### Claim 21 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein creating the collection of PRNGs is performed by at least two threads of a processor running respective PRNG generators, which use the same salt value, in parallel.

### Claim 22 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein the instructions further comprise instructions that, when executed by one or more processors, cause causing two or more PRNGs, of the collection of PRNGs, to produce pseudorandom numbers in parallel by running the two or more PRNGs on respective threads of a processor.

### Claim 23 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein each PRNG, of the collection of PRNGs, utilizes an xorshift generator algorithm of a group of xorshift generator algorithms comprising: xoroshiro64; xoroshiro128; xoshiro256; xoshiro512; and xoroshiro1024.

### Claim 24 (depends on 13)

The one or more non-transitory computer-readable media of claim 13, wherein the instructions further comprise instructions that, when executed by one or more processors, cause:
receiving a second request to create a second collection of PRNGs;
in response to receiving the second request to create a second collection of PRNGs, creating the second collection of PRNGs by:
generating a second salt value comprising a second pseudorandom number,
wherein the second pseudorandom number is different from the first pseudorandom number, and
creating each PRNG of the second collection of PRNGs based on a respective brine value that comprises both (a) at least a portion of the second salt value and (b) a respective index value that is unique to the respective PRNG within the second collection of PRNGs.
