Merge branch 'master' into doc-fix
78
CHANGELOG.md
Normal file
@@ -0,0 +1,78 @@
|
|||||||
|
# Change Log
|
||||||
|
|
||||||
|
## [0.3.0](https://github.com/13-37-org/infnoise/tree/0.3.0) (2018-10-09)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.2.6...0.3.0)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- merge libinfnoise branch [\#12](https://github.com/13-37-org/infnoise/pull/12) ([manuel-domke](https://github.com/manuel-domke))
|
||||||
|
- Fix apt-key add command in README [\#11](https://github.com/13-37-org/infnoise/pull/11) ([xenomachina](https://github.com/xenomachina))
|
||||||
|
- Fix a couple of spelling errors [\#10](https://github.com/13-37-org/infnoise/pull/10) ([skitt](https://github.com/skitt))
|
||||||
|
|
||||||
|
## [0.2.6](https://github.com/13-37-org/infnoise/tree/0.2.6) (2018-05-02)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.2.5...0.2.6)
|
||||||
|
|
||||||
|
**Closed issues:**
|
||||||
|
|
||||||
|
- systemd service can't be disabled [\#7](https://github.com/13-37-org/infnoise/issues/7)
|
||||||
|
|
||||||
|
## [0.2.5](https://github.com/13-37-org/infnoise/tree/0.2.5) (2018-04-09)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.2.4...0.2.5)
|
||||||
|
|
||||||
|
## [0.2.4](https://github.com/13-37-org/infnoise/tree/0.2.4) (2018-04-02)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.2.3...0.2.4)
|
||||||
|
|
||||||
|
## [0.2.3](https://github.com/13-37-org/infnoise/tree/0.2.3) (2018-03-02)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.2.2...0.2.3)
|
||||||
|
|
||||||
|
## [0.2.2](https://github.com/13-37-org/infnoise/tree/0.2.2) (2018-03-01)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.2.0...0.2.2)
|
||||||
|
|
||||||
|
## [0.2.0](https://github.com/13-37-org/infnoise/tree/0.2.0) (2018-03-01)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.2.1...0.2.0)
|
||||||
|
|
||||||
|
## [0.2.1](https://github.com/13-37-org/infnoise/tree/0.2.1) (2018-03-01)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/v0.2.1...0.2.1)
|
||||||
|
|
||||||
|
## [v0.2.1](https://github.com/13-37-org/infnoise/tree/v0.2.1) (2018-03-01)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/v0.2.0...v0.2.1)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- Version number [\#5](https://github.com/13-37-org/infnoise/pull/5) ([manuel-domke](https://github.com/manuel-domke))
|
||||||
|
- Correct CS spelling [\#4](https://github.com/13-37-org/infnoise/pull/4) ([darrellrossman](https://github.com/darrellrossman))
|
||||||
|
|
||||||
|
## [v0.2.0](https://github.com/13-37-org/infnoise/tree/v0.2.0) (2017-12-31)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/v0.1.2...v0.2.0)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- merged captainpete's pull request \#28 from waywardgeek/infnoise [\#3](https://github.com/13-37-org/infnoise/pull/3) ([manuel-domke](https://github.com/manuel-domke))
|
||||||
|
- merged "increased timeout and options struct" pull request from runema [\#2](https://github.com/13-37-org/infnoise/pull/2) ([manuel-domke](https://github.com/manuel-domke))
|
||||||
|
|
||||||
|
## [v0.1.2](https://github.com/13-37-org/infnoise/tree/v0.1.2) (2017-11-13)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.1.0...v0.1.2)
|
||||||
|
|
||||||
|
**Merged pull requests:**
|
||||||
|
|
||||||
|
- updated readme [\#1](https://github.com/13-37-org/infnoise/pull/1) ([manuel-domke](https://github.com/manuel-domke))
|
||||||
|
|
||||||
|
## [0.1.0](https://github.com/13-37-org/infnoise/tree/0.1.0) (2017-08-29)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/0.1.1...0.1.0)
|
||||||
|
|
||||||
|
## [0.1.1](https://github.com/13-37-org/infnoise/tree/0.1.1) (2017-08-29)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/Fourth-OshPark-Prototype...0.1.1)
|
||||||
|
|
||||||
|
## [Fourth-OshPark-Prototype](https://github.com/13-37-org/infnoise/tree/Fourth-OshPark-Prototype) (2014-11-02)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/Third-OshPark-Prototype...Fourth-OshPark-Prototype)
|
||||||
|
|
||||||
|
## [Third-OshPark-Prototype](https://github.com/13-37-org/infnoise/tree/Third-OshPark-Prototype) (2014-10-15)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/Second-OshPark-Prototype...Third-OshPark-Prototype)
|
||||||
|
|
||||||
|
## [Second-OshPark-Prototype](https://github.com/13-37-org/infnoise/tree/Second-OshPark-Prototype) (2014-10-12)
|
||||||
|
[Full Changelog](https://github.com/13-37-org/infnoise/compare/First-OshPark-Prototype...Second-OshPark-Prototype)
|
||||||
|
|
||||||
|
## [First-OshPark-Prototype](https://github.com/13-37-org/infnoise/tree/First-OshPark-Prototype) (2014-10-10)
|
||||||
|
|
||||||
|
|
||||||
|
\* *This Change Log was automatically generated by [github_changelog_generator](https://github.com/skywinder/Github-Changelog-Generator)*
|
||||||
@@ -26,7 +26,7 @@ before use in cryptography. This should be done by continually reseeding a
|
|||||||
cryptographically secure hash function such as SHA-512, Blake2b, Keccak-1600 (SHA3), or a
|
cryptographically secure hash function such as SHA-512, Blake2b, Keccak-1600 (SHA3), or a
|
||||||
stream cipher such as ChaCha. This implementation uses Keccak-1600 with cryptographically
|
stream cipher such as ChaCha. This implementation uses Keccak-1600 with cryptographically
|
||||||
secure reseeding of more than 400 bits of entropy at a time, overcoming a trickle in/out
|
secure reseeding of more than 400 bits of entropy at a time, overcoming a trickle in/out
|
||||||
problem present in the Linux /dev/random system. Users who need many megabytes per second
|
problem present in the GNU/Linux /dev/random system. Users who need many megabytes per second
|
||||||
of data for use in cryptography can set the outputMultiplier as high as they like, which
|
of data for use in cryptography can set the outputMultiplier as high as they like, which
|
||||||
causes Keccak to generate outputMultiplier\*256 bits per reseeding by the Infinite Noise
|
causes Keccak to generate outputMultiplier\*256 bits per reseeding by the Infinite Noise
|
||||||
TRNG.
|
TRNG.
|
||||||
|
|||||||
@@ -1,3 +1,5 @@
|
|||||||
|
SHELL = /bin/bash
|
||||||
|
|
||||||
GIT_VERSION := $(shell git --no-pager describe --tags --always)
|
GIT_VERSION := $(shell git --no-pager describe --tags --always)
|
||||||
GIT_COMMIT := $(shell git rev-parse --verify HEAD)
|
GIT_COMMIT := $(shell git rev-parse --verify HEAD)
|
||||||
GIT_DATE := $(firstword $(shell git --no-pager show --date=iso-strict --format="%ad" --name-only))
|
GIT_DATE := $(firstword $(shell git --no-pager show --date=iso-strict --format="%ad" --name-only))
|
||||||
@@ -6,9 +8,9 @@ PREFIX = $(DESTDIR)/usr/local
|
|||||||
|
|
||||||
# Against 'libftdi0' from MacOS X ports or brew
|
# Against 'libftdi0' from MacOS X ports or brew
|
||||||
#
|
#
|
||||||
FTDILOCI = /opt/local/include
|
FTDILOCI = $(shell brew --prefix libftdi || echo /opt/local)/include/libftdi1
|
||||||
FTDILOCL = /opt/local/lib
|
FTDILOCL = $(shell brew --prefix libftdi || echo /opt/local)/lib
|
||||||
FTDI= -lftdi
|
FTDI= -lftdi1
|
||||||
|
|
||||||
CFLAGS = -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I $(FTDILOCI) \
|
CFLAGS = -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I $(FTDILOCI) \
|
||||||
-DGIT_VERSION=\"$(GIT_VERSION)\"\
|
-DGIT_VERSION=\"$(GIT_VERSION)\"\
|
||||||
@@ -17,7 +19,7 @@ CFLAGS = -Wall -Wextra -Werror -std=c99 -O3 -fPIC -I Keccak -I $(FTDILOCI) \
|
|||||||
|
|
||||||
RM=rm
|
RM=rm
|
||||||
|
|
||||||
all: libinfnoise.a libinfnoise.so infnoise
|
all: libinfnoise.a libinfnoise.so infnoise tools.stamp
|
||||||
|
|
||||||
infnoise: libinfnoise.a infnoise.o daemon.o
|
infnoise: libinfnoise.a infnoise.o daemon.o
|
||||||
$(CC) $(CFLAGS) -o infnoise infnoise.o daemon.o libinfnoise.a $(FTDI) -lm -L. -L $(FTDILOCL)
|
$(CC) $(CFLAGS) -o infnoise infnoise.o daemon.o libinfnoise.a $(FTDI) -lm -L. -L $(FTDILOCL)
|
||||||
@@ -43,15 +45,19 @@ libinfnoise.so: libinfnoise.o healthcheck.o KeccakF-1600-reference.o
|
|||||||
|
|
||||||
libs: libinfnoise.a
|
libs: libinfnoise.a
|
||||||
|
|
||||||
|
tools.stamp:
|
||||||
|
$(MAKE) -C tools all
|
||||||
|
touch tools.stamp
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) -f infnoise *.o *.a *.gch *.so libinfnoise-example
|
$(RM) -f infnoise *.o *.a *.gch *.so libinfnoise-example tools.stamp
|
||||||
|
$(MAKE) -C tools clean
|
||||||
|
|
||||||
install-lib: libinfnoise.so
|
install-lib: libinfnoise.so
|
||||||
install -d $(PREFIX)/include
|
install -d $(PREFIX)/include
|
||||||
install -m 0644 libinfnoise.h $(PREFIX)/include
|
install -m 0644 libinfnoise.h $(PREFIX)/include
|
||||||
install -d $(PREFIX)/lib
|
install -d $(PREFIX)/lib
|
||||||
install -m 0644 libinfnoise.so $(PREFIX)/lib
|
install -m 0644 libinfnoise.so $(PREFIX)/lib
|
||||||
ldconfig $(PREFIX)/lib
|
|
||||||
|
|
||||||
install: infnoise
|
install: infnoise
|
||||||
install -d $(PREFIX)/sbin
|
install -d $(PREFIX)/sbin
|
||||||
@@ -61,6 +67,6 @@ install: infnoise
|
|||||||
install -d $(PREFIX)/lib/systemd/system
|
install -d $(PREFIX)/lib/systemd/system
|
||||||
install -m 0644 init_scripts/infnoise.service $(PREFIX)/lib/systemd/system
|
install -m 0644 init_scripts/infnoise.service $(PREFIX)/lib/systemd/system
|
||||||
|
|
||||||
postinstall:
|
install-tools: install tools.stamp
|
||||||
systemctl restart systemd-udevd
|
install -d $(PREFIX)/bin
|
||||||
systemctl enable infnoise
|
install -m 0755 tools/bin2hex tools/dice tools/entcheck tools/findlongest tools/flipbits tools/healthcheck tools/hex2bin tools/passgen $(PREFIX)/bin/
|
||||||
@@ -1,48 +1,42 @@
|
|||||||
Compiling the Driver for Windows
|
Releases
|
||||||
--------------------------------
|
|
||||||
|
|
||||||
I compiled infnoise-win.exe using VisualStudio 2013 using Windows 7. I downloaded the
|
|
||||||
FTD2xx drivers from FTDI. Pipes seem almost entirely broken in Windows, so the Windows
|
|
||||||
version requires out output file to be specified on the command line. In a cmd window,
|
|
||||||
you can type
|
|
||||||
|
|
||||||
infnoise-win foo
|
|
||||||
|
|
||||||
and let it run for a while until you have as much random data in foo as you need.
|
|
||||||
|
|
||||||
The VisualStudio project for infnoise is in the infnoise/software/VisualStudio directory.
|
|
||||||
|
|
||||||
Using prebuilt packages for Linux
|
|
||||||
---------------------------------
|
---------------------------------
|
||||||
|
|
||||||
Precompiled binaries can be downloaded from the releases section of the 13-37-org fork:
|
Signed packages of release versions are availabe on [Github](https://github.com/13-37-org/infnoise/releases) and [13-37.org](https://13-37.org/files/).
|
||||||
https://github.com/13-37-org/infnoise/releases
|
|
||||||
|
|
||||||
All packages are signed with the same PGP-Key (Key-ID: 0x4E730A3C) used for the repositories below.
|
The packages are signed with the same PGP-Key (Key-ID: `0x4E730A3C`) used for the apt repositories below.
|
||||||
Full Fingerprint: 71AE 099B 262D C0B4 93E6 EE71 975D C25C 4E73 0A3C. You can also check the
|
Full Fingerprint: `71AE 099B 262D C0B4 93E6 EE71 975D C25C 4E73 0A3C`. You can get the keys on [13-37.org/keys](https://13-37.org/keys) and in the [Crowd Supply campaign](https://crowdsupply.com/13-37/infinite-noise-trng).
|
||||||
fingerprints at 13-37.org/pgp-keys and in the Crowd Supply campaign.
|
|
||||||
|
|
||||||
Repositories for Ubuntu, Debian and Raspbian are also available. To add them follow this procedure:
|
Verify the keys and add the repo:
|
||||||
|
|
||||||
$ wget -O 13-37.org-code.asc https://13-37.org/files/pubkey.gpg
|
$ wget -O 13-37.org-code.asc https://13-37.org/files/pubkey.gpg
|
||||||
|
|
||||||
# Verify the keys fingerprint:
|
# Verify the keys fingerprint:
|
||||||
# GPG1
|
# GPG1
|
||||||
$ gpg --with-fingerprints 13-37.org-code.asc
|
$ gpg --with-fingerprints 13-37.org-code.asc
|
||||||
# GPG2:
|
# GPG2:
|
||||||
$ gpg2 --import-options import-show --dry-run --import < 13-37.org-code.asc
|
$ gpg2 --import-options import-show --dry-run --import < 13-37.org-code.asc
|
||||||
$ sudo apt-key add 13-37.org-code.asc
|
|
||||||
|
|
||||||
Available for Ubuntu and Debian (x86, x64 and armhf):
|
$ sudo apt-key add 13-37.org-code.asc
|
||||||
|
|
||||||
$ echo "deb http://repo.13-37.org/ stable main" | sudo tee /etc/apt/sources.list.d/infnoise.list
|
$ echo "deb http://repo.13-37.org/ stable main" | sudo tee /etc/apt/sources.list.d/infnoise.list
|
||||||
$ sudo apt-get update
|
$ sudo apt-get update
|
||||||
$ sudo apt-get install infnoise
|
$ sudo apt-get install infnoise
|
||||||
|
|
||||||
Connect the Infinite Noise TRNG (if not already) and the service will be started via a udev rule.
|
Connect the Infinite Noise TRNG (if not already) and the service will be started via a udev rule. Check status of driver:
|
||||||
Check status of driver:
|
|
||||||
$ systemctl status infnoise
|
$ systemctl status infnoise
|
||||||
|
|
||||||
Compiling the Driver for Linux
|
Compiling the Driver
|
||||||
|
------------------------------
|
||||||
|
|
||||||
|
It's highly recommended to build from the tagged releases, as these have been [tested and verified](https://github.com/13-37-org/infnoise/tree/master/tests/results) extensively. Note that the releases are maintained in the 13-37-org fork of this project.
|
||||||
|
|
||||||
|
To switch to a specific tag:
|
||||||
|
|
||||||
|
git clone https://github.com/13-37-org/infnoise
|
||||||
|
git checkout tags/0.3.0
|
||||||
|
|
||||||
|
GNU/Linux
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
The infnoise application reads random data from the Infinite Noise USB key and writes
|
The infnoise application reads random data from the Infinite Noise USB key and writes
|
||||||
@@ -53,12 +47,17 @@ this command:
|
|||||||
$ sudo apt-get install libftdi-dev libusb-dev
|
$ sudo apt-get install libftdi-dev libusb-dev
|
||||||
|
|
||||||
These include an open source drivers for the FT240X USB chip used on the Infinite Noise
|
These include an open source drivers for the FT240X USB chip used on the Infinite Noise
|
||||||
TRNG. Once this is done, to compile the infnoise program, simply make it:
|
TRNG. Once this is done, to compile the infnoise program, simply make and install it:
|
||||||
|
|
||||||
$ make -f Makefile.linux
|
$ make -f Makefile.linux
|
||||||
|
|
||||||
To run the infnoise application, make sure the Infinite Noise USB stick is
|
To install it, run:
|
||||||
plugged in, and from a shell, type:
|
|
||||||
|
$ make -f Makefile.linux install
|
||||||
|
|
||||||
|
This also installs a systemd service and the udev rules described below to start the driver automatically when the device is plugged in.
|
||||||
|
|
||||||
|
To run the infnoise application manually, make sure the systemd service is stopped. Otherwise it will restart the daemon and disrupt you.
|
||||||
|
|
||||||
$ sudo ./infnoise > randbytes
|
$ sudo ./infnoise > randbytes
|
||||||
|
|
||||||
@@ -70,12 +69,12 @@ Note that there is a newer alpha version of the next release of the libftdi libr
|
|||||||
found it runs much slower than the current libftdi1 library in Ubuntu, so I am sticking
|
found it runs much slower than the current libftdi1 library in Ubuntu, so I am sticking
|
||||||
with the stable release for now.
|
with the stable release for now.
|
||||||
|
|
||||||
Compiling the driver for macOS
|
MacOS
|
||||||
------------------------------
|
------------------------------
|
||||||
|
|
||||||
First install the dependencies, most easily done with homebrew:
|
First install the dependencies, most easily done with homebrew:
|
||||||
|
|
||||||
$ brew install libftdi-dev libusb-dev
|
$ brew install libftdi libusb
|
||||||
|
|
||||||
Adjust the Makefile, if necessary, to point at your ftdi directory:
|
Adjust the Makefile, if necessary, to point at your ftdi directory:
|
||||||
|
|
||||||
@@ -102,41 +101,42 @@ Or you may have to unload the FTDI serial port driver:
|
|||||||
Alternatively, FTDI have released the [D2XXhelper](http://www.ftdichip.com/Drivers/D2XX.htm), which may prevent the
|
Alternatively, FTDI have released the [D2XXhelper](http://www.ftdichip.com/Drivers/D2XX.htm), which may prevent the
|
||||||
serial driver from grabbing the Infinitenoise device.
|
serial driver from grabbing the Infinitenoise device.
|
||||||
|
|
||||||
Usage
|
The `--dev-random` mode is not implemented for MacOS (yet.)
|
||||||
|
But you can try the the Infinite Noise [OpenSSL engine](https://github.com/tinskip/infnoise-openssl) based on libinfnoise.
|
||||||
|
|
||||||
|
Windows
|
||||||
-----
|
-----
|
||||||
|
|
||||||
Usage: infnoise [options]
|
I compiled infnoise-win.exe using VisualStudio 2013 using Windows 7. I downloaded the FTD2xx drivers from FTDI. Pipes seem almost entirely broken in Windows, so the Windows version requires out output file to be specified on the command line. In a cmd window, you can type
|
||||||
Options are:
|
|
||||||
--debug - turn on some debug output
|
infnoise-win foo
|
||||||
--dev-random - write entropy to /dev/random instead of stdout
|
|
||||||
--raw - do not whiten the output
|
and let it run for a while until you have as much random data in foo as you need.
|
||||||
--multiplier <value> - write 256 bits * value for each 512 bits written to the Keccak sponge
|
|
||||||
--no-output - do not write random output data
|
The VisualStudio project for infnoise is in the infnoise/software/VisualStudio directory.
|
||||||
--daemon - run in the background. Output should be redirected to a file or
|
|
||||||
the options should be used with --dev-random. To reduce CPU-usage addition
|
There is also a new fork https://github.com/jj1bdx/infnoise-windows compiled with VS2017.
|
||||||
af entropy is only forced after a minute rather than a second.
|
|
||||||
--pidfile <filename> - write the process ID to a file. If --daemon is used, it is the ID of the background process.
|
|
||||||
--serial <serial> - use Infinite Noise TRNG/FT240 with the given serial number (see --list-devices)
|
|
||||||
--list-devices - list available devices
|
|
||||||
=======
|
|
||||||
Usage
|
Usage
|
||||||
-----
|
-----
|
||||||
|
|
||||||
Usage: infnoise [options]
|
Usage: infnoise [options]
|
||||||
Options are:
|
Options are:
|
||||||
--debug - turn on some debug output
|
-D, --debug - turn on some debug output
|
||||||
--dev-random - write entropy to /dev/random instead of stdout
|
-R, --dev-random - write entropy to /dev/random instead of stdout
|
||||||
--raw - do not whiten the output
|
-r, --raw - do not whiten the output
|
||||||
--multiplier <value> - write 256 bits * value for each 512 bits written to the Keccak sponge
|
-m, --multiplier <value> - write 256 bits * value for each 512 bits written to
|
||||||
--no-output - do not write random output data
|
the Keccak sponge. Default of 0 means write all the entropy.
|
||||||
--daemon - run in the background. Output should be redirected to a file or
|
-n, --no-output - do not write random output data
|
||||||
the options should be used with --dev-random. To reduce CPU-usage addition
|
-p, --pidfile <file> - write process ID to file
|
||||||
af entropy is only forced after a minute rather than a second.
|
-d, --daemon - run in the background
|
||||||
--pidfile <filename> - write the process ID to a file. If --daemon is used, it is the ID of the background process.
|
-s, --serial <serial> - use specified device
|
||||||
--serial <serial> - use Infinite Noise TRNG/FT240 with the given serial number (see --list-devices)
|
-l, --list-devices - list available devices
|
||||||
--list-devices - list available devices
|
-v, --version - show version information
|
||||||
|
-h, --help - this help output
|
||||||
|
|
||||||
Note: The options --daemon and --pidfile are only implemented in the Linux version.
|
Note: The options --daemon, --dev-random and --pidfile are only implemented in the GNU/Linux version.
|
||||||
|
The windows version is also lacking --list-devices and --serial.
|
||||||
|
|
||||||
Examples
|
Examples
|
||||||
--------
|
--------
|
||||||
@@ -254,21 +254,22 @@ Udev rules
|
|||||||
This is thanks to user Abigail on github. If you want to automatically feed
|
This is thanks to user Abigail on github. If you want to automatically feed
|
||||||
random data into /dev/random when the TRNG is plugged in, you can ask Linux to
|
random data into /dev/random when the TRNG is plugged in, you can ask Linux to
|
||||||
do this by creating a file in etc/udev/rules.d.
|
do this by creating a file in etc/udev/rules.d.
|
||||||
|
|
||||||
It relies on the systemd service "infnoise.service" provided under init_scripts, as udev is not designed to start long-running processes.
|
It relies on the systemd service "infnoise.service" provided under init_scripts, as udev is not designed to start long-running processes.
|
||||||
|
|
||||||
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", SYMLINK+="infnoise"
|
SUBSYSTEM=="tty", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", SYMLINK+="infnoise"
|
||||||
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015" ,TAG+="systemd", ENV{SYSTEMD_WANTS}="infnoise.service"
|
ACTION=="add", SUBSYSTEM=="usb", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015" ,TAG+="systemd", ENV{SYSTEMD_WANTS}="infnoise.service"
|
||||||
|
|
||||||
This also adds a symlink so the device removal can also be reacted on.
|
This also adds a symlink so the device removal can also be reacted on.
|
||||||
|
|
||||||
I personally run the infnoise tool by hand from a bash shell, typically to test devices like this:
|
I personally run the infnoise tool by hand from a bash shell, typically to test devices like this:
|
||||||
|
|
||||||
$ sudo ./infnoise --debug --no-output
|
$ sudo ./infnoise --debug --no-output
|
||||||
|
|
||||||
To avoid having to type 'sudo' each time, I created the following udev rules,
|
To avoid having to type 'sudo' each time, I created the following udev rules,
|
||||||
which worked on my particular Ubuntu 14.04 based laptop:
|
which worked on my particular Ubuntu 14.04 based laptop:
|
||||||
|
|
||||||
$ cat 30-infnoise.rules
|
$ cat 30-infnoise.rules
|
||||||
SUBSYSTEM=="usb", ATTRS{idProduct}=="6015", ATTRS{idVendor}=="0403", GROUP="dialout", MODE="0664"
|
SUBSYSTEM=="usb", ATTRS{idProduct}=="6015", ATTRS{idVendor}=="0403", GROUP="dialout", MODE="0664"
|
||||||
|
|
||||||
Note that my username is in the dialout group.
|
Note that my username is in the dialout group.
|
||||||
|
|||||||
@@ -1,13 +1,23 @@
|
|||||||
# Maintainer: Manuel Domke <info@13-37.org>
|
# Maintainer: Manuel Domke <info@13-37.org>
|
||||||
pkgname=infnoise
|
|
||||||
pkgdesc='Infinite Noise TRNG'
|
_pkgname=infnoise
|
||||||
license=('open')
|
|
||||||
|
pkgname=${_pkgname}
|
||||||
|
pkgver=0.2.6.r86.g453234b
|
||||||
|
pkgdesc="Infinite Noise TRNG - The world's easiest TRNG to get right"
|
||||||
|
license=('custom:CC0')
|
||||||
url='https://github.com/13-37-org/infnoise'
|
url='https://github.com/13-37-org/infnoise'
|
||||||
depends=('libftdi-compat')
|
depends=('libftdi-compat')
|
||||||
makedepends=()
|
makedepends=("git")
|
||||||
source=('git+https://github.com/13-37-org/infnoise.git')
|
source=('git+https://github.com/13-37-org/infnoise')
|
||||||
md5sums=('SKIP')
|
sha256sums=("SKIP")
|
||||||
install='INSTALL'
|
install='INSTALL'
|
||||||
|
|
||||||
|
pkgver() {
|
||||||
|
cd "${_pkgname}"
|
||||||
|
git describe --long --tags | sed 's/-/.r/;s/-/./'
|
||||||
|
}
|
||||||
|
|
||||||
build() {
|
build() {
|
||||||
cd "${srcdir}/infnoise/software/"
|
cd "${srcdir}/infnoise/software/"
|
||||||
make -f Makefile.linux
|
make -f Makefile.linux
|
||||||
@@ -21,5 +31,3 @@ package() {
|
|||||||
install -Dvm644 "${srcdir}/infnoise/software/init_scripts/infnoise.conf.systemd" "${pkgdir}/etc/infnoise.conf"
|
install -Dvm644 "${srcdir}/infnoise/software/init_scripts/infnoise.conf.systemd" "${pkgdir}/etc/infnoise.conf"
|
||||||
install -Dvm644 "${srcdir}/infnoise/software/init_scripts/infnoise.service.bin" "${pkgdir}/usr/lib/systemd/system/infnoise.service"
|
install -Dvm644 "${srcdir}/infnoise/software/init_scripts/infnoise.service.bin" "${pkgdir}/usr/lib/systemd/system/infnoise.service"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh -ex
|
||||||
|
|
||||||
VERSION=`git --no-pager describe --tags --always | cut -d'-' -f1`
|
VERSION=`git --no-pager describe --tags --always | cut -d'-' -f1`
|
||||||
PKGREL=`git --no-pager describe --tags --always | cut -d'-' -f2`
|
PKGREL=`git --no-pager describe --tags --always | cut -d'-' -f2`
|
||||||
@@ -9,43 +9,31 @@ if [ $VERSION == $PKGREL ]; then # this is a release
|
|||||||
PKGREL=0
|
PKGREL=0
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
SIGNPACKAGE=1
|
||||||
|
|
||||||
SIGNPACKAGE=true
|
|
||||||
while test $# -gt 0
|
while test $# -gt 0
|
||||||
do
|
do
|
||||||
case "$1" in
|
case "$1" in
|
||||||
--notsigned) SIGNPACKAGE=false
|
--notsigned) SIGNPACKAGE=0
|
||||||
;;
|
;;
|
||||||
esac
|
esac
|
||||||
shift
|
shift
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
# x86_64
|
# x86_64
|
||||||
mkdir -p x86_64
|
mkdir -p x86_64
|
||||||
cd x86_64
|
cd x86_64
|
||||||
|
|
||||||
cp ../PKGBUILD.arch PKGBUILD
|
cp ../build-scripts/PKGBUILD.arch PKGBUILD
|
||||||
cp ../INSTALL.arch INSTALL
|
cp ../build-scripts/INSTALL.arch INSTALL
|
||||||
|
|
||||||
sed -i "s|.*source.*=.*(.*).*|source=('git+$GITREPO')|g" PKGBUILD
|
sed -i "s|.*source.*=.*(.*).*|source=('git+$GITREPO')|g" PKGBUILD
|
||||||
echo "pkgver=$VERSION.$PKGREL" >> PKGBUILD
|
#echo "pkgver=$VERSION.$PKGREL" >> PKGBUILD
|
||||||
echo "pkgrel=1" >> PKGBUILD
|
echo "pkgrel=1" >> PKGBUILD
|
||||||
echo "arch=('x86_64')" >> PKGBUILD
|
echo "arch=('x86_64')" >> PKGBUILD
|
||||||
ls -lah
|
|
||||||
if [ "$SIGNPACKAGE" = true ]; then
|
makepkg -f
|
||||||
makepkg -f --sign --key 975DC25C4E730A3C
|
|
||||||
else
|
if [ $SIGNPACKAGE -eq 1 ]; then
|
||||||
makepkg -f
|
PKGEXT='.pkg.tar.xz' makepkg --packagelist | xargs -L1 gpg --sign
|
||||||
fi
|
fi
|
||||||
cd ..
|
|
||||||
|
|
||||||
# x86
|
|
||||||
mkdir -p x86
|
|
||||||
cd x86
|
|
||||||
|
|
||||||
cp ../PKGBUILD.arch PKGBUILD
|
|
||||||
cp ../INSTALL.arch INSTALL
|
|
||||||
echo "pkgver=$VERSION.$PKGREL" >> PKGBUILD
|
|
||||||
echo "pkgrel=1" >> PKGBUILD
|
|
||||||
echo "arch=('i686')" >> PKGBUILD
|
|
||||||
makechrootpkg -r /x86 -U jenkins -- --sign --key 975DC25C4E730A3C
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh -ex
|
||||||
|
|
||||||
VERSION=`git --no-pager describe --tags --always | cut -d'-' -f1`
|
VERSION=`git --no-pager describe --tags --always | cut -d'-' -f1`
|
||||||
RELEASE=`git --no-pager describe --tags --always | cut -d'-' -f2`
|
RELEASE=`git --no-pager describe --tags --always | cut -d'-' -f2`
|
||||||
@@ -12,15 +12,20 @@ ARCH=$2
|
|||||||
PATH=$PATH:/sbin/
|
PATH=$PATH:/sbin/
|
||||||
|
|
||||||
mkdir -p SOURCES
|
mkdir -p SOURCES
|
||||||
tar -czf SOURCES/infnoise.tar.gz . --exclude="SOURCES"
|
tar -czf SOURCES/infnoise-$VERSION.tar.gz . --exclude="SOURCES"
|
||||||
|
|
||||||
mkdir -p BUILD SPECS RPMS SRPMS
|
mkdir -p BUILD SPECS RPMS SRPMS
|
||||||
|
|
||||||
cp build-scripts/infnoise.spec build-scripts/infnoise-tools.spec SPECS
|
cp build-scripts/infnoise.spec build-scripts/infnoise-tools.spec SPECS
|
||||||
sed -i -- 's/__VERSION__/'$VERSION'/g' SPECS/infnoise.spec
|
sed -i -- 's/__VERSION__/'$VERSION'/g' SPECS/infnoise.spec
|
||||||
sed -i -- 's/__RELEASE__/'$RELEASE'/g' SPECS/infnoise.spec
|
sed -i -- 's/__RELEASE__/'$RELEASE'/g' SPECS/infnoise.spec
|
||||||
|
|
||||||
sed -i -- 's/__VERSION__/'$VERSION'/g' SPECS/infnoise-tools.spec
|
sed -i -- 's/__VERSION__/'$VERSION'/g' SPECS/infnoise-tools.spec
|
||||||
sed -i -- 's/__RELEASE__/'$RELEASE'/g' SPECS/infnoise-tools.spec
|
sed -i -- 's/__RELEASE__/'$RELEASE'/g' SPECS/infnoise-tools.spec
|
||||||
|
|
||||||
|
pwd
|
||||||
|
|
||||||
rpmbuild --define "_topdir `pwd`" -ba SPECS/infnoise.spec
|
rpmbuild --define "_topdir `pwd`" -ba SPECS/infnoise.spec
|
||||||
|
|
||||||
|
pwd
|
||||||
|
|
||||||
rpmbuild --define "_topdir `pwd`" -ba SPECS/infnoise-tools.spec
|
rpmbuild --define "_topdir `pwd`" -ba SPECS/infnoise-tools.spec
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/bin/bash
|
#!/bin/sh -ex
|
||||||
|
|
||||||
ARCH=$1
|
ARCH=$1
|
||||||
VERSION=`git --no-pager describe --tags --always`
|
VERSION=`git --no-pager describe --tags --always`
|
||||||
@@ -30,9 +30,7 @@ if [ ! -e build/usr/sbin/infnoise ] ; then
|
|||||||
exit 1;
|
exit 1;
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# debuild -b -uc -us
|
fakeroot dpkg -b build/ infnoise_${VERSION}_${ARCH}.deb
|
||||||
dpkg -b build/ infnoise_${VERSION}_${ARCH}.deb
|
|
||||||
#debbuild -uc -us
|
|
||||||
|
|
||||||
### build infnoise-tools ###
|
### build infnoise-tools ###
|
||||||
rm -rf build
|
rm -rf build
|
||||||
@@ -40,7 +38,7 @@ rm -rf build
|
|||||||
cd tools
|
cd tools
|
||||||
mkdir -p build/usr/bin/
|
mkdir -p build/usr/bin/
|
||||||
|
|
||||||
make -f Makefile.linux
|
make -f Makefile
|
||||||
|
|
||||||
cp passgen build/usr/bin/infnoise-passgen
|
cp passgen build/usr/bin/infnoise-passgen
|
||||||
cp dice build/usr/bin/infnoise-dice
|
cp dice build/usr/bin/infnoise-dice
|
||||||
@@ -56,7 +54,7 @@ cp ../build-scripts/control.debian.tools build/DEBIAN/control
|
|||||||
echo "Version: $VERSION" >> build/DEBIAN/control
|
echo "Version: $VERSION" >> build/DEBIAN/control
|
||||||
echo "Architecture: $ARCH" >> build/DEBIAN/control
|
echo "Architecture: $ARCH" >> build/DEBIAN/control
|
||||||
|
|
||||||
dpkg -b build/ infnoise-tools_${VERSION}_${ARCH}.deb
|
fakeroot dpkg -b build/ infnoise-tools_${VERSION}_${ARCH}.deb
|
||||||
|
|
||||||
rm -rf build
|
rm -rf build
|
||||||
cd ..
|
cd ..
|
||||||
@@ -77,6 +75,6 @@ cp build-scripts/control.debian.lib build/DEBIAN/control
|
|||||||
echo "Version: $VERSION" >> build/DEBIAN/control
|
echo "Version: $VERSION" >> build/DEBIAN/control
|
||||||
echo "Architecture: $ARCH" >> build/DEBIAN/control
|
echo "Architecture: $ARCH" >> build/DEBIAN/control
|
||||||
|
|
||||||
dpkg -b build/ libinfnoise_${VERSION}_${ARCH}.deb
|
fakeroot dpkg -b build/ libinfnoise_${VERSION}_${ARCH}.deb
|
||||||
|
|
||||||
rm -rf build
|
rm -rf build
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ Version: __VERSION__
|
|||||||
Release: __RELEASE__
|
Release: __RELEASE__
|
||||||
Summary: Infinite Noise TRNG
|
Summary: Infinite Noise TRNG
|
||||||
Group: Applications/Security
|
Group: Applications/Security
|
||||||
License: GPL
|
License: CC0
|
||||||
URL: https://github.com/13-37-org/infnoise
|
URL: https://github.com/13-37-org/infnoise
|
||||||
Vendor: 13-37.org
|
Vendor: 13-37.org
|
||||||
Source: infnoise.tar.gz
|
Source: infnoise-%{version}.tar.gz
|
||||||
Prefix: %{_prefix}
|
Prefix: %{_prefix}
|
||||||
Packager: Manuel Domke
|
Packager: Manuel Domke
|
||||||
BuildRoot: %{_tmppath}/%{name}-root
|
BuildRoot: %{_tmppath}/%{name}-root
|
||||||
@@ -14,11 +14,11 @@ BuildRoot: %{_tmppath}/%{name}-root
|
|||||||
%description
|
%description
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
tar -xzf ../SOURCES/infnoise.tar.gz
|
tar -xzf ../SOURCES/infnoise-%{version}.tar.gz
|
||||||
|
|
||||||
%build
|
%build
|
||||||
cd tools
|
cd tools
|
||||||
make -f Makefile.linux
|
make
|
||||||
|
|
||||||
%install
|
%install
|
||||||
#make DESTDIR=$RPM_BUILD_ROOT install
|
#make DESTDIR=$RPM_BUILD_ROOT install
|
||||||
|
|||||||
@@ -3,10 +3,10 @@ Version: __VERSION__
|
|||||||
Release: __RELEASE__
|
Release: __RELEASE__
|
||||||
Summary: Infinite Noise TRNG
|
Summary: Infinite Noise TRNG
|
||||||
Group: Applications/Security
|
Group: Applications/Security
|
||||||
License: GPL
|
License: CC0
|
||||||
URL: https://github.com/manuel-domke/infnoise
|
URL: https://github.com/manuel-domke/infnoise
|
||||||
Vendor: 13-37.org
|
Vendor: 13-37.org
|
||||||
Source: infnoise.tar.gz
|
Source: infnoise-%{version}.tar.gz
|
||||||
Prefix: %{_prefix}
|
Prefix: %{_prefix}
|
||||||
Packager: Manuel Domke
|
Packager: Manuel Domke
|
||||||
BuildRoot: %{_tmppath}/%{name}-root
|
BuildRoot: %{_tmppath}/%{name}-root
|
||||||
@@ -14,7 +14,7 @@ BuildRoot: %{_tmppath}/%{name}-root
|
|||||||
%description
|
%description
|
||||||
|
|
||||||
%prep
|
%prep
|
||||||
tar -xzf ../SOURCES/infnoise.tar.gz
|
tar -xzf ../SOURCES/infnoise-%{version}.tar.gz
|
||||||
|
|
||||||
%build
|
%build
|
||||||
make -f Makefile.linux
|
make -f Makefile.linux
|
||||||
|
|||||||
@@ -16,11 +16,22 @@ This simple version just prints the serials to stdout. Call like this:
|
|||||||
|
|
||||||
#### randomserver.py
|
#### randomserver.py
|
||||||
|
|
||||||
A simple webserver based on the web.py framework to serve random data via a REST interface. An example is hosted at https://rng.13-37.org (running on a Raspberry Pi in Amsterdam, thanks to pcextreme.nl!)
|
A simple webserver based on the web.py framework to serve random data via a REST interface.
|
||||||
|
An improved version is hosted on [rng.13-37.org](https://rng.13-37.org).
|
||||||
It has only two resources: `/get` and `/status`.
|
|
||||||
|
|
||||||
## libinfnoise
|
## libinfnoise
|
||||||
|
|
||||||
TODO
|
Under libinfnoise/examples you'll find two examples on how to integrate libinfnoise, which consist of the following functions:
|
||||||
|
|
||||||
|
// returns a struct of infnoise_devlist_node listing all connected FTDI FT240 devices by their USB descriptors
|
||||||
|
devlist_node listUSBDevices(char **message);
|
||||||
|
|
||||||
|
// initialize the Infinite Noise TRNG - must be called once before readData() works
|
||||||
|
bool initInfnoise(struct infnoise_context *context, char *serial, bool keccak, bool debug);
|
||||||
|
|
||||||
|
// Reads some bytes from the TRNG and stores them in the "result" byte array.
|
||||||
|
// The array has to be of sufficient size. Please refer to the example programs.
|
||||||
|
// (64 byte for normal operation or 128byte for multiplier mode)
|
||||||
|
uint32_t readData(struct infnoise_context *context, uint8_t *result, bool raw, uint32_t outputMultiplier);
|
||||||
|
|
||||||
|
The infnoise_context struct is also part of the interface. See [libinfnoise.h](../libinfnoise.h) for it's definition and the interface documentation.
|
||||||
|
|||||||
@@ -18,19 +18,16 @@ int main()
|
|||||||
struct infnoise_context context;
|
struct infnoise_context context;
|
||||||
|
|
||||||
if (!initInfnoise(&context, serial, initKeccak, debug)) {
|
if (!initInfnoise(&context, serial, initKeccak, debug)) {
|
||||||
fputs(context.message, stderr);
|
fprintf(stdout, "Error: %s\n", context.message);
|
||||||
return 1; // ERROR
|
return 1; // ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
uint32_t resultSize;
|
uint32_t resultSize;
|
||||||
if (multiplier <= 1 || initKeccak == false) {
|
if (multiplier <= 2 || initKeccak == false) {
|
||||||
resultSize = 32u;
|
resultSize = 64u;
|
||||||
} else if (multiplier==2) {
|
|
||||||
resultSize=64;
|
|
||||||
} else {
|
} else {
|
||||||
resultSize = 128u;
|
resultSize = 128u;
|
||||||
}
|
}
|
||||||
fprintf(stdout, "Error: %i\n", resultSize);
|
|
||||||
|
|
||||||
// read and print in a loop (until 1M is read)
|
// read and print in a loop (until 1M is read)
|
||||||
uint64_t totalBytesWritten = 0u;
|
uint64_t totalBytesWritten = 0u;
|
||||||
@@ -47,8 +44,8 @@ int main()
|
|||||||
fprintf(stderr, "Error: %s\n", context.message);
|
fprintf(stderr, "Error: %s\n", context.message);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "infnoise bytes read: %lu\n", (unsigned long) bytesWritten);
|
|
||||||
totalBytesWritten += bytesWritten;
|
totalBytesWritten += bytesWritten;
|
||||||
|
fprintf(stderr, "infnoise bytes read: %lu\n", (unsigned long) totalBytesWritten);
|
||||||
|
|
||||||
// print as many bytes as readData told us
|
// print as many bytes as readData told us
|
||||||
fwrite(result, 1, bytesWritten, stdout);
|
fwrite(result, 1, bytesWritten, stdout);
|
||||||
|
|||||||
@@ -17,15 +17,14 @@ int main()
|
|||||||
// initialize hardware and health monitor
|
// initialize hardware and health monitor
|
||||||
struct infnoise_context context;
|
struct infnoise_context context;
|
||||||
if (!initInfnoise(&context, serial, initKeccak, debug)) {
|
if (!initInfnoise(&context, serial, initKeccak, debug)) {
|
||||||
fprintf(stdout, "erri: %s\n", "");
|
fprintf(stderr, "Error: %s\n", context.message);
|
||||||
fputs(context.message, stderr);
|
|
||||||
return 1; // ERROR
|
return 1; // ERROR
|
||||||
}
|
}
|
||||||
|
|
||||||
// fixed result size of 512 bit (32byte)
|
// fixed result size of 512 bit (64byte)
|
||||||
uint8_t resultSize = 32u;
|
uint8_t resultSize = 64u;
|
||||||
|
|
||||||
// read and print in a loop (until 1M is read)
|
// read and print in a loop (until 1MB is read)
|
||||||
uint64_t totalBytesWritten = 0u;
|
uint64_t totalBytesWritten = 0u;
|
||||||
while (totalBytesWritten < 1000000) {
|
while (totalBytesWritten < 1000000) {
|
||||||
uint8_t result[resultSize];
|
uint8_t result[resultSize];
|
||||||
@@ -42,13 +41,14 @@ int main()
|
|||||||
fprintf(stderr, "Error: %s\n", context.message);
|
fprintf(stderr, "Error: %s\n", context.message);
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
fprintf(stderr, "infnoise bytes read: %lu\n", (unsigned long) bytesWritten);
|
|
||||||
|
|
||||||
// print as many bytes as readData told us
|
// print as many bytes as readData told us
|
||||||
fwrite(result, 1, bytesWritten, stdout);
|
fwrite(result, 1, bytesWritten, stdout);
|
||||||
|
|
||||||
// sum up
|
// sum up
|
||||||
totalBytesWritten += bytesWritten;
|
totalBytesWritten += bytesWritten;
|
||||||
|
fprintf(stderr, "bytes read: %lu\n", (unsigned long) totalBytesWritten);
|
||||||
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
21
software/healthcheck.1
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH HEALTHCHECK 1 "June 25 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
healthcheck \- health check
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B healthcheck
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B healthcheck
|
||||||
|
performs a detailed health check on the values generated by the
|
||||||
|
system's random number generator.
|
||||||
|
.PP
|
||||||
|
It attempts to guess the next bit based on the bits read so far, and
|
||||||
|
adjusts the measured entropy based on the deviation from the guess.
|
||||||
|
.PP
|
||||||
|
Once enough data has been gathered, it outputs a detailed report
|
||||||
|
showing the results for each value seen in the stream.
|
||||||
|
.SH OPTIONS
|
||||||
|
This program has no options.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
74
software/infnoise.8
Normal file
@@ -0,0 +1,74 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH INFNOISE 8 "June 25 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
infnoise \- Infinite Noise TRNG driver
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B infnoise \-\-help
|
||||||
|
.br
|
||||||
|
.B infnoise \-\-version
|
||||||
|
.br
|
||||||
|
.B infnoise \-\-list\-devices
|
||||||
|
.br
|
||||||
|
.B infnoise
|
||||||
|
.RB [ \-\-debug ]
|
||||||
|
.RB [ \-\-dev\-random ]
|
||||||
|
.RB [ \-\-raw ]
|
||||||
|
.RB [ \-\-multiplier
|
||||||
|
.RI < value >]
|
||||||
|
.RB [ \-\-no\-output ]
|
||||||
|
.RB [ \-\-pidfile
|
||||||
|
.RI < file >]
|
||||||
|
.RB [ \-\-daemon ]
|
||||||
|
.RB [ \-\-serial
|
||||||
|
.RI < serial >]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B infnoise
|
||||||
|
provides access to the Infinite Noise True Random Number Generator and
|
||||||
|
allows the data it generates to be fed into the system's random number
|
||||||
|
generator.
|
||||||
|
.PP
|
||||||
|
.B infnoise \-\-help
|
||||||
|
shows a short summary of the options.
|
||||||
|
.PP
|
||||||
|
.B infnoise \-\-version
|
||||||
|
displays the program's version information.
|
||||||
|
.PP
|
||||||
|
.B infnoise \-\-list\-devices
|
||||||
|
lists all the supported TRNG devices present on the system.
|
||||||
|
.PP
|
||||||
|
.B infnoise
|
||||||
|
reads random data from a TRNG and outputs filtered random data to its
|
||||||
|
standard output. The various options control the program's behaviour.
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.B \-\-debug
|
||||||
|
measures the quality of the data obtained from the TRNG. It is
|
||||||
|
typically used with \-\-no\-output as a sanity test.
|
||||||
|
.TP
|
||||||
|
.B \-\-dev\-random
|
||||||
|
adds the filtered data to the system's entropy pool instead of sending
|
||||||
|
it to its standard output.
|
||||||
|
.TP
|
||||||
|
.B \-\-raw
|
||||||
|
disables output whitening.
|
||||||
|
.TP
|
||||||
|
.BR \-\-multiplier <\fIvalue\fP>
|
||||||
|
writes 256 bits ×
|
||||||
|
.I value
|
||||||
|
for every 512 bits written to the Keccak sponge; the default of 0
|
||||||
|
means to write all the available entropy, without multiplying it.
|
||||||
|
.TP
|
||||||
|
.B \-\-no\-output
|
||||||
|
disables output of random data.
|
||||||
|
.TP
|
||||||
|
.BR \-\-pidfile <\fIfile\fP>
|
||||||
|
stores the process' identifier in
|
||||||
|
.IR file .
|
||||||
|
.TP
|
||||||
|
.B \-\-daemon
|
||||||
|
starts the program as a daemon.
|
||||||
|
.TP
|
||||||
|
.BR \-\-serial <\fIserial\fP>
|
||||||
|
uses the device matching the specified
|
||||||
|
.IR serial .
|
||||||
@@ -20,7 +20,6 @@
|
|||||||
#include <getopt.h>
|
#include <getopt.h>
|
||||||
#include "infnoise.h"
|
#include "infnoise.h"
|
||||||
#include "libinfnoise.h"
|
#include "libinfnoise.h"
|
||||||
#include "KeccakF-1600-interface.h"
|
|
||||||
|
|
||||||
static void initOpts(struct opt_struct *opts) {
|
static void initOpts(struct opt_struct *opts) {
|
||||||
opts->outputMultiplier = 0u;
|
opts->outputMultiplier = 0u;
|
||||||
@@ -250,7 +249,7 @@ int main(int argc, char **argv) {
|
|||||||
close(devRandomFD);
|
close(devRandomFD);
|
||||||
#endif
|
#endif
|
||||||
#if defined(__APPLE__)
|
#if defined(__APPLE__)
|
||||||
message = "dev/random not supported on macOS";
|
context.message = "dev/random not supported on macOS";
|
||||||
fprintf(stderr, "Error: %s\n", context.message);
|
fprintf(stderr, "Error: %s\n", context.message);
|
||||||
return 1;
|
return 1;
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
23
software/init_scripts/infnoise.service.8
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH INFNOISE.SERVICE 1 "June 25 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
infnoise.service \- systemd service for infnoise
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B systemctl
|
||||||
|
.BR start | status | restart | stop
|
||||||
|
.B infnoise
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B infnoise.service
|
||||||
|
allows systemd to manage the
|
||||||
|
.B infnoise
|
||||||
|
daemon.
|
||||||
|
.SH FILES
|
||||||
|
.TP
|
||||||
|
.B /etc/infnoise.conf
|
||||||
|
service configuration file
|
||||||
|
.TP
|
||||||
|
.B /var/run/infnoise.pid
|
||||||
|
service process identifier
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
@@ -337,7 +337,7 @@ uint32_t readData(struct infnoise_context *context, uint8_t *result, bool raw, u
|
|||||||
|
|
||||||
context->bytesWritten += bytesToWrite;
|
context->bytesWritten += bytesToWrite;
|
||||||
context->numBits -= bytesToWrite * 8u;
|
context->numBits -= bytesToWrite * 8u;
|
||||||
return 1024/8u;
|
return bytesToWrite;
|
||||||
} else { // collect new entropy
|
} else { // collect new entropy
|
||||||
uint8_t inBuf[BUFLEN];
|
uint8_t inBuf[BUFLEN];
|
||||||
struct timespec start;
|
struct timespec start;
|
||||||
|
|||||||
@@ -36,7 +36,7 @@ struct infnoise_devlist_node {
|
|||||||
typedef struct infnoise_devlist_node *devlist_node;
|
typedef struct infnoise_devlist_node *devlist_node;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* returns a struct of infnoise_devlist_node listing all connected FTDI FT240 devices by its USB descriptors,
|
* returns a struct of infnoise_devlist_node listing all connected FTDI FT240 devices by their USB descriptors
|
||||||
*
|
*
|
||||||
* parameters:
|
* parameters:
|
||||||
* - message: pointer for error message
|
* - message: pointer for error message
|
||||||
@@ -45,9 +45,8 @@ typedef struct infnoise_devlist_node *devlist_node;
|
|||||||
*/
|
*/
|
||||||
devlist_node listUSBDevices(char **message);
|
devlist_node listUSBDevices(char **message);
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* initialize the Infinite Noise TRNG - must be called once before readData() works.
|
* initialize the Infinite Noise TRNG - must be called once before readData() works
|
||||||
*
|
*
|
||||||
* parameters:
|
* parameters:
|
||||||
* - context: pointer to infnoise_context struct
|
* - context: pointer to infnoise_context struct
|
||||||
@@ -61,10 +60,12 @@ bool initInfnoise(struct infnoise_context *context, char *serial, bool keccak, b
|
|||||||
/*
|
/*
|
||||||
* Reads some bytes from the TRNG and stores them in the "result" byte array.
|
* Reads some bytes from the TRNG and stores them in the "result" byte array.
|
||||||
* The array has to be of sufficient size. Please refer to the example programs.
|
* The array has to be of sufficient size. Please refer to the example programs.
|
||||||
|
* (64 byte for normal operation or 128byte for multiplier mode)
|
||||||
*
|
*
|
||||||
* After each read operation, the infnoise_context's errorFlag must be checked,
|
* After every read operation, the infnoise_context's errorFlag must be checked,
|
||||||
* and the data from this call has to be discarded!
|
* and the data from this call has to be discarded when it returns true!
|
||||||
* Detailed error messages can be found in context->message.
|
*
|
||||||
|
* Detailed error messages can then be found in context->message.
|
||||||
*
|
*
|
||||||
* parameters:
|
* parameters:
|
||||||
* - context: infnoise_context struct with device pointer and state variables
|
* - context: infnoise_context struct with device pointer and state variables
|
||||||
@@ -72,6 +73,6 @@ bool initInfnoise(struct infnoise_context *context, char *serial, bool keccak, b
|
|||||||
* - raw: boolean flag for raw or whitened output
|
* - raw: boolean flag for raw or whitened output
|
||||||
* - outputMultiplier: only used for whitened output
|
* - outputMultiplier: only used for whitened output
|
||||||
*
|
*
|
||||||
* returns: number of bytes written to the array
|
* returns: number of bytes written to the byte-array
|
||||||
*/
|
*/
|
||||||
uint32_t readData(struct infnoise_context *context, uint8_t *result, bool raw, uint32_t outputMultiplier);
|
uint32_t readData(struct infnoise_context *context, uint8_t *result, bool raw, uint32_t outputMultiplier);
|
||||||
|
|||||||
@@ -1,4 +1,10 @@
|
|||||||
CFLAGS=-Wall -Wextra -Werror -std=c99 -O3
|
CFLAGS=-Wall -Wextra -Werror -std=c99 -O3 -I $(shell brew --prefix libftdi || echo /usr)/include/libftdi1
|
||||||
|
UNAME_S := $(shell uname -s)
|
||||||
|
ifeq ($(UNAME_S),Darwin)
|
||||||
|
LIBRT=
|
||||||
|
else
|
||||||
|
LIBRT=-lrt
|
||||||
|
endif
|
||||||
|
|
||||||
all: passgen healthcheck findlongest entcheck hex2bin bin2hex flipbits dice
|
all: passgen healthcheck findlongest entcheck hex2bin bin2hex flipbits dice
|
||||||
|
|
||||||
@@ -6,10 +12,10 @@ passgen: passgen.c
|
|||||||
$(CC) $(CFLAGS) -o passgen passgen.c -lm
|
$(CC) $(CFLAGS) -o passgen passgen.c -lm
|
||||||
|
|
||||||
healthcheck: ../healthcheck.c
|
healthcheck: ../healthcheck.c
|
||||||
$(CC) $(CFLAGS) -D TEST_HEALTHCHECK -o healthcheck ../healthcheck.c -lm -lrt
|
$(CC) $(CFLAGS) -D TEST_HEALTHCHECK -o healthcheck ../healthcheck.c -lm $(LIBRT)
|
||||||
|
|
||||||
entcheck: entcheck.c
|
entcheck: entcheck.c
|
||||||
$(CC) $(CFLAGS) -o entcheck entcheck.c -lm -lrt
|
$(CC) $(CFLAGS) -o entcheck entcheck.c -lm $(LIBRT)
|
||||||
|
|
||||||
findlongest: findlongest.c
|
findlongest: findlongest.c
|
||||||
$(CC) $(CFLAGS) -o findlongest findlongest.c
|
$(CC) $(CFLAGS) -o findlongest findlongest.c
|
||||||
|
|||||||
16
software/tools/bin2hex.1
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH BIN2HEX 1 "June 22 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
bin2hex \- display binary content as hexadecimal
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B bin2hex
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B bin2hex
|
||||||
|
reads from its standard input, and outputs the value of each byte it
|
||||||
|
reads as a hexadecimal pair.
|
||||||
|
.PP
|
||||||
|
.SH OPTIONS
|
||||||
|
This program has no options.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
29
software/tools/dice.1
Normal file
@@ -0,0 +1,29 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH DICE 1 "June 22 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
dice \- roll dice
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B dice
|
||||||
|
.RI < file >
|
||||||
|
.RI < dice >
|
||||||
|
.RI < sides >
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B dice
|
||||||
|
simulates a dice roll, using data from
|
||||||
|
.I file
|
||||||
|
to roll
|
||||||
|
.I dice
|
||||||
|
dice with
|
||||||
|
.I sides
|
||||||
|
sides each.
|
||||||
|
.PP
|
||||||
|
A common value for
|
||||||
|
.I file
|
||||||
|
is
|
||||||
|
.BR /dev/random .
|
||||||
|
.PP
|
||||||
|
.SH OPTIONS
|
||||||
|
This program has no options.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
37
software/tools/entcheck.1
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH ENTCHECK 1 "June 22 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
entcheck \- estimates the entropy of a stream
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B entcheck
|
||||||
|
.RB [ \-N
|
||||||
|
.RI < bits >]
|
||||||
|
.RB [ \-s
|
||||||
|
.RI < streams >]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B entcheck
|
||||||
|
estimates the entropy of its standard input.
|
||||||
|
It uses the previous
|
||||||
|
.I bits
|
||||||
|
bits (16 by default) to predict the next bit, and estimates the
|
||||||
|
entropy based on the level of surprise, that is to say the base-2
|
||||||
|
logarithm of the probability of seeing the given string of bits.
|
||||||
|
.PP
|
||||||
|
In some scenarios, such as the output of an 8-bit DAC, some bits are
|
||||||
|
special: entropy then needs to be predicted per bit over the width of
|
||||||
|
the input data. The
|
||||||
|
.B \-s
|
||||||
|
option sets the width of the input data in this case.
|
||||||
|
.PP
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.BR \-N " <\fIbits\fP>"
|
||||||
|
specifies the number of
|
||||||
|
.I bits
|
||||||
|
to use to predict the next bit.
|
||||||
|
.TP
|
||||||
|
.BR \-s " <\fIstreams\fP>"
|
||||||
|
specifies the number of streams to use.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
25
software/tools/findlongest.1
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH FINDLONGEST 1 "June 25 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
findlongest \- finds the longest repeating sequence
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B findlongest \-\-test
|
||||||
|
.br
|
||||||
|
.B findlongest
|
||||||
|
.RI < file >
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B findlongest
|
||||||
|
finds the longest repeating sequence of bits in the given
|
||||||
|
.IR file ,
|
||||||
|
up to 34
|
||||||
|
bits in length.
|
||||||
|
.PP
|
||||||
|
.SH OPTIONS
|
||||||
|
.TP
|
||||||
|
.B \-\-test
|
||||||
|
generates random data (using
|
||||||
|
.BR rand (3))
|
||||||
|
instead of reading data from a file.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
19
software/tools/flipbits.1
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH FLIPBITS 1 "June 24 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
flipbits \- flip bits
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B flipbits
|
||||||
|
.RI [ width ]
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B infnoise-flipbits
|
||||||
|
flips the bits in its input data (from standard input),
|
||||||
|
.I width
|
||||||
|
bits at a time (8 by default), and outputs the result to standard
|
||||||
|
output.
|
||||||
|
.PP
|
||||||
|
.SH OPTIONS
|
||||||
|
This program has no options.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
19
software/tools/hex2bin.1
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH HEX2BIN 1 "June 22 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
hex2bin \- convert hexadecimal to the encoded values
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B hex2bin
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B hex2bin
|
||||||
|
reads from its standard input, ignoring any byte which isn’t a valid
|
||||||
|
hexadecimal digit, and combines any two successive hexadecimal digits
|
||||||
|
into the corresponding byte, which it outputs to its standard output.
|
||||||
|
Only complete bytes are output, so an odd number of hexadecimal digits
|
||||||
|
as input will drop the last digit.
|
||||||
|
.PP
|
||||||
|
.SH OPTIONS
|
||||||
|
This program has no options.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
19
software/tools/passgen.1
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
.\" Hey, EMACS: -*- nroff -*-
|
||||||
|
.TH PASSGEN 1 "June 25 2018"
|
||||||
|
.\" Please adjust this date whenever revising the manpage.
|
||||||
|
.SH NAME
|
||||||
|
passgen \- generates passwords by rolling dice
|
||||||
|
.SH SYNOPSIS
|
||||||
|
.B passgen
|
||||||
|
.RI < file >
|
||||||
|
.RI < size >
|
||||||
|
.SH DESCRIPTION
|
||||||
|
.B passgen
|
||||||
|
generates an alphabetic password by rolling a 26-sided die, fed from
|
||||||
|
.IR file ,
|
||||||
|
.I size
|
||||||
|
times.
|
||||||
|
.SH OPTIONS
|
||||||
|
This program has no options.
|
||||||
|
.SH SEE ALSO
|
||||||
|
.BR infnoise (8).
|
||||||
@@ -37,7 +37,7 @@ resulting in 100.000 FIPS blocks with 20.000 bit each - and took two weeks.
|
|||||||
|
|
||||||
Make sure you have the following tools installed:
|
Make sure you have the following tools installed:
|
||||||
|
|
||||||
- rng-tools
|
- rng-tools (make sure to stop rngd during the test and uninstall/disable afterwards)
|
||||||
- ent
|
- ent
|
||||||
- dieharder
|
- dieharder
|
||||||
- pv
|
- pv
|
||||||
@@ -76,3 +76,5 @@ Directory structure created by a test run:
|
|||||||
- <testcase>-<multiplier>-<kbytes>K.log: log output of the infnoise utility
|
- <testcase>-<multiplier>-<kbytes>K.log: log output of the infnoise utility
|
||||||
- <testcase>-<multiplier>-<kbytes>K-pv.log: log output of pv
|
- <testcase>-<multiplier>-<kbytes>K-pv.log: log output of pv
|
||||||
- <testcase>-<multiplier>-<kbytes>K.out: random data produced in the test run
|
- <testcase>-<multiplier>-<kbytes>K.out: random data produced in the test run
|
||||||
|
|
||||||
|
In the already existing results folder you'll find results for major driver [releases] (https://github.com/13-37-org/infnoise/releases).
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 461 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 461 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 461 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 461 KiB After Width: | Height: | Size: 461 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 431 KiB After Width: | Height: | Size: 431 KiB |
|
Before Width: | Height: | Size: 60 KiB After Width: | Height: | Size: 60 KiB |
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 61 KiB After Width: | Height: | Size: 61 KiB |
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |
|
Before Width: | Height: | Size: 460 KiB After Width: | Height: | Size: 460 KiB |
|
Before Width: | Height: | Size: 62 KiB After Width: | Height: | Size: 62 KiB |