From 4e20f086e3d0f8aa881afaa891eb8759b87fb174 Mon Sep 17 00:00:00 2001 From: cathugger Date: Tue, 31 May 2022 01:41:03 +0300 Subject: [PATCH] fix amd64 asm stuff calling on windows --- ed25519/amd64-51-30k/compat.h | 10 ++++++++++ ed25519/amd64-51-30k/fe25519.h | 9 +++++---- ed25519/amd64-51-30k/ge25519.h | 21 ++++++++++----------- ed25519/amd64-51-30k/index_heap.h | 9 +++++---- ed25519/amd64-51-30k/sc25519.h | 18 ++++++++++-------- ed25519/amd64-51-30k/sc25519_mul.c | 3 ++- ed25519/amd64-64-24k/compat.h | 10 ++++++++++ ed25519/amd64-64-24k/fe25519.h | 14 ++++++-------- ed25519/amd64-64-24k/ge25519.h | 17 +++++++++-------- ed25519/amd64-64-24k/index_heap.h | 9 +++++---- ed25519/amd64-64-24k/sc25519.h | 18 ++++++++++-------- ed25519/amd64-64-24k/sc25519_mul.c | 3 ++- 12 files changed, 84 insertions(+), 57 deletions(-) create mode 100644 ed25519/amd64-51-30k/compat.h create mode 100644 ed25519/amd64-64-24k/compat.h diff --git a/ed25519/amd64-51-30k/compat.h b/ed25519/amd64-51-30k/compat.h new file mode 100644 index 0000000..6f721a7 --- /dev/null +++ b/ed25519/amd64-51-30k/compat.h @@ -0,0 +1,10 @@ +#ifndef COMPAT_H +#define COMPAT_H + +#if defined(_WIN32) && defined(__GNUC__) +#define SYSVABI __attribute__((sysv_abi)) +#else +#define SYSVABI +#endif + +#endif diff --git a/ed25519/amd64-51-30k/fe25519.h b/ed25519/amd64-51-30k/fe25519.h index 32dd823..f037e72 100644 --- a/ed25519/amd64-51-30k/fe25519.h +++ b/ed25519/amd64-51-30k/fe25519.h @@ -2,6 +2,7 @@ #define FE25519_H #include +#include "compat.h" #define fe25519 CRYPTO_NAMESPACE(batch_fe25519) #define fe25519_freeze CRYPTO_NAMESPACE(batch_fe25519_freeze) @@ -29,7 +30,7 @@ typedef struct } fe25519; -void fe25519_freeze(fe25519 *r); +void fe25519_freeze(fe25519 *r) SYSVABI; void fe25519_unpack(fe25519 *r, const unsigned char x[32]); @@ -53,13 +54,13 @@ void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y); void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y); -void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y); +void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y) SYSVABI; void fe25519_mul121666(fe25519 *r, const fe25519 *x); -void fe25519_square(fe25519 *r, const fe25519 *x); +void fe25519_square(fe25519 *r, const fe25519 *x) SYSVABI; -void fe25519_nsquare(fe25519 *r, unsigned long long n); +void fe25519_nsquare(fe25519 *r, unsigned long long n) SYSVABI; void fe25519_invert(fe25519 *r, const fe25519 *x); diff --git a/ed25519/amd64-51-30k/ge25519.h b/ed25519/amd64-51-30k/ge25519.h index f18c338..655a7e4 100644 --- a/ed25519/amd64-51-30k/ge25519.h +++ b/ed25519/amd64-51-30k/ge25519.h @@ -11,6 +11,7 @@ #include "fe25519.h" #include "sc25519.h" +#include "compat.h" #define ge25519 CRYPTO_NAMESPACE(batch_ge25519) #define ge25519_base CRYPTO_NAMESPACE(batch_ge25519_base) @@ -28,7 +29,6 @@ #define ge25519_add_p1p1 CRYPTO_NAMESPACE(batch_ge25519_add_p1p1) #define ge25519_dbl_p1p1 CRYPTO_NAMESPACE(batch_ge25519_dbl_p1p1) #define choose_t CRYPTO_NAMESPACE(batch_choose_t) -#define choose_t_smultq CRYPTO_NAMESPACE(batch_choose_t_smultq) #define ge25519_nielsadd2 CRYPTO_NAMESPACE(batch_ge25519_nielsadd2) #define ge25519_nielsadd_p1p1 CRYPTO_NAMESPACE(batch_ge25519_nielsadd_p1p1) #define ge25519_pnielsadd_p1p1 CRYPTO_NAMESPACE(batch_ge25519_pnielsadd_p1p1) @@ -75,16 +75,15 @@ typedef struct typedef unsigned char bytes32[32]; -extern void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p); -extern void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p); -extern void ge25519_p1p1_to_pniels(ge25519_pniels *r, const ge25519_p1p1 *p); -extern void ge25519_add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q); -extern void ge25519_dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p); -extern void choose_t(ge25519_niels *t, unsigned long long pos, signed long long b, const ge25519_niels *base_multiples); -extern void choose_t_smultq(ge25519_pniels *t, signed long long b, const ge25519_pniels *pre); -extern void ge25519_nielsadd2(ge25519_p3 *r, const ge25519_niels *q); -extern void ge25519_nielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_niels *q); -extern void ge25519_pnielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_pniels *q); +extern void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p) SYSVABI; +extern void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p) SYSVABI; +extern void ge25519_p1p1_to_pniels(ge25519_pniels *r, const ge25519_p1p1 *p) SYSVABI; +extern void ge25519_add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q) SYSVABI; +extern void ge25519_dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p) SYSVABI; +extern void choose_t(ge25519_niels *t, unsigned long long pos, signed long long b, const ge25519_niels *base_multiples) SYSVABI; +extern void ge25519_nielsadd2(ge25519_p3 *r, const ge25519_niels *q) SYSVABI; +extern void ge25519_nielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_niels *q) SYSVABI; +extern void ge25519_pnielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_pniels *q) SYSVABI; extern const ge25519 ge25519_base; diff --git a/ed25519/amd64-51-30k/index_heap.h b/ed25519/amd64-51-30k/index_heap.h index 24c5baf..f85af6b 100644 --- a/ed25519/amd64-51-30k/index_heap.h +++ b/ed25519/amd64-51-30k/index_heap.h @@ -2,6 +2,7 @@ #define INDEX_HEAP_H #include "sc25519.h" +#include "compat.h" #define heap_init CRYPTO_NAMESPACE(batch_heap_init) #define heap_extend CRYPTO_NAMESPACE(batch_heap_extend) @@ -23,9 +24,9 @@ void heap_push(unsigned long long *h, unsigned long long *hlen, unsigned long lo void heap_get2max(unsigned long long *h, unsigned long long *max1, unsigned long long *max2, sc25519 *scalars); -void heap_rootreplaced(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); -void heap_rootreplaced_3limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); -void heap_rootreplaced_2limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); -void heap_rootreplaced_1limb(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); +void heap_rootreplaced(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; +void heap_rootreplaced_3limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; +void heap_rootreplaced_2limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; +void heap_rootreplaced_1limb(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; #endif diff --git a/ed25519/amd64-51-30k/sc25519.h b/ed25519/amd64-51-30k/sc25519.h index 600b240..bf524e5 100644 --- a/ed25519/amd64-51-30k/sc25519.h +++ b/ed25519/amd64-51-30k/sc25519.h @@ -1,6 +1,8 @@ #ifndef SC25519_H #define SC25519_H +#include "compat.h" + #define sc25519 CRYPTO_NAMESPACE(batch_sc25519) #define shortsc25519 CRYPTO_NAMESPACE(batch_shortsc25519) #define sc25519_from32bytes CRYPTO_NAMESPACE(batch_sc25519_from32bytes) @@ -21,15 +23,15 @@ #define sc25519_2interleave2 CRYPTO_NAMESPACE(batch_sc25519_2interleave2) #define sc25519_barrett CRYPTO_NAMESPACE(batch_sc25519_barrett) -typedef struct +typedef struct { - unsigned long long v[4]; + unsigned long long v[4]; } sc25519; -typedef struct +typedef struct { - unsigned long long v[2]; + unsigned long long v[2]; } shortsc25519; @@ -43,11 +45,11 @@ void sc25519_to32bytes(unsigned char r[32], const sc25519 *x); int sc25519_iszero_vartime(const sc25519 *x); -int sc25519_lt(const sc25519 *x, const sc25519 *y); +int sc25519_lt(const sc25519 *x, const sc25519 *y) SYSVABI; -void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y); +void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y) SYSVABI; -void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y); +void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y) SYSVABI; void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y); @@ -64,6 +66,6 @@ void sc25519_slide(signed char r[256], const sc25519 *s, int swindowsize); void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2); -void sc25519_barrett(sc25519 *r, unsigned long long x[8]); +void sc25519_barrett(sc25519 *r, unsigned long long x[8]) SYSVABI; #endif diff --git a/ed25519/amd64-51-30k/sc25519_mul.c b/ed25519/amd64-51-30k/sc25519_mul.c index 94f74bf..f5ba04e 100644 --- a/ed25519/amd64-51-30k/sc25519_mul.c +++ b/ed25519/amd64-51-30k/sc25519_mul.c @@ -1,8 +1,9 @@ #include "sc25519.h" +#include "compat.h" #define ull4_mul CRYPTO_NAMESPACE(batch_ull4_mul) -extern void ull4_mul(unsigned long long r[8], const unsigned long long x[4], const unsigned long long y[4]); +extern void ull4_mul(unsigned long long r[8], const unsigned long long x[4], const unsigned long long y[4]) SYSVABI; void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y) { diff --git a/ed25519/amd64-64-24k/compat.h b/ed25519/amd64-64-24k/compat.h new file mode 100644 index 0000000..6f721a7 --- /dev/null +++ b/ed25519/amd64-64-24k/compat.h @@ -0,0 +1,10 @@ +#ifndef COMPAT_H +#define COMPAT_H + +#if defined(_WIN32) && defined(__GNUC__) +#define SYSVABI __attribute__((sysv_abi)) +#else +#define SYSVABI +#endif + +#endif diff --git a/ed25519/amd64-64-24k/fe25519.h b/ed25519/amd64-64-24k/fe25519.h index afade2d..8e68d98 100644 --- a/ed25519/amd64-64-24k/fe25519.h +++ b/ed25519/amd64-64-24k/fe25519.h @@ -2,6 +2,7 @@ #define FE25519_H #include +#include "compat.h" #define fe25519 CRYPTO_NAMESPACE(fe25519) #define fe25519_freeze CRYPTO_NAMESPACE(fe25519_freeze) @@ -16,7 +17,6 @@ #define fe25519_add CRYPTO_NAMESPACE(fe25519_add) #define fe25519_sub CRYPTO_NAMESPACE(fe25519_sub) #define fe25519_mul CRYPTO_NAMESPACE(fe25519_mul) -#define fe25519_mul121666 CRYPTO_NAMESPACE(fe25519_mul121666) #define fe25519_square CRYPTO_NAMESPACE(fe25519_square) #define fe25519_invert CRYPTO_NAMESPACE(fe25519_invert) #define fe25519_batchinvert CRYPTO_NAMESPACE(fe25519_batchinvert) @@ -28,7 +28,7 @@ typedef struct } fe25519; -void fe25519_freeze(fe25519 *r); +void fe25519_freeze(fe25519 *r) SYSVABI; void fe25519_unpack(fe25519 *r, const unsigned char x[32]); @@ -48,15 +48,13 @@ int fe25519_iszero_vartime(const fe25519 *x); int fe25519_iseq_vartime(const fe25519 *x, const fe25519 *y); -void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y); +void fe25519_add(fe25519 *r, const fe25519 *x, const fe25519 *y) SYSVABI; -void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y); +void fe25519_sub(fe25519 *r, const fe25519 *x, const fe25519 *y) SYSVABI; -void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y); +void fe25519_mul(fe25519 *r, const fe25519 *x, const fe25519 *y) SYSVABI; -void fe25519_mul121666(fe25519 *r, const fe25519 *x); - -void fe25519_square(fe25519 *r, const fe25519 *x); +void fe25519_square(fe25519 *r, const fe25519 *x) SYSVABI; void fe25519_pow(fe25519 *r, const fe25519 *x, const unsigned char *e); diff --git a/ed25519/amd64-64-24k/ge25519.h b/ed25519/amd64-64-24k/ge25519.h index ab0c6ed..42673b4 100644 --- a/ed25519/amd64-64-24k/ge25519.h +++ b/ed25519/amd64-64-24k/ge25519.h @@ -3,6 +3,7 @@ #include "fe25519.h" #include "sc25519.h" +#include "compat.h" #define ge25519 CRYPTO_NAMESPACE(ge25519) #define ge25519_base CRYPTO_NAMESPACE(ge25519_base) @@ -66,14 +67,14 @@ typedef struct typedef unsigned char bytes32[32]; -extern void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p); -extern void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p); -extern void ge25519_add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q); -extern void ge25519_dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p); -extern void choose_t(ge25519_niels *t, unsigned long long pos, signed long long b, const ge25519_niels *base_multiples); -extern void ge25519_nielsadd2(ge25519_p3 *r, const ge25519_niels *q); -extern void ge25519_nielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_niels *q); -extern void ge25519_pnielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_pniels *q); +extern void ge25519_p1p1_to_p2(ge25519_p2 *r, const ge25519_p1p1 *p) SYSVABI; +extern void ge25519_p1p1_to_p3(ge25519_p3 *r, const ge25519_p1p1 *p) SYSVABI; +extern void ge25519_add_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_p3 *q) SYSVABI; +extern void ge25519_dbl_p1p1(ge25519_p1p1 *r, const ge25519_p2 *p) SYSVABI; +extern void choose_t(ge25519_niels *t, unsigned long long pos, signed long long b, const ge25519_niels *base_multiples) SYSVABI; +extern void ge25519_nielsadd2(ge25519_p3 *r, const ge25519_niels *q) SYSVABI; +extern void ge25519_nielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_niels *q) SYSVABI; +extern void ge25519_pnielsadd_p1p1(ge25519_p1p1 *r, const ge25519_p3 *p, const ge25519_pniels *q) SYSVABI; extern const ge25519 ge25519_base; diff --git a/ed25519/amd64-64-24k/index_heap.h b/ed25519/amd64-64-24k/index_heap.h index 6a658ee..54ad1a3 100644 --- a/ed25519/amd64-64-24k/index_heap.h +++ b/ed25519/amd64-64-24k/index_heap.h @@ -2,6 +2,7 @@ #define INDEX_HEAP_H #include "sc25519.h" +#include "compat.h" #define heap_init CRYPTO_NAMESPACE(heap_init) #define heap_extend CRYPTO_NAMESPACE(heap_extend) @@ -23,9 +24,9 @@ void heap_push(unsigned long long *h, unsigned long long *hlen, unsigned long lo void heap_get2max(unsigned long long *h, unsigned long long *max1, unsigned long long *max2, sc25519 *scalars); -void heap_rootreplaced(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); -void heap_rootreplaced_3limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); -void heap_rootreplaced_2limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); -void heap_rootreplaced_1limb(unsigned long long *h, unsigned long long hlen, sc25519 *scalars); +void heap_rootreplaced(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; +void heap_rootreplaced_3limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; +void heap_rootreplaced_2limbs(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; +void heap_rootreplaced_1limb(unsigned long long *h, unsigned long long hlen, sc25519 *scalars) SYSVABI; #endif diff --git a/ed25519/amd64-64-24k/sc25519.h b/ed25519/amd64-64-24k/sc25519.h index 25d0a11..315cc53 100644 --- a/ed25519/amd64-64-24k/sc25519.h +++ b/ed25519/amd64-64-24k/sc25519.h @@ -1,6 +1,8 @@ #ifndef SC25519_H #define SC25519_H +#include "compat.h" + #define sc25519 CRYPTO_NAMESPACE(sc25519) #define shortsc25519 CRYPTO_NAMESPACE(shortsc25519) #define sc25519_from32bytes CRYPTO_NAMESPACE(sc25519_from32bytes) @@ -20,15 +22,15 @@ #define sc25519_2interleave2 CRYPTO_NAMESPACE(sc25519_2interleave2) #define sc25519_barrett CRYPTO_NAMESPACE(sc25519_barrett) -typedef struct +typedef struct { - unsigned long long v[4]; + unsigned long long v[4]; } sc25519; -typedef struct +typedef struct { - unsigned long long v[2]; + unsigned long long v[2]; } shortsc25519; @@ -42,11 +44,11 @@ void sc25519_to32bytes(unsigned char r[32], const sc25519 *x); int sc25519_iszero_vartime(const sc25519 *x); -int sc25519_lt(const sc25519 *x, const sc25519 *y); +int sc25519_lt(const sc25519 *x, const sc25519 *y) SYSVABI; -void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y); +void sc25519_add(sc25519 *r, const sc25519 *x, const sc25519 *y) SYSVABI; -void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y); +void sc25519_sub_nored(sc25519 *r, const sc25519 *x, const sc25519 *y) SYSVABI; void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y); @@ -61,6 +63,6 @@ void sc25519_slide(signed char r[256], const sc25519 *s, int swindowsize); void sc25519_2interleave2(unsigned char r[127], const sc25519 *s1, const sc25519 *s2); -void sc25519_barrett(sc25519 *r, unsigned long long x[8]); +void sc25519_barrett(sc25519 *r, unsigned long long x[8]) SYSVABI; #endif diff --git a/ed25519/amd64-64-24k/sc25519_mul.c b/ed25519/amd64-64-24k/sc25519_mul.c index 1ba4a55..29f1fb8 100644 --- a/ed25519/amd64-64-24k/sc25519_mul.c +++ b/ed25519/amd64-64-24k/sc25519_mul.c @@ -1,8 +1,9 @@ #include "sc25519.h" +#include "compat.h" #define ull4_mul CRYPTO_NAMESPACE(ull4_mul) -extern void ull4_mul(unsigned long long r[8], const unsigned long long x[4], const unsigned long long y[4]); +extern void ull4_mul(unsigned long long r[8], const unsigned long long x[4], const unsigned long long y[4]) SYSVABI; void sc25519_mul(sc25519 *r, const sc25519 *x, const sc25519 *y) {