Fortuna PRNG

Fortuna PRNG generator

License

License

GroupId

GroupId

dev.prokop.crypto
ArtifactId

ArtifactId

fortune-teller
Last Version

Last Version

1.0.1
Release Date

Release Date

Type

Type

jar
Description

Description

Fortuna PRNG
Fortuna PRNG generator
Project URL

Project URL

https://github.com/prokop-dev/fortune-teller
Source Code Management

Source Code Management

https://github.com/prokop-dev/fortune-teller

Download fortune-teller

How to add to project

<!-- https://jarcasting.com/artifacts/dev.prokop.crypto/fortune-teller/ -->
<dependency>
    <groupId>dev.prokop.crypto</groupId>
    <artifactId>fortune-teller</artifactId>
    <version>1.0.1</version>
</dependency>
// https://jarcasting.com/artifacts/dev.prokop.crypto/fortune-teller/
implementation 'dev.prokop.crypto:fortune-teller:1.0.1'
// https://jarcasting.com/artifacts/dev.prokop.crypto/fortune-teller/
implementation ("dev.prokop.crypto:fortune-teller:1.0.1")
'dev.prokop.crypto:fortune-teller:jar:1.0.1'
<dependency org="dev.prokop.crypto" name="fortune-teller" rev="1.0.1">
  <artifact name="fortune-teller" type="jar" />
</dependency>
@Grapes(
@Grab(group='dev.prokop.crypto', module='fortune-teller', version='1.0.1')
)
libraryDependencies += "dev.prokop.crypto" % "fortune-teller" % "1.0.1"
[dev.prokop.crypto/fortune-teller "1.0.1"]

Dependencies

test (1)

Group / Artifact Type Version
org.junit.jupiter : junit-jupiter jar 5.7.0

Project Modules

There are no modules declared in this project.

fortune-teller

Java Fortuna PRNG clean room implementation. This implementation is JCA compatible. This allow to use Fortuna as secure random number generator for all Java applications.

Usage

Add Maven dependency

<dependency>
    <groupId>dev.prokop.crypto</groupId>
    <artifactId>fortune-teller</artifactId>
    <version>1.0.1</version>
</dependency>

Register JCA provider.

Security.addProvider(new FortunaJcaProvider());

Request SecureRandom instance and generate some random numbers.

final SecureRandom fortuna = SecureRandom.getInstance("Fortuna");

fortuna.generateSeed(22); // generates 22 random bytes

final byte[] bytes = new byte[1024];
fortuna.nextBytes(bytes); // fills byte array with 1 KiB of random data

That's it.

Test it on your system

Don't trust what you read here, please test it on your system before use. Your mileage can vary. You have been warned.

$ wget https://repo1.maven.org/maven2/dev/prokop/crypto/fortune-teller/1.0.1/fortune-teller-1.0.1.jar

$ java -cp fortune-teller-1.0.1.jar dev.prokop.crypto.fortuna.DieHarder | dieharder -g200 -a

#=============================================================================#
#            dieharder version 3.31.1 Copyright 2003 Robert G. Brown          #
#=============================================================================#
   rng_name    |rands/second|   Seed   |
stdin_input_raw|  4.12e+06  |3855428203|
#=============================================================================#
        test_name   |ntup| tsamples |psamples|  p-value |Assessment
#=============================================================================#
   diehard_birthdays|   0|       100|     100|0.92706545|  PASSED
      diehard_operm5|   0|   1000000|     100|0.89760746|  PASSED
  diehard_rank_32x32|   0|     40000|     100|0.28649369|  PASSED
    diehard_rank_6x8|   0|    100000|     100|0.83184980|  PASSED
   diehard_bitstream|   0|   2097152|     100|0.67206395|  PASSED
        diehard_opso|   0|   2097152|     100|0.58135346|  PASSED
...

Try to generate some images:

java -cp fortune-teller-1.0.1.jar dev.prokop.crypto.fortuna.DieHarder | rawtoppm -rgb 256 256 > pixmap
cat pixmap | pnmtopng > random$(date +%Y%m%d%H%M%S).png

Pretty dull, ha!

dev.prokop.crypto

Prokop DEVs

Family IT infrastructure

Versions

Version
1.0.1
1.0.0