error messages / no (or less?) stderr in lib functions
This commit is contained in:
@@ -153,17 +153,20 @@ int main(int argc, char **argv)
|
||||
struct inm_devlist *device_list;
|
||||
device_list = malloc(sizeof(struct inm_devlist));
|
||||
|
||||
if(!listUSBDevices(&ftdic, &device_list, &message)) {
|
||||
if(!listUSBDevices(&ftdic, device_list, &message)) {
|
||||
fputs(message, stderr);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// debug:
|
||||
uint8_t i=0;
|
||||
struct inm_devlist_node *tmp;
|
||||
for ( tmp = device_list->head; tmp != NULL; tmp=tmp->next) {
|
||||
if (tmp->device->serial != NULL) {
|
||||
printf("%s\n", tmp->device->serial);
|
||||
}
|
||||
//tmp = tmp->next;
|
||||
printf("%d\n", i);
|
||||
i+=1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
@@ -177,7 +180,8 @@ int main(int argc, char **argv)
|
||||
startDaemon(&opts);
|
||||
|
||||
// initialize USB device and health check
|
||||
if (initInfnoise(&ftdic, opts.serial, opts.debug) != true) {
|
||||
if (initInfnoise(&ftdic, opts.serial, &message, opts.debug) != true) {
|
||||
fputs(message, stderr);
|
||||
return 1; // ERROR (message still goes to stderr)
|
||||
}
|
||||
|
||||
@@ -191,17 +195,16 @@ int main(int argc, char **argv)
|
||||
uint64_t totalBytesWritten = 0u;
|
||||
while(true) {
|
||||
uint64_t prevTotalBytesWritten = totalBytesWritten;
|
||||
uint64_t bytesWritten = readData1(&ftdic, keccakState, result, opts.noOutput, opts.raw, opts.outputMultiplier, opts.devRandom);
|
||||
//printf("%d", (uint8_t)opts.noOutput);
|
||||
uint64_t bytesWritten = readData_private(&ftdic, keccakState, result, &message, opts.noOutput, opts.raw, opts.outputMultiplier, opts.devRandom); // calling libinfnoise's private readData method
|
||||
|
||||
if (totalBytesWritten == (unsigned long)-1) {
|
||||
return 1; // ERROR (message goes to stderr)
|
||||
fputs(message, stderr);
|
||||
return 1;
|
||||
}
|
||||
totalBytesWritten += bytesWritten;
|
||||
if(opts.debug && (1u << 20u)*(totalBytesWritten/(1u << 20u)) > (1u << 20u)*(prevTotalBytesWritten/(1u << 20u))) {
|
||||
fprintf(stderr, "Output %lu bytes\n", (unsigned long)totalBytesWritten);
|
||||
}
|
||||
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -130,8 +130,8 @@ uint32_t processBytes(uint8_t *keccakState, uint8_t *bytes, uint8_t *result, uin
|
||||
} else {
|
||||
// append data in result array until we have finished squeezing the keccak sponge
|
||||
// its important to have an result array of the approriate size: outputMultiplier*32
|
||||
fprintf(stderr, "bytes written: %d\n", bytesWritten);
|
||||
fprintf(stderr, "bytes to write: %d\n", bytesToWrite);
|
||||
//fprintf(stderr, "bytes written: %d\n", bytesWritten);
|
||||
//fprintf(stderr, "bytes to write: %d\n", bytesToWrite);
|
||||
|
||||
//memcpy(result + bytesWritten, dataOut, bytesToWrite * sizeof(uint8_t)); //doesn't work
|
||||
// alternative: loop through dataOut and append array elements to result..
|
||||
@@ -154,20 +154,20 @@ uint32_t processBytes(uint8_t *keccakState, uint8_t *bytes, uint8_t *result, uin
|
||||
fprintf(stderr, "bytes written: %d\n", bytesWritten);
|
||||
return bytesWritten;
|
||||
}
|
||||
|
||||
|
||||
void add_to_list(struct inm_devlist **list, struct infnoise_device **dev) {
|
||||
void add_to_list(struct inm_devlist *list, struct infnoise_device **dev) {
|
||||
struct inm_devlist_node *tmp = malloc(sizeof(struct inm_devlist_node ) );
|
||||
tmp->device = (*dev);
|
||||
printf("added serial1: %s\n", (*dev)->serial);
|
||||
tmp->next = (*list)->head;
|
||||
tmp->next = list->head;
|
||||
printf("added serial2: %s\n", tmp->device->serial);
|
||||
(*list)->head = tmp;
|
||||
printf("added serial3: %s\n", (*list)->head->device->serial);
|
||||
list->head = tmp;
|
||||
printf("added serial3: %s\n", list->head->device->serial);
|
||||
}
|
||||
|
||||
|
||||
|
||||
// Return a list of all infinite noise multipliers found.
|
||||
bool listUSBDevices(struct ftdi_context *ftdic, struct inm_devlist **result, char** message) {
|
||||
bool listUSBDevices(struct ftdi_context *ftdic, struct inm_devlist *result, char** message) {
|
||||
ftdi_init(ftdic);
|
||||
|
||||
struct ftdi_device_list *devlist;
|
||||
@@ -211,22 +211,14 @@ bool listUSBDevices(struct ftdi_context *ftdic, struct inm_devlist **result, cha
|
||||
add_to_list(result, &result_dev);
|
||||
|
||||
struct inm_devlist_node *tmp;
|
||||
for ( tmp = (*result)->head; tmp != NULL; tmp=tmp->next) {
|
||||
for ( tmp = result->head; tmp != NULL; tmp=tmp->next) {
|
||||
if (tmp->device->serial != NULL) {
|
||||
printf("%s\n", tmp->device->serial);
|
||||
}
|
||||
//tmp = tmp->next;
|
||||
}
|
||||
|
||||
curdev = curdev->next;
|
||||
}
|
||||
struct inm_devlist_node *tmp;
|
||||
for ( tmp = (*result)->head; tmp != NULL; tmp=tmp->next) {
|
||||
if (tmp->device->serial != NULL) {
|
||||
printf("%s\n", tmp->device->serial);
|
||||
}
|
||||
//tmp = tmp->next;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -307,35 +299,39 @@ bool initializeUSB(struct ftdi_context *ftdic, char **message, char *serial) {
|
||||
}
|
||||
|
||||
|
||||
uint64_t readRawData(struct ftdi_context *ftdic, uint8_t *result) {
|
||||
return readData1(ftdic, NULL, result, false, true, 0, false);
|
||||
uint64_t readRawData(struct ftdi_context *ftdic, uint8_t *result, char **message) {
|
||||
return readData_private(ftdic, NULL, result, message, false, true, 0, false);
|
||||
}
|
||||
|
||||
uint64_t readData(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, uint32_t outputMultiplier) {
|
||||
return readData1(ftdic, keccakState, result, false, false, outputMultiplier, false);
|
||||
uint64_t readData(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, char **message, uint32_t outputMultiplier) {
|
||||
return readData_private(ftdic, keccakState, result, message, false, false, outputMultiplier, false);
|
||||
}
|
||||
|
||||
uint64_t readData1(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, bool noOutput, bool raw, uint32_t outputMultiplier, bool devRandom) {
|
||||
// Endless loop: set SW1EN and SW2EN alternately
|
||||
uint8_t outBuf[BUFLEN];
|
||||
void prepareOutputBuffer() {
|
||||
uint32_t i;
|
||||
uint8_t outBuf[BUFLEN], inBuf[BUFLEN];
|
||||
|
||||
// Endless loop: set SW1EN and SW2EN alternately
|
||||
for(i = 0u; i < BUFLEN; i++) {
|
||||
// Alternate Ph1 and Ph2
|
||||
outBuf[i] = i & 1? (1 << SWEN2) : (1 << SWEN1);
|
||||
}
|
||||
}
|
||||
|
||||
uint64_t readData_private(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, char **message, bool noOutput, bool raw, uint32_t outputMultiplier, bool devRandom) {
|
||||
uint8_t inBuf[BUFLEN];
|
||||
uint64_t totalBytesWritten = 0u;
|
||||
struct timespec start;
|
||||
clock_gettime(CLOCK_REALTIME, &start);
|
||||
|
||||
// write clock signal
|
||||
if(ftdi_write_data(ftdic, outBuf, BUFLEN) != BUFLEN) {
|
||||
fputs("USB write failed\n", stderr);
|
||||
*message = "USB write failed";
|
||||
return -1;
|
||||
}
|
||||
// and read 512 byte from the internal buffer (in synchronous bitbang mode)
|
||||
if(ftdi_read_data(ftdic, inBuf, BUFLEN) != BUFLEN) {
|
||||
fputs("USB read failed\n", stderr);
|
||||
*message = "USB read failed";
|
||||
return -1;
|
||||
}
|
||||
|
||||
@@ -354,22 +350,18 @@ uint64_t readData1(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *re
|
||||
return totalBytesWritten;
|
||||
}
|
||||
|
||||
bool initInfnoise(struct ftdi_context *ftdic,char *serial, bool debug) {
|
||||
|
||||
//inmWriteEntropyStart(BUFLEN/8u, debug); // todo: create method in libinfnoise.h for this
|
||||
|
||||
bool initInfnoise(struct ftdi_context *ftdic,char *serial, char **message, bool debug) {
|
||||
prepareOutputBuffer();
|
||||
// initialize health check
|
||||
if (!inmHealthCheckStart(PREDICTION_BITS, DESIGN_K, debug)) {
|
||||
fputs("Can't initialize health checker\n", stderr);
|
||||
*message="Can't initialize health checker";
|
||||
return false;
|
||||
}
|
||||
|
||||
// initialize USB
|
||||
char *message;
|
||||
if(!initializeUSB(ftdic, &message, serial)) {
|
||||
if(!initializeUSB(ftdic, message, serial)) {
|
||||
// Sometimes have to do it twice - not sure why
|
||||
if(!initializeUSB(ftdic, &message, serial)) {
|
||||
fputs(message, stderr);
|
||||
if(!initializeUSB(ftdic, message, serial)) {
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -35,14 +35,12 @@ struct infnoise_device_list {
|
||||
struct infnoise_device_list * next;
|
||||
};
|
||||
|
||||
bool listUSBDevices(struct ftdi_context *ftdic, struct inm_devlist **result, char **message);
|
||||
bool listUSBDevices(struct ftdi_context *ftdic, struct inm_devlist *result, char **message);
|
||||
|
||||
bool initInfnoise(struct ftdi_context *ftdic, char *serial, bool debug);
|
||||
bool initInfnoise(struct ftdi_context *ftdic, char *serial, char **message, bool debug);
|
||||
|
||||
bool initKeccak(struct ftdi_context *ftdic, char *serial);
|
||||
|
||||
uint64_t readRawData(struct ftdi_context *ftdic, uint8_t *result);
|
||||
uint64_t readRawData(struct ftdi_context *ftdic, uint8_t *result, char **message);
|
||||
|
||||
uint64_t readData(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, uint32_t outputMultiplier);
|
||||
|
||||
uint64_t readData1(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, bool noOutput, bool raw, uint32_t outputMultiplier, bool devRandom);
|
||||
uint64_t readData(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, char **message, uint32_t outputMultiplier);
|
||||
|
||||
@@ -32,6 +32,8 @@
|
||||
// All data bus bits of the FT240X are outputs, except COMP1 and COMP2
|
||||
#define MASK (0xffu & ~(1u << COMP1) & ~(1u << COMP2))
|
||||
|
||||
|
||||
|
||||
bool inmHealthCheckStart(uint8_t N, double K, bool debug);
|
||||
void inmHealthCheckStop(void);
|
||||
bool inmHealthCheckAddBit(bool evenBit, bool oddBit, bool even);
|
||||
@@ -55,3 +57,8 @@ void outputBytes(uint8_t *bytes, uint32_t length, uint32_t entropy, bool writeDe
|
||||
uint32_t processBytes(uint8_t *keccakState, uint8_t *bytes, uint8_t *result, uint32_t entropy, bool raw,
|
||||
bool writeDevRandom, uint32_t outputMultiplier, bool noOutput);
|
||||
|
||||
uint64_t readData_private(struct ftdi_context *ftdic, uint8_t *keccakState, uint8_t *result, char **message,
|
||||
bool noOutput, bool raw, uint32_t outputMultiplier, bool devRandom);
|
||||
|
||||
//void add_to_list(struct inm_devlist *list, struct infnoise_device *dev);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user