aboutsummaryrefslogtreecommitdiff
path: root/src/Specific/NISTP256/AMD64/test/femul_test.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/Specific/NISTP256/AMD64/test/femul_test.c')
-rw-r--r--src/Specific/NISTP256/AMD64/test/femul_test.c48
1 files changed, 48 insertions, 0 deletions
diff --git a/src/Specific/NISTP256/AMD64/test/femul_test.c b/src/Specific/NISTP256/AMD64/test/femul_test.c
new file mode 100644
index 000000000..9519399e0
--- /dev/null
+++ b/src/Specific/NISTP256/AMD64/test/femul_test.c
@@ -0,0 +1,48 @@
+#include <stdint.h>
+#include <inttypes.h>
+#include <stdio.h>
+#include "femul.h"
+
+// all arrays big-endian
+static uint64_t Rmodm[4] = {0xfffffffe, 0xffffffffffffffff, 0xffffffff00000000, 0x0000000000000001};
+
+int main() {
+ uint64_t out[4] = {0};
+ if ( femul(out,
+ Rmodm[0], Rmodm[1], Rmodm[2], Rmodm[3],
+ Rmodm[0], Rmodm[1], Rmodm[2], Rmodm[3]),
+ ! (out[0] == Rmodm[0]
+ && out[1] == Rmodm[1]
+ && out[2] == Rmodm[2]
+ && out[3] == Rmodm[3]
+ )) { return 1; }
+ if ( femul(out,
+ 0, 0, 0, 0,
+ Rmodm[0], Rmodm[1], Rmodm[2], Rmodm[3]),
+ ! (out[0] == 0
+ && out[1] == 0
+ && out[2] == 0
+ && out[3] == 0
+ )) { return 2; }
+ if ( femul(out,
+ 0, 0, 0, 1,
+ 0, 0, 0, 1),
+ ! (out[0] == 0xfffffffe00000003 // R^-1
+ && out[1] == 0xfffffffd00000002
+ && out[2] == 0x00000001fffffffe
+ && out[3] == 0x0000000300000000
+ )) { return 3; }
+ if ( femul(out,
+ 0, 0, 0, 1,
+ 0x4fffffffd, 0xfffffffffffffffe, 0xfffffffbffffffff, 0x0000000000000003), // R^2
+ ! (out[0] == Rmodm[0]
+ && out[1] == Rmodm[1]
+ && out[2] == Rmodm[2]
+ && out[3] == Rmodm[3]
+ )) { return 4; }
+
+
+ //printf("0x%016" PRIx64 " 0x%016" PRIx64 " 0x%016" PRIx64 " 0x%016" PRIx64 "\n", out[0], out[1], out[2], out[3]);
+ //printf("((((((0x%016" PRIx64 "<<64)+ 0x%016" PRIx64 ")<<64)+ 0x%016" PRIx64 ")<<64)+ 0x%016" PRIx64 ")\n", out[0], out[1], out[2], out[3]);
+ return 0;
+}