summaryrefslogtreecommitdiffstats
path: root/regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-27 08:42:40 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-09-27 08:42:40 +0000
commit54880067830dddd9611bc8c6145a396f208b76ca (patch)
tree1d40eb981a691b14df7881fca6408ccf42fa1b9f /regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc
parentReleasing progress-linux version 1:9.8p1-3~progress7.99u1. (diff)
downloadopenssh-54880067830dddd9611bc8c6145a396f208b76ca.tar.xz
openssh-54880067830dddd9611bc8c6145a396f208b76ca.zip
Merging upstream version 1:9.9p1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc')
-rw-r--r--regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc57
1 files changed, 57 insertions, 0 deletions
diff --git a/regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc b/regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc
new file mode 100644
index 0000000..c4ebac4
--- /dev/null
+++ b/regress/misc/fuzz-harness/sntrup761_enc_fuzz.cc
@@ -0,0 +1,57 @@
+// Basic fuzz test for encapsulate operation.
+
+#include <stddef.h>
+#include <stdio.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <string.h>
+#include <unistd.h>
+#include <err.h>
+
+extern "C" {
+
+#include "crypto_api.h"
+#include "hash.c"
+
+#undef randombytes
+#define USE_SNTRUP761X25519 1
+#ifdef SNTRUP761_NO_ASM
+# undef __GNUC__
+#endif
+void randombytes(unsigned char *ptr, size_t l);
+volatile crypto_int16 crypto_int16_optblocker = 0;
+volatile crypto_int32 crypto_int32_optblocker = 0;
+volatile crypto_int64 crypto_int64_optblocker = 0;
+#include "sntrup761.c"
+
+static int real_random;
+
+void
+randombytes(unsigned char *ptr, size_t l)
+{
+ if (real_random)
+ arc4random_buf(ptr, l);
+ else
+ memset(ptr, 0, l);
+}
+
+int LLVMFuzzerTestOneInput(const uint8_t* input, size_t len)
+{
+ unsigned char pk[crypto_kem_sntrup761_PUBLICKEYBYTES];
+ unsigned char ciphertext[crypto_kem_sntrup761_CIPHERTEXTBYTES];
+ unsigned char secret[crypto_kem_sntrup761_BYTES];
+
+ memset(&pk, 0, sizeof(pk));
+ if (len > sizeof(pk)) {
+ len = sizeof(pk);
+ }
+ memcpy(pk, input, len);
+
+ real_random = 0;
+ (void)crypto_kem_sntrup761_enc(ciphertext, secret, pk);
+ real_random = 1;
+ (void)crypto_kem_sntrup761_enc(ciphertext, secret, pk);
+ return 0;
+}
+
+} // extern