aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/secp256k1/libsecp256k1/src/field_5x52.h
diff options
context:
space:
mode:
authorJeffrey Wilcke <jeffrey@ethereum.org>2015-10-16 01:46:57 +0800
committerJeffrey Wilcke <jeffrey@ethereum.org>2015-10-16 01:46:57 +0800
commitf466243417f60531998e8b500f2bb043af5b3d2a (patch)
tree9f8387b65d2a9d54a94ed26bc6a57ecfde3489f6 /crypto/secp256k1/libsecp256k1/src/field_5x52.h
parentcefe5c80b1cdcab606a169c0be65d9d2ba9bc941 (diff)
parentf32fa075f14d2b3a1213098274e0ba88c7761283 (diff)
downloadgo-tangerine-f466243417f60531998e8b500f2bb043af5b3d2a.tar
go-tangerine-f466243417f60531998e8b500f2bb043af5b3d2a.tar.gz
go-tangerine-f466243417f60531998e8b500f2bb043af5b3d2a.tar.bz2
go-tangerine-f466243417f60531998e8b500f2bb043af5b3d2a.tar.lz
go-tangerine-f466243417f60531998e8b500f2bb043af5b3d2a.tar.xz
go-tangerine-f466243417f60531998e8b500f2bb043af5b3d2a.tar.zst
go-tangerine-f466243417f60531998e8b500f2bb043af5b3d2a.zip
Merge pull request #1853 from Gustav-Simonsson/libsecp256k1_update
Update libsecp256k1, Go wrapper and tests
Diffstat (limited to 'crypto/secp256k1/libsecp256k1/src/field_5x52.h')
-rw-r--r--crypto/secp256k1/libsecp256k1/src/field_5x52.h47
1 files changed, 47 insertions, 0 deletions
diff --git a/crypto/secp256k1/libsecp256k1/src/field_5x52.h b/crypto/secp256k1/libsecp256k1/src/field_5x52.h
new file mode 100644
index 000000000..8e69a560d
--- /dev/null
+++ b/crypto/secp256k1/libsecp256k1/src/field_5x52.h
@@ -0,0 +1,47 @@
+/**********************************************************************
+ * Copyright (c) 2013, 2014 Pieter Wuille *
+ * Distributed under the MIT software license, see the accompanying *
+ * file COPYING or http://www.opensource.org/licenses/mit-license.php.*
+ **********************************************************************/
+
+#ifndef _SECP256K1_FIELD_REPR_
+#define _SECP256K1_FIELD_REPR_
+
+#include <stdint.h>
+
+typedef struct {
+ /* X = sum(i=0..4, elem[i]*2^52) mod n */
+ uint64_t n[5];
+#ifdef VERIFY
+ int magnitude;
+ int normalized;
+#endif
+} secp256k1_fe;
+
+/* Unpacks a constant into a overlapping multi-limbed FE element. */
+#define SECP256K1_FE_CONST_INNER(d7, d6, d5, d4, d3, d2, d1, d0) { \
+ (d0) | (((uint64_t)(d1) & 0xFFFFFUL) << 32), \
+ ((uint64_t)(d1) >> 20) | (((uint64_t)(d2)) << 12) | (((uint64_t)(d3) & 0xFFUL) << 44), \
+ ((uint64_t)(d3) >> 8) | (((uint64_t)(d4) & 0xFFFFFFFUL) << 24), \
+ ((uint64_t)(d4) >> 28) | (((uint64_t)(d5)) << 4) | (((uint64_t)(d6) & 0xFFFFUL) << 36), \
+ ((uint64_t)(d6) >> 16) | (((uint64_t)(d7)) << 16) \
+}
+
+#ifdef VERIFY
+#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0)), 1, 1}
+#else
+#define SECP256K1_FE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {SECP256K1_FE_CONST_INNER((d7), (d6), (d5), (d4), (d3), (d2), (d1), (d0))}
+#endif
+
+typedef struct {
+ uint64_t n[4];
+} secp256k1_fe_storage;
+
+#define SECP256K1_FE_STORAGE_CONST(d7, d6, d5, d4, d3, d2, d1, d0) {{ \
+ (d0) | (((uint64_t)(d1)) << 32), \
+ (d2) | (((uint64_t)(d3)) << 32), \
+ (d4) | (((uint64_t)(d5)) << 32), \
+ (d6) | (((uint64_t)(d7)) << 32) \
+}}
+
+#endif