cleanup
This commit is contained in:
@@ -13,12 +13,15 @@ LDFLAGS= -shared
|
||||
|
||||
FTDI := $(shell libftdi-config --libs)
|
||||
|
||||
all: libinfnoise-example libinfnoise-example-raw
|
||||
all: libinfnoise-example libinfnoise-example-raw libinfnoise-example-1
|
||||
|
||||
libinfnoise-example: example.c
|
||||
$(CC) $(CFLAGS) -o libinfnoise-example example.c $(FTDI) -lm -lrt -linfnoise
|
||||
|
||||
libinfnoise-example-raw: example.c
|
||||
libinfnoise-example-simple: example-simple.c
|
||||
$(CC) $(CFLAGS) -o libinfnoise-example-1 example1.c $(FTDI) -lm -lrt -linfnoise
|
||||
|
||||
libinfnoise-example-complex: example-complex.c
|
||||
$(CC) $(CFLAGS) -o libinfnoise-example-raw example-raw.c $(FTDI) -lm -lrt -linfnoise
|
||||
|
||||
clean:
|
||||
|
||||
@@ -10,27 +10,26 @@ int main()
|
||||
{
|
||||
// parameters
|
||||
char *serial=NULL; // can be set to a specific serial, NULL uses the first found device
|
||||
bool initKeccak = true; // initialize Keccak sponge (used for whitening)
|
||||
uint32_t multiplier = 10u; // multiplier for whitening
|
||||
bool debug = false; // debug mode (health monitor writes to stderr)
|
||||
|
||||
char *message;
|
||||
bool errorFlag = false;
|
||||
bool initKeccak = false; // initialize Keccak sponge (used for whitening)
|
||||
uint32_t multiplier = 1u; // multiplier for whitening
|
||||
bool debug = true; // debug mode (health monitor writes to stderr)
|
||||
|
||||
// initialize hardware and health monitor
|
||||
struct ftdi_context ftdic;
|
||||
if (!initInfnoise(&ftdic, serial, &message, true, debug)) {
|
||||
fputs(message, stderr);
|
||||
struct infnoise_context context;
|
||||
fprintf(stdout, "pre-initi: %s\n", "");
|
||||
|
||||
if (!initInfnoise(&context, serial, initKeccak, debug)) {
|
||||
fprintf(stdout, "erri: %s\n", "");
|
||||
fputs(context.message, stderr);
|
||||
return 1; // ERROR
|
||||
}
|
||||
fprintf(stdout, "initi: %s\n", "");
|
||||
|
||||
// calculate output size based on the parameters:
|
||||
// when using the multiplier, we need a result array of 32*MULTIPLIER - otherwise 64(BUFLEN/8) bytes
|
||||
uint32_t resultSize;
|
||||
if (multiplier == 0 || initKeccak == false) {
|
||||
resultSize = BUFLEN/8u;
|
||||
resultSize = 512u;
|
||||
} else {
|
||||
resultSize = multiplier*32u;
|
||||
resultSize = 1024u;
|
||||
}
|
||||
|
||||
// read and print in a loop (until 1M is read)
|
||||
@@ -39,18 +38,20 @@ int main()
|
||||
uint8_t result[resultSize];
|
||||
|
||||
// readRawData returns the number of bytes written to result array
|
||||
uint64_t bytesWritten = readData(&ftdic, result, &message, &errorFlag, multiplier);
|
||||
totalBytesWritten += bytesWritten;
|
||||
uint64_t bytesWritten = readData(&context, result, !initKeccak, multiplier);
|
||||
fprintf(stderr, "infnoise bytes read: %lu\n", bytesWritten);
|
||||
|
||||
// check for errors
|
||||
// note: bytesWritten is also 0 in this case, but an errorFlag is needed as
|
||||
// bytesWritten can also be 0 when data hasn't passed the health monitor.
|
||||
if (errorFlag) {
|
||||
fprintf(stderr, "Error: %s\n", message);
|
||||
return 1;
|
||||
if (context.errorFlag) {
|
||||
fprintf(stderr, "Error: %s\n", context.message);
|
||||
return -1;
|
||||
}
|
||||
fprintf(stderr, "infnoise bytes read: %lu\n", (unsigned long) bytesWritten);
|
||||
totalBytesWritten += bytesWritten;
|
||||
|
||||
// print as many bytes
|
||||
// print as many bytes as readData told us
|
||||
fwrite(result, 1, bytesWritten, stdout);
|
||||
}
|
||||
return 0;
|
||||
@@ -1,46 +0,0 @@
|
||||
/*
|
||||
This is a very simple example to use libinfnoise in raw output mode.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ftdi.h>
|
||||
#include <libinfnoise.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
// parameters
|
||||
char *serial=NULL; // can be set to a specific serial, NULL uses the first found device
|
||||
bool debug=true; // debug mode (health monitor writes to stderr)
|
||||
|
||||
char *message;
|
||||
bool errorFlag = false;
|
||||
|
||||
// initialize hardware and health monitor
|
||||
struct ftdi_context ftdic;
|
||||
if (!initInfnoise(&ftdic, serial, &message, false, debug)) {
|
||||
fputs(message, stderr);
|
||||
return 1; // ERROR
|
||||
}
|
||||
|
||||
// read and print in a loop (until 1M)
|
||||
uint32_t totalBytesWritten = 0;
|
||||
while (totalBytesWritten < 1000000) {
|
||||
uint8_t result[64];// result is always 64 bytes in raw mode
|
||||
|
||||
// read data returns the number of bytes written to result array
|
||||
uint64_t bytesWritten = readRawData(&ftdic, result, &message, &errorFlag);
|
||||
totalBytesWritten += bytesWritten;
|
||||
|
||||
// check for errors
|
||||
// note: bytesWritten is also 0 in this case, but an errorFlag is needed as
|
||||
// bytesWritten can also be 0 when data hasn't passed the health monitor.
|
||||
if (errorFlag) {
|
||||
fprintf(stderr, "Error: %s\n", message);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// print bytes to stdout
|
||||
fwrite(result, 1, bytesWritten, stdout);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
58
software/examples/libinfnoise/example-simple.c
Normal file
58
software/examples/libinfnoise/example-simple.c
Normal file
@@ -0,0 +1,58 @@
|
||||
/*
|
||||
This is a simple example to use libinfnoise with whitened and multiplied output.
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
#include <ftdi.h>
|
||||
#include <libinfnoise.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
// parameters
|
||||
char *serial=NULL; // can be set to a specific serial, NULL uses the first found device
|
||||
bool initKeccak = false; // initialize Keccak sponge (used for whitening)
|
||||
uint32_t multiplier = 1u; // multiplier for whitening
|
||||
bool debug = true; // debug mode (health monitor writes to stderr)
|
||||
|
||||
// initialize hardware and health monitor
|
||||
struct infnoise_context context;
|
||||
fprintf(stdout, "pre-initi: %s\n", "");
|
||||
|
||||
if (!initInfnoise(&context, serial, initKeccak, debug)) {
|
||||
fprintf(stdout, "erri: %s\n", "");
|
||||
fputs(context.message, stderr);
|
||||
return 1; // ERROR
|
||||
}
|
||||
fprintf(stdout, "initi: %s\n", "");
|
||||
|
||||
uint32_t resultSize;
|
||||
if (multiplier == 0 || initKeccak == false) {
|
||||
resultSize = 512u;
|
||||
} else {
|
||||
resultSize = 1024u;
|
||||
}
|
||||
|
||||
// read and print in a loop (until 1M is read)
|
||||
uint64_t totalBytesWritten = 0u;
|
||||
while (totalBytesWritten < 1000000) {
|
||||
uint8_t result[resultSize];
|
||||
|
||||
// readRawData returns the number of bytes written to result array
|
||||
uint64_t bytesWritten = readData(&context, result, !initKeccak, multiplier);
|
||||
fprintf(stderr, "infnoise bytes read: %lu\n", bytesWritten);
|
||||
|
||||
// check for errors
|
||||
// note: bytesWritten is also 0 in this case, but an errorFlag is needed as
|
||||
// bytesWritten can also be 0 when data hasn't passed the health monitor.
|
||||
if (context.errorFlag) {
|
||||
fprintf(stderr, "Error: %s\n", context.message);
|
||||
return -1;
|
||||
}
|
||||
fprintf(stderr, "infnoise bytes read: %lu\n", (unsigned long) bytesWritten);
|
||||
totalBytesWritten += bytesWritten;
|
||||
|
||||
// print as many bytes as readData told us
|
||||
fwrite(result, 1, bytesWritten, stdout);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -86,12 +86,7 @@ bool outputBytes(uint8_t *bytes, uint32_t length, uint32_t entropy, bool writeDe
|
||||
return false;
|
||||
#endif
|
||||
#ifdef LINUX
|
||||
//fputs("room?", stderr);
|
||||
inmWaitForPoolToHaveRoom();
|
||||
fputs("room!", stderr);
|
||||
printf("length: - %ul\n", length);
|
||||
printf("entropy: - %ul\n", entropy);
|
||||
//fwrite(bytes, 1, length, stdout);
|
||||
inmWriteEntropyToPool(bytes, length, entropy);
|
||||
#endif
|
||||
}
|
||||
@@ -287,17 +282,13 @@ int main(int argc, char **argv) {
|
||||
uint8_t result[resultSize];
|
||||
uint64_t bytesWritten = readData(&context, result, opts.raw, opts.outputMultiplier);
|
||||
totalBytesWritten += bytesWritten;
|
||||
// fprintf(stderr, "Stats: %d\n", context.entropyThisTime);
|
||||
|
||||
if (context.errorFlag) {
|
||||
fprintf(stderr, "Error: %s\n", context.message);
|
||||
return 1;
|
||||
}
|
||||
//fprintf(stderr, "Error: %s\n", context.message);
|
||||
|
||||
if (!opts.noOutput) {
|
||||
//fprintf(stderr, "B: %lu\n", bytesWritten);
|
||||
//fprintf(stderr, "E: %ul\n", context.entropyThisTime);
|
||||
if (!outputBytes(result, bytesWritten, context.entropyThisTime, opts.devRandom,
|
||||
&context.message)) {
|
||||
fprintf(stderr, "Error: %s\n", context.message);
|
||||
|
||||
@@ -46,7 +46,6 @@ bool initInfnoise(struct infnoise_context *context, char *serial, bool keccak, b
|
||||
if (keccak) {
|
||||
KeccakInitialize();
|
||||
KeccakInitializeState(keccakState);
|
||||
//fprintf(stderr, "debug: keccak init: %s\n", context->message);
|
||||
}
|
||||
|
||||
// let healthcheck collect some data
|
||||
@@ -99,7 +98,6 @@ uint32_t extractBytes(uint8_t *bytes, uint8_t *inBuf, char **message, bool *erro
|
||||
if (!inmHealthCheckAddBit(evenBit, oddBit, even)) {
|
||||
*message = "Health check of Infinite Noise Multiplier failed!";
|
||||
*errorFlag = true;
|
||||
fprintf(stderr, "health-Error: %s\n", *message);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -162,19 +160,12 @@ uint32_t processBytes(uint8_t *bytes, uint8_t *result, uint32_t *entropy,
|
||||
bytesToWrite = *numBits / 8u;
|
||||
}
|
||||
|
||||
//uint32_t entropyThisTime = *entropy;
|
||||
|
||||
//if (entropyThisTime > 8u * bytesToWrite) {
|
||||
// entropyThisTime = 8u * bytesToWrite;
|
||||
//}
|
||||
|
||||
KeccakExtract(keccakState, result, bytesToWrite / 8u);
|
||||
KeccakPermutation(keccakState);
|
||||
*bytesWritten = bytesToWrite;
|
||||
*numBits -= bytesToWrite * 8u;
|
||||
}
|
||||
|
||||
//fprintf(stderr, "bytesWritten_end: %ul\n", bytesWritten);
|
||||
|
||||
return *bytesWritten;
|
||||
}
|
||||
|
||||
@@ -217,9 +208,10 @@ devlist_node listUSBDevices(char **message) {
|
||||
if (!isSuperUser()) {
|
||||
*message = "Can't find Infinite Noise Multiplier. Try running as super user?";
|
||||
return NULL;
|
||||
} else {
|
||||
*message = "ftdi_usb_get_strings failed: %d (%s)\n", rc, ftdi_get_error_string(ftdic));
|
||||
return NULL;
|
||||
}
|
||||
//*message = "ftdi_usb_get_strings failed: %d (%s)\n", rc, ftdi_get_error_string(ftdic));
|
||||
return NULL;
|
||||
}
|
||||
current_entry->id = i;
|
||||
strcpy(current_entry->serial, serial);
|
||||
@@ -231,7 +223,6 @@ devlist_node listUSBDevices(char **message) {
|
||||
} else {
|
||||
current_entry->next = NULL;
|
||||
}
|
||||
//printf("debug: Manufacturer: %s, Description: %s, Serial: %s\n", manufacturer, description, serial);
|
||||
curdev = curdev->next;
|
||||
}
|
||||
return return_list;
|
||||
@@ -362,7 +353,7 @@ uint32_t readData(struct infnoise_context *context, uint8_t *result, bool raw, u
|
||||
uint8_t bytes[BUFLEN / 8u];
|
||||
context->entropyThisTime = extractBytes(bytes, inBuf, &context->message, &context->errorFlag);
|
||||
if (context->errorFlag) {
|
||||
fprintf(stderr, "ERROR1: %ul\n", context->entropyThisTime);
|
||||
// todo: message?
|
||||
return 0;
|
||||
}
|
||||
// call health check and return bytes if OK
|
||||
@@ -374,86 +365,3 @@ uint32_t readData(struct infnoise_context *context, uint8_t *result, bool raw, u
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef LIB_EXAMPLE_PROGRAM_RAW
|
||||
// example use of libinfnoise - raw
|
||||
// TODO: rewrite!
|
||||
|
||||
int main() {
|
||||
char *serial = NULL; // use any device, can be set to a specific serial
|
||||
|
||||
// initialize USB
|
||||
struct ftdi_context ftdic;
|
||||
initInfnoise(&ftdic, serial);
|
||||
|
||||
// parameters for readData(..):
|
||||
bool rawOutput = true;
|
||||
uint32_t multiplier = 10u;
|
||||
|
||||
// calculate output size based on the parameters:
|
||||
// when using the multiplier, we need a result array of 32*MULTIPLIER - otherwise 64(BUFLEN/8) bytes
|
||||
uint32_t resultSize;
|
||||
if (multiplier == 0 || rawOutput == true) {
|
||||
resultSize = BUFLEN / 8u;
|
||||
} else {
|
||||
resultSize = multiplier * 32u;
|
||||
}
|
||||
|
||||
uint64_t totalBytesWritten = 0u;
|
||||
|
||||
// read and print in a loop
|
||||
while (totalBytesWritten < 100000) {
|
||||
uint8_t result[resultSize];
|
||||
uint64_t bytesWritten = 0u;
|
||||
bytesWritten = readData(&ftdic, keccakState, result, multiplier);
|
||||
|
||||
// check for -1, indicating an error
|
||||
totalBytesWritten += bytesWritten;
|
||||
|
||||
// make sure to only read as many bytes as readData returned. Only those have passed the health check in this round (usually all)
|
||||
fwrite(result, 1, bytesWritten, stdout);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
#ifdef LIB_EXAMPLE_PROGRAM_WHITENED
|
||||
// example use of libinfnoise - with keccak
|
||||
// TODO: rewrite!
|
||||
|
||||
int main() {
|
||||
char *serial = NULL; // use any device, can be set to a specific serial
|
||||
|
||||
// initialize USB
|
||||
struct ftdi_context ftdic;
|
||||
initInfnoise(&ftdic, serial);
|
||||
|
||||
// parameters for readData(..):
|
||||
bool rawOutput = true;
|
||||
uint32_t multiplier = 10u;
|
||||
|
||||
// calculate output size based on the parameters:
|
||||
// when using the multiplier, we need a result array of 32*MULTIPLIER - otherwise 64(BUFLEN/8) bytes
|
||||
uint32_t resultSize;
|
||||
if (multiplier == 0 || rawOutput) {
|
||||
resultSize = BUFLEN / 8u;
|
||||
} else {
|
||||
resultSize = multiplier * 32u;
|
||||
}
|
||||
|
||||
uint64_t totalBytesWritten = 0u;
|
||||
|
||||
// read and print in a loop
|
||||
while (totalBytesWritten < 100000) {
|
||||
uint8_t result[resultSize];
|
||||
uint64_t bytesWritten = 0u;
|
||||
bytesWritten = readData(&ftdic, keccakState, result, multiplier);
|
||||
|
||||
// check for -1, indicating an error
|
||||
totalBytesWritten += bytesWritten;
|
||||
|
||||
// make sure to only read as many bytes as readData returned. Only those have passed the health check in this round (usually all)
|
||||
fwrite(result, 1, bytesWritten, stdout);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Reference in New Issue
Block a user