summaryrefslogtreecommitdiff
path: root/src/libsodium/crypto_verify/try.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/libsodium/crypto_verify/try.c')
-rw-r--r--src/libsodium/crypto_verify/try.c76
1 files changed, 76 insertions, 0 deletions
diff --git a/src/libsodium/crypto_verify/try.c b/src/libsodium/crypto_verify/try.c
new file mode 100644
index 0000000..06684e7
--- /dev/null
+++ b/src/libsodium/crypto_verify/try.c
@@ -0,0 +1,76 @@
+/*
+ * crypto_verify/try.c version 20090118
+ * D. J. Bernstein
+ * Public domain.
+ */
+
+#include <stdlib.h>
+#include "crypto_verify.h"
+#include "windows/windows-quirks.h"
+
+extern unsigned char *alignedcalloc(unsigned long long);
+
+const char *primitiveimplementation = crypto_verify_IMPLEMENTATION;
+
+static unsigned char *x;
+static unsigned char *y;
+
+void preallocate(void)
+{
+}
+
+void allocate(void)
+{
+ x = alignedcalloc(crypto_verify_BYTES);
+ y = alignedcalloc(crypto_verify_BYTES);
+}
+
+void predoit(void)
+{
+}
+
+void doit(void)
+{
+ crypto_verify(x,y);
+}
+
+static const char *check(void)
+{
+ int r = crypto_verify(x,y);
+ if (r == 0) {
+ if (memcmp(x,y,crypto_verify_BYTES)) return "different strings pass verify";
+ } else if (r == -1) {
+ if (!memcmp(x,y,crypto_verify_BYTES)) return "equal strings fail verify";
+ } else {
+ return "weird return value from verify";
+ }
+ return 0;
+}
+
+char checksum[2];
+
+const char *checksum_compute(void)
+{
+ long long tests;
+ long long i;
+ long long j;
+ const char *c;
+
+ for (tests = 0;tests < 100000;++tests) {
+ for (i = 0;i < crypto_verify_BYTES;++i) x[i] = rand();
+ for (i = 0;i < crypto_verify_BYTES;++i) y[i] = rand();
+ c = check(); if (c) return c;
+ for (i = 0;i < crypto_verify_BYTES;++i) y[i] = x[i];
+ c = check(); if (c) return c;
+ y[rand() % crypto_verify_BYTES] = rand();
+ c = check(); if (c) return c;
+ y[rand() % crypto_verify_BYTES] = rand();
+ c = check(); if (c) return c;
+ y[rand() % crypto_verify_BYTES] = rand();
+ c = check(); if (c) return c;
+ }
+
+ checksum[0] = '0';
+ checksum[1] = 0;
+ return 0;
+}