summaryrefslogtreecommitdiff
path: root/src/include
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2021-01-28 22:28:01 +0100
committerChristian Grothoff <christian@grothoff.org>2021-01-28 22:28:01 +0100
commita2169368bbd92b77636e39b5cfe864a1236b083b (patch)
tree65da98ffc353e87a75e7e65877f3a04c897b18b4 /src/include
parent2741db1300fddb17e39373fb9d649b7022ed81d3 (diff)
implement #6716
Diffstat (limited to 'src/include')
-rw-r--r--src/include/gnunet_common.h7
-rw-r--r--src/include/gnunet_crypto_lib.h16
2 files changed, 22 insertions, 1 deletions
diff --git a/src/include/gnunet_common.h b/src/include/gnunet_common.h
index 707108289..4dab71f7f 100644
--- a/src/include/gnunet_common.h
+++ b/src/include/gnunet_common.h
@@ -256,7 +256,12 @@ struct GNUNET_ShortHashCode
/**
- * A UUID, a 128 bit random value.
+ * A UUID, a 128 bit "random" value. We OFTEN use
+ * timeflakes (see: https://github.com/anthonynsimon/timeflake),
+ * where only 80 bits are random and the rest encodes
+ * a timestamp to improve database access.
+ *
+ * See #GNUNET_CRYPTO_random_timeflake().
*/
struct GNUNET_Uuid
{
diff --git a/src/include/gnunet_crypto_lib.h b/src/include/gnunet_crypto_lib.h
index 5521dad3c..d01457b4a 100644
--- a/src/include/gnunet_crypto_lib.h
+++ b/src/include/gnunet_crypto_lib.h
@@ -475,6 +475,22 @@ GNUNET_CRYPTO_random_block (enum GNUNET_CRYPTO_Quality mode,
void *buffer,
size_t length);
+
+/**
+ * @ingroup crypto
+ * Fill UUID with a timeflake pseudo-random value. Note that
+ * timeflakes use only 80 bits of randomness and 48 bits
+ * to encode a timestamp in milliseconds. So what we return
+ * here is not a completely random number.
+ *
+ * @param mode desired quality of the random number
+ * @param uuid the value to fill
+ */
+void
+GNUNET_CRYPTO_random_timeflake (enum GNUNET_CRYPTO_Quality mode,
+ struct GNUNET_Uuid *uuid);
+
+
/**
* @ingroup crypto
* Produce a random value.