[Cryptech-Commits] [sw/cryptlib] 01/01: Remove cryptech_novena_i2c_entropy, which was an attractive nuisance. Add cryptech_novena_i2c_trng, now that we know what the TRNG I2C interface will be.
git at cryptech.is
git at cryptech.is
Fri Dec 5 14:34:34 UTC 2014
This is an automated email from the git hooks/post-receive script.
sra at hactrn.net pushed a commit to branch master
in repository sw/cryptlib.
commit 2b5383ad73f56652f6e994de3fb611ef2ccaef97
Author: Rob Austein <sra at hactrn.net>
Date: Fri Dec 5 15:30:19 2014 +0100
Remove cryptech_novena_i2c_entropy, which was an attractive nuisance.
Add cryptech_novena_i2c_trng, now that we know what the TRNG I2C
interface will be.
---
...na_i2c_entropy.c => cryptech_novena_i2c_trng.c} | 39 +++++++++++++---------
1 file changed, 24 insertions(+), 15 deletions(-)
diff --git a/src/cryptech_novena_i2c_entropy.c b/src/cryptech_novena_i2c_trng.c
similarity index 92%
rename from src/cryptech_novena_i2c_entropy.c
rename to src/cryptech_novena_i2c_trng.c
index b2e6e22..599c0db 100644
--- a/src/cryptech_novena_i2c_entropy.c
+++ b/src/cryptech_novena_i2c_trng.c
@@ -1,11 +1,11 @@
/*
- * cryptech_novena_i2c_entropy.c
+ * cryptech_novena_i2c_trng.c
* ------------------------------
*
* This is an early prototype Hardware Adaption Layer (HAL) for using
* Cryptlib with the Cryptech project's FGPA cores over an I2C bus on
* the Novena PVT1 development board using the "coretest" byte stream
- * protocol. This is compatible with the test/novena_entropy FPGA build.
+ * protocol. This is compatible with the test/novena_trng FPGA build.
*
* The communication channel used here is not suitable for production
* use, this is just a prototype.
@@ -111,12 +111,12 @@
/*
* Address for reading 32 bits of entropy from the noise board.
- * ENTROPY_VALID is nonzero if there's valid entropy available.
+ * TRNG_VALID is nonzero if valid random bits are available.
*/
-#define ENTROPY_PREFIX 0x20
-#define ENTROPY_ADDR 0x20
-#define ENTROPY_VALID 0x11
+#define TRNG_PREFIX 0x0b
+#define TRNG_DATA 0x20
+#define TRNG_VALID 0x11
static int i2cfd = -1;
static int debug = 0;
@@ -363,9 +363,14 @@ static int i2c_wait_valid(const unsigned char addr0)
/*
* First attempt at reading random data from the Novena.
- * Not sure what we should do if ENTROPY_VALID isn't lit, spin wait?
+ *
+ * In theory, we should wait for TRNG_VALID before reading random
+ * data, but as long as this is running over I2C we're going to be so
+ * slow that there's no point, and checking would just make us slower.
*/
+#define WAIT_FOR_TRNG_VALID 0
+
static int readRandom(void *buffer, const int length)
{
unsigned char temp[4], *buf = buffer;
@@ -376,23 +381,27 @@ static int readRandom(void *buffer, const int length)
REQUIRES_B(length >= 1 && length < MAX_INTLENGTH);
for (i = 0; i < length; i += 4) {
- if (!i2c_wait_valid(ENTROPY_PREFIX)) {
- fprintf(stderr, "[ i2c_wait_valid(ENTROPY_PREFIX) failed ]\n");
+
+#if WAIT_FOR_TRNG_VALID
+ if (!i2c_wait_valid(TRNG_PREFIX)) {
+ fprintf(stderr, "[ i2c_wait_valid(TRNG_PREFIX) failed ]\n");
return 0;
}
do {
- if (!i2c_read(ENTROPY_PREFIX, ENTROPY_VALID, temp)) {
- fprintf(stderr, "[ i2c_read(ENTROPY_VALID) failed ]\n");
+ if (!i2c_read(TRNG_PREFIX, TRNG_VALID, temp)) {
+ fprintf(stderr, "[ i2c_read(TRNG_VALID) failed ]\n");
return 0;
}
} while (!temp[3]);
- if (!i2c_wait_valid(ENTROPY_PREFIX)) {
- fprintf(stderr, "[ i2c_wait_valid(ENTROPY_PREFIX) failed ]\n");
+ if (!i2c_wait_valid(TRNG_PREFIX)) {
+ fprintf(stderr, "[ i2c_wait_valid(TRNG_PREFIX) failed ]\n");
return 0;
}
+#endif /* WAIT_FOR_TRNG_VALID */
+
last = (length - i) < 4;
- if (!i2c_read(ENTROPY_PREFIX, ENTROPY_ADDR, last ? temp : buf + i)) {
- fprintf(stderr, "[ i2c_read(ENTROPY_ADDR) failed ]\n");
+ if (!i2c_read(TRNG_PREFIX, TRNG_DATA, (last ? temp : (buf + i)))) {
+ fprintf(stderr, "[ i2c_read(TRNG_DATA) failed ]\n");
return 0;
}
if (last) {
More information about the Commits
mailing list