Title: Improved Random Number Generator Seeding
Version: 0.1.0
Description: A procedure for seeding R's built in random number generators using a variable-length sequence of values. Accumulates input entropy into a 256-bit hash digest or "ironseed" and is able to generate a variable-length sequence of output seeds from an ironseed.
License: MIT + file LICENSE
Language: en-US
Encoding: UTF-8
RoxygenNote: 7.3.2
Biarch: TRUE
NeedsCompilation: yes
URL: https://github.com/reedacartwright/ironseed
BugReports: https://github.com/reedacartwright/ironseed/issues
Suggests: tinytest
Packaged: 2025-07-06 21:50:57 UTC; reed
Author: Reed Cartwright ORCID iD [aut, cre]
Maintainer: Reed Cartwright <racartwright@gmail.com>
Repository: CRAN
Date/Publication: 2025-07-11 08:40:02 UTC

Ironseed: Improved Random Number Generator Seeding

Description

A procedure for seeding R's built in random number generators using a variable-length sequence of values. Accumulates input entropy into a 256-bit hash digest or "ironseed" and is able to generate a variable-length sequence of output seeds from an ironseed.

Author(s)

Maintainer: Reed Cartwright racartwright@gmail.com (ORCID)

See Also

Useful links:


Initialize .Random.seed

Description

Initialize .Random.seed

Usage

fill_random_seed(x, quiet = FALSE)

has_random_seed()

get_random_seed()

set_random_seed(seed)

Arguments

x

an ironseed.

quiet

a logical indicating whether to silence messages.

seed

a previous .Random.seed

Value

fill_random_seed() returns the previous value of .Random.seed or NULL.


Ironseed: Improved Random Number Generator Seeding

Description

An ironseed is a 256-bit hash digest constructed from a variable-length input sequence and can be used to generate a variable-length output sequence of seeds, including initializing R's built-in random number generator.

Usage

ironseed(..., set_seed = !has_random_seed(), quiet = FALSE)

create_seedseq(fe, n)

is_ironseed(x)

is_ironseed_str(x)

as_ironseed(x)

parse_ironseed_str(x)

Arguments

...

objects

set_seed

a logical indicating whether to initialize .Random.seed.

quiet

a logical indicating whether to silence messages.

fe

an ironseed

n

a scalar integer specifying the number of seeds to generate

x

a string, ironseed, or other object

Details

Ironseeds have a specific string representation, e.g. "rBQSjhjYv1d-z8dfMATEicf-sw1NSWAvVDi-bQaKSKKQmz1", where each element is a 64-bit number encoded in little-endian base58 format.

Parameter set_seed defaults to TRUE if .Random.seed does not already exist and FALSE otherwise.

Ironseed behaves differently depending on the number of arguments passed as ....

An ironseed is a finite-entropy (or fixed-entropy) hash digest that can be used to generate an unlimited sequence of seeds for initializing the state of a random number generator. It is inspired by the work of M.E. O’Neill and others.

An ironseed is a 256-bit hash digest constructed from a variable-length sequence of 32-bit inputs. Each ironseed consists of eight 32-bit sub-digests. The sub-digests are 32-bit multilinear hashes that accumulate entropy from the input sequence. Each input is included in every sub-digest. The coefficients for the multilinear hashes are generated by a Weyl sequence.

Multilinear hashes are also used to generate an output seed sequence from an ironseed. Each 32-bit output value is generated by uniquely hashing the sub-digests. The coefficients for the output are generated by a second Weyl sequence.

Value

An ironseed. If .Random.seed was initialized, the ironseed used will be returned invisibly.

References

See Also

.Random.seed

Examples




# Generate an ironseed with user supplied data
ironseed::ironseed("Experiment", 20251031, 1)

# Generate an ironseed automatically and initialize `.Random.seed` with it
ironseed::ironseed(set_seed = TRUE)