From 81f1c159955c46615004730b545e4f0a32bcc1a2 Mon Sep 17 00:00:00 2001 From: Manuel Domke Date: Sun, 31 Dec 2017 18:11:27 +0100 Subject: [PATCH 1/5] make systemd service configurable via /etc/infnoise.conf --- software/infnoise.c | 4 ++-- software/init_scripts/README.md | 5 +++-- software/init_scripts/infnoise.conf.systemd | 7 +++++++ software/init_scripts/infnoise.service.bin | 3 ++- software/init_scripts/infnoise.service.sbin | 3 ++- 5 files changed, 16 insertions(+), 6 deletions(-) create mode 100644 software/init_scripts/infnoise.conf.systemd diff --git a/software/infnoise.c b/software/infnoise.c index b556b58..bc3126b 100644 --- a/software/infnoise.c +++ b/software/infnoise.c @@ -290,8 +290,8 @@ int main(int argc, char **argv) xArg++; opts.serial = argv[xArg]; if(opts.serial == NULL || !strcmp("",opts.serial)) { - fputs("--serial without value\n", stderr); - return 1; + opts.serial = NULL; + fputs("WARNING: --serial without value\n", stderr); } } else if(!strcmp(argv[xArg], "--daemon")) { opts.daemon = true; diff --git a/software/init_scripts/README.md b/software/init_scripts/README.md index d657630..e32a3c3 100644 --- a/software/init_scripts/README.md +++ b/software/init_scripts/README.md @@ -14,6 +14,7 @@ which start the service when the Infinite Noise TRNG is connected and also stops - `infnoise.openrc`: OpenRC, ? - `infnoise.conf`: Upstart, tested in Ubuntu 14.04, 16.04 (requires upstart install) - `infnoise.service`: Systemd, works for CentOS, Ubuntu, Debian, ArchLinux -- `infnoise.service.bin`: Same as infnoise.service, binary path = /usr/bin/ -- `infnoise.service.sbin`: Same as infnoise.service, binary path = /usr/sbin/ +- `infnoise.service.bin`: Same as infnoise.service, binary path = /usr/bin/ - uses config file from /etc/infnoise.conf +- `infnoise.service.sbin`: Same as infnoise.service, binary path = /usr/sbin/ - uses config file from /etc/infnoise.conf +- `infnoise.conf.systemd`: Config file for the systemd service, to set multiplier and serial number of device - `75-infnoise.rules`: udev rule to be used together with the systemd service diff --git a/software/init_scripts/infnoise.conf.systemd b/software/init_scripts/infnoise.conf.systemd new file mode 100644 index 0000000..80a5f3c --- /dev/null +++ b/software/init_scripts/infnoise.conf.systemd @@ -0,0 +1,7 @@ +# systemd configuration file for the Infinite Noise TRNG + +INFNOISE_MULTIPLIER=1 +# keccak multiplier, default = 1 + +INFNOISE_SERIAL= +# serial number of device, default: "" diff --git a/software/init_scripts/infnoise.service.bin b/software/init_scripts/infnoise.service.bin index c915c80..8571e63 100644 --- a/software/init_scripts/infnoise.service.bin +++ b/software/init_scripts/infnoise.service.bin @@ -4,9 +4,10 @@ BindsTo=dev-infnoise.device After=dev-infnoise.device [Service] +EnvironmentFile=/etc/infnoise.conf Type=forking WorkingDirectory=/tmp -ExecStart=/usr/bin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid +ExecStart=/usr/bin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid --multiplier ${INFNOISE_MULTIPLIER} --serial ${INFNOISE_SERIAL} User=root Group=root Restart=always diff --git a/software/init_scripts/infnoise.service.sbin b/software/init_scripts/infnoise.service.sbin index 9fbb8e0..ec660cf 100644 --- a/software/init_scripts/infnoise.service.sbin +++ b/software/init_scripts/infnoise.service.sbin @@ -4,9 +4,10 @@ BindsTo=dev-infnoise.device After=dev-infnoise.device [Service] +EnvironmentFile=/etc/infnoise.conf Type=forking WorkingDirectory=/tmp -ExecStart=/usr/sbin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid +ExecStart=/usr/sbin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid --multiplier ${INFNOISE_MULTIPLIER} --serial ${INFNOISE_SERIAL} User=root Group=root Restart=always From 8224bdb69a3b2e8d3a38691ab743a3872521717a Mon Sep 17 00:00:00 2001 From: Manuel Domke Date: Sun, 31 Dec 2017 18:55:46 +0100 Subject: [PATCH 2/5] introduced environment variables INFOISE_SERIAL and INFNOISE_MULTIPLIER to inject settings via config file --- software/infnoise.c | 23 ++++++++++++++++++++- software/init_scripts/infnoise.conf.systemd | 4 ++-- software/init_scripts/infnoise.service.bin | 2 +- software/init_scripts/infnoise.service.sbin | 2 +- 4 files changed, 26 insertions(+), 5 deletions(-) diff --git a/software/infnoise.c b/software/infnoise.c index bc3126b..f807318 100644 --- a/software/infnoise.c +++ b/software/infnoise.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include #include @@ -290,8 +291,8 @@ int main(int argc, char **argv) xArg++; opts.serial = argv[xArg]; if(opts.serial == NULL || !strcmp("",opts.serial)) { - opts.serial = NULL; fputs("WARNING: --serial without value\n", stderr); + return 1; } } else if(!strcmp(argv[xArg], "--daemon")) { opts.daemon = true; @@ -314,6 +315,25 @@ int main(int argc, char **argv) } } + // read environment variables, not overriding command line options + if (opts.serial == NULL) { + if (getenv("INFNOISE_SERIAL") != NULL) { + opts.serial = getenv("INFNOISE_SERIAL"); + } + } + + if (multiplierAssigned == false) { + if (getenv("INFNOISE_MULTIPLIER") != NULL) { + int tmpOutputMult = atoi(getenv("INFNOISE_MULTIPLIER")); + if (tmpOutputMult < 0) { + fputs("Multiplier must be >= 0\n", stderr); + return 1; + } + multiplierAssigned = true; + opts.outputMultiplier = tmpOutputMult; + } + } + if(!multiplierAssigned && opts.devRandom) { opts.outputMultiplier = 2u; // Don't throw away entropy when writing to /dev/random unless told to do so } @@ -322,6 +342,7 @@ int main(int argc, char **argv) listUSBDevices(&ftdic); return 0; } + // Optionally run in the background and optionally write a PID-file startDaemon(&opts); diff --git a/software/init_scripts/infnoise.conf.systemd b/software/init_scripts/infnoise.conf.systemd index 80a5f3c..b2fd4fb 100644 --- a/software/init_scripts/infnoise.conf.systemd +++ b/software/init_scripts/infnoise.conf.systemd @@ -1,7 +1,7 @@ # systemd configuration file for the Infinite Noise TRNG -INFNOISE_MULTIPLIER=1 +#INFNOISE_MULTIPLIER=1 # keccak multiplier, default = 1 -INFNOISE_SERIAL= +#INFNOISE_SERIAL= # serial number of device, default: "" diff --git a/software/init_scripts/infnoise.service.bin b/software/init_scripts/infnoise.service.bin index 8571e63..168a46e 100644 --- a/software/init_scripts/infnoise.service.bin +++ b/software/init_scripts/infnoise.service.bin @@ -7,7 +7,7 @@ After=dev-infnoise.device EnvironmentFile=/etc/infnoise.conf Type=forking WorkingDirectory=/tmp -ExecStart=/usr/bin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid --multiplier ${INFNOISE_MULTIPLIER} --serial ${INFNOISE_SERIAL} +ExecStart=/usr/sbin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid User=root Group=root Restart=always diff --git a/software/init_scripts/infnoise.service.sbin b/software/init_scripts/infnoise.service.sbin index ec660cf..168a46e 100644 --- a/software/init_scripts/infnoise.service.sbin +++ b/software/init_scripts/infnoise.service.sbin @@ -7,7 +7,7 @@ After=dev-infnoise.device EnvironmentFile=/etc/infnoise.conf Type=forking WorkingDirectory=/tmp -ExecStart=/usr/sbin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid --multiplier ${INFNOISE_MULTIPLIER} --serial ${INFNOISE_SERIAL} +ExecStart=/usr/sbin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid User=root Group=root Restart=always From 9a5d776c5c2693654d4c6bcf12944515ac0bdb3c Mon Sep 17 00:00:00 2001 From: Manuel Domke Date: Sun, 31 Dec 2017 18:58:31 +0100 Subject: [PATCH 3/5] code cleanup --- software/infnoise.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/software/infnoise.c b/software/infnoise.c index f807318..de6cde4 100644 --- a/software/infnoise.c +++ b/software/infnoise.c @@ -317,19 +317,19 @@ int main(int argc, char **argv) // read environment variables, not overriding command line options if (opts.serial == NULL) { - if (getenv("INFNOISE_SERIAL") != NULL) { + if (getenv("INFNOISE_SERIAL") != NULL) { opts.serial = getenv("INFNOISE_SERIAL"); } } if (multiplierAssigned == false) { - if (getenv("INFNOISE_MULTIPLIER") != NULL) { + if (getenv("INFNOISE_MULTIPLIER") != NULL) { int tmpOutputMult = atoi(getenv("INFNOISE_MULTIPLIER")); if (tmpOutputMult < 0) { fputs("Multiplier must be >= 0\n", stderr); return 1; } - multiplierAssigned = true; + multiplierAssigned = true; opts.outputMultiplier = tmpOutputMult; } } From e523de9aee7f533d850031ef437f1e9c0c2d6f36 Mon Sep 17 00:00:00 2001 From: Manuel Domke Date: Sun, 31 Dec 2017 19:13:00 +0100 Subject: [PATCH 4/5] added environment variable INFNOISE_DEBUG --- software/infnoise.c | 10 ++++++++++ software/init_scripts/infnoise.conf.systemd | 9 +++++++-- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/software/infnoise.c b/software/infnoise.c index de6cde4..6efff46 100644 --- a/software/infnoise.c +++ b/software/infnoise.c @@ -91,6 +91,7 @@ static uint32_t processBytes(uint8_t *keccakState, uint8_t *bytes, uint32_t entr outputBytes(dataOut, entropy/8u, entropy & 0x7u, opts); return entropy/8u; } + // Output 256*outputMultipler bytes. uint32_t numBits = opts->outputMultiplier*256u; uint32_t bytesWritten = 0u; @@ -322,6 +323,14 @@ int main(int argc, char **argv) } } + if (opts.debug == false) { + if (getenv("INFNOISE_DEBUG") != NULL) { + if (!strcmp("true",getenv("INFNOISE_DEBUG"))) { + opts.debug = true; + } + } + } + if (multiplierAssigned == false) { if (getenv("INFNOISE_MULTIPLIER") != NULL) { int tmpOutputMult = atoi(getenv("INFNOISE_MULTIPLIER")); @@ -349,6 +358,7 @@ int main(int argc, char **argv) if(opts.devRandom) { inmWriteEntropyStart(BUFLEN/8u, &opts); } + if(!inmHealthCheckStart(PREDICTION_BITS, DESIGN_K, &opts)) { fputs("Can't intialize health checker\n", stderr); return 1; diff --git a/software/init_scripts/infnoise.conf.systemd b/software/init_scripts/infnoise.conf.systemd index b2fd4fb..f57c92e 100644 --- a/software/init_scripts/infnoise.conf.systemd +++ b/software/init_scripts/infnoise.conf.systemd @@ -1,7 +1,12 @@ # systemd configuration file for the Infinite Noise TRNG -#INFNOISE_MULTIPLIER=1 +#INFNOISE_MULTIPLIER=10 # keccak multiplier, default = 1 -#INFNOISE_SERIAL= +#INFNOISE_SERIAL=DO0032ZA # serial number of device, default: "" +# use infnoise --list-devices to find out your serial number + +#INFNOISE_DEBUG=true +# debug mode, default: false +# debug logging to syslog From a0345cdf18429d5dfd916d1496ae721190447e1b Mon Sep 17 00:00:00 2001 From: Manuel Domke Date: Sun, 31 Dec 2017 19:17:58 +0100 Subject: [PATCH 5/5] cleanup --- software/infnoise.c | 4 ++-- software/init_scripts/infnoise.service.bin | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/software/infnoise.c b/software/infnoise.c index 6efff46..d0fb1c8 100644 --- a/software/infnoise.c +++ b/software/infnoise.c @@ -292,8 +292,8 @@ int main(int argc, char **argv) xArg++; opts.serial = argv[xArg]; if(opts.serial == NULL || !strcmp("",opts.serial)) { - fputs("WARNING: --serial without value\n", stderr); - return 1; + fputs("--serial without value\n", stderr); + return 1; } } else if(!strcmp(argv[xArg], "--daemon")) { opts.daemon = true; diff --git a/software/init_scripts/infnoise.service.bin b/software/init_scripts/infnoise.service.bin index 168a46e..c77aad8 100644 --- a/software/init_scripts/infnoise.service.bin +++ b/software/init_scripts/infnoise.service.bin @@ -7,7 +7,7 @@ After=dev-infnoise.device EnvironmentFile=/etc/infnoise.conf Type=forking WorkingDirectory=/tmp -ExecStart=/usr/sbin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid +ExecStart=/usr/bin/infnoise --dev-random --daemon --pidfile /var/run/infnoise.pid User=root Group=root Restart=always