ed25519 1.2.4-java
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +5 -0
- data/.rubocop.yml +35 -0
- data/.travis.yml +26 -0
- data/CHANGES.md +70 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +12 -0
- data/LICENSE +22 -0
- data/README.md +170 -0
- data/Rakefile +27 -0
- data/appveyor.yml +21 -0
- data/ed25519.gemspec +32 -0
- data/ed25519.png +0 -0
- data/ext/ed25519_jruby/LICENSE.txt +123 -0
- data/ext/ed25519_jruby/README.md +77 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAEngine.java +491 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAKey.java +31 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPrivateKey.java +338 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPublicKey.java +275 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSASecurityProvider.java +59 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyFactory.java +75 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyPairGenerator.java +97 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/Utils.java +103 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Constants.java +23 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Curve.java +100 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Encoding.java +54 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Field.java +99 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/FieldElement.java +76 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/GroupElement.java +1034 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ScalarOps.java +34 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerFieldElement.java +131 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerLittleEndianEncoding.java +102 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerScalarOps.java +37 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/package.html +6 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519FieldElement.java +988 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519LittleEndianEncoding.java +256 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519ScalarOps.java +693 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAGenParameterSpec.java +32 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveSpec.java +35 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveTable.java +71 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java +97 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java +133 -0
- data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java +61 -0
- data/ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java +95 -0
- data/ext/ed25519_ref10/api.h +4 -0
- data/ext/ed25519_ref10/base.h +1344 -0
- data/ext/ed25519_ref10/base2.h +40 -0
- data/ext/ed25519_ref10/d.h +1 -0
- data/ext/ed25519_ref10/d2.h +1 -0
- data/ext/ed25519_ref10/ed25519_ref10.c +99 -0
- data/ext/ed25519_ref10/ed25519_ref10.h +33 -0
- data/ext/ed25519_ref10/extconf.rb +9 -0
- data/ext/ed25519_ref10/fe.c +1085 -0
- data/ext/ed25519_ref10/fe.h +56 -0
- data/ext/ed25519_ref10/ge.c +407 -0
- data/ext/ed25519_ref10/ge.h +95 -0
- data/ext/ed25519_ref10/ge_add.h +97 -0
- data/ext/ed25519_ref10/ge_madd.h +88 -0
- data/ext/ed25519_ref10/ge_msub.h +88 -0
- data/ext/ed25519_ref10/ge_p2_dbl.h +73 -0
- data/ext/ed25519_ref10/ge_sub.h +97 -0
- data/ext/ed25519_ref10/keypair.c +22 -0
- data/ext/ed25519_ref10/open.c +47 -0
- data/ext/ed25519_ref10/pow22523.h +160 -0
- data/ext/ed25519_ref10/pow225521.h +160 -0
- data/ext/ed25519_ref10/sc.h +17 -0
- data/ext/ed25519_ref10/sc_muladd.c +366 -0
- data/ext/ed25519_ref10/sc_reduce.c +272 -0
- data/ext/ed25519_ref10/sha512.c +304 -0
- data/ext/ed25519_ref10/sha512.h +8 -0
- data/ext/ed25519_ref10/sign.c +41 -0
- data/ext/ed25519_ref10/sqrtm1.h +1 -0
- data/ext/ed25519_ref10/verify.c +40 -0
- data/lib/ed25519.rb +72 -0
- data/lib/ed25519/signing_key.rb +60 -0
- data/lib/ed25519/verify_key.rb +44 -0
- data/lib/ed25519/version.rb +5 -0
- metadata +137 -0
@@ -0,0 +1,95 @@
|
|
1
|
+
#ifndef GE_H
|
2
|
+
#define GE_H
|
3
|
+
|
4
|
+
/*
|
5
|
+
ge means group element.
|
6
|
+
|
7
|
+
Here the group is the set of pairs (x,y) of field elements (see fe.h)
|
8
|
+
satisfying -x^2 + y^2 = 1 + d x^2y^2
|
9
|
+
where d = -121665/121666.
|
10
|
+
|
11
|
+
Representations:
|
12
|
+
ge_p2 (projective): (X:Y:Z) satisfying x=X/Z, y=Y/Z
|
13
|
+
ge_p3 (extended): (X:Y:Z:T) satisfying x=X/Z, y=Y/Z, XY=ZT
|
14
|
+
ge_p1p1 (completed): ((X:Z),(Y:T)) satisfying x=X/Z, y=Y/T
|
15
|
+
ge_precomp (Duif): (y+x,y-x,2dxy)
|
16
|
+
*/
|
17
|
+
|
18
|
+
#include "fe.h"
|
19
|
+
|
20
|
+
typedef struct {
|
21
|
+
fe X;
|
22
|
+
fe Y;
|
23
|
+
fe Z;
|
24
|
+
} ge_p2;
|
25
|
+
|
26
|
+
typedef struct {
|
27
|
+
fe X;
|
28
|
+
fe Y;
|
29
|
+
fe Z;
|
30
|
+
fe T;
|
31
|
+
} ge_p3;
|
32
|
+
|
33
|
+
typedef struct {
|
34
|
+
fe X;
|
35
|
+
fe Y;
|
36
|
+
fe Z;
|
37
|
+
fe T;
|
38
|
+
} ge_p1p1;
|
39
|
+
|
40
|
+
typedef struct {
|
41
|
+
fe yplusx;
|
42
|
+
fe yminusx;
|
43
|
+
fe xy2d;
|
44
|
+
} ge_precomp;
|
45
|
+
|
46
|
+
typedef struct {
|
47
|
+
fe YplusX;
|
48
|
+
fe YminusX;
|
49
|
+
fe Z;
|
50
|
+
fe T2d;
|
51
|
+
} ge_cached;
|
52
|
+
|
53
|
+
#define ge_frombytes_negate_vartime crypto_sign_ed25519_ref10_ge_frombytes_negate_vartime
|
54
|
+
#define ge_tobytes crypto_sign_ed25519_ref10_ge_tobytes
|
55
|
+
#define ge_p3_tobytes crypto_sign_ed25519_ref10_ge_p3_tobytes
|
56
|
+
|
57
|
+
#define ge_p2_0 crypto_sign_ed25519_ref10_ge_p2_0
|
58
|
+
#define ge_p3_0 crypto_sign_ed25519_ref10_ge_p3_0
|
59
|
+
#define ge_precomp_0 crypto_sign_ed25519_ref10_ge_precomp_0
|
60
|
+
#define ge_p3_to_p2 crypto_sign_ed25519_ref10_ge_p3_to_p2
|
61
|
+
#define ge_p3_to_cached crypto_sign_ed25519_ref10_ge_p3_to_cached
|
62
|
+
#define ge_p1p1_to_p2 crypto_sign_ed25519_ref10_ge_p1p1_to_p2
|
63
|
+
#define ge_p1p1_to_p3 crypto_sign_ed25519_ref10_ge_p1p1_to_p3
|
64
|
+
#define ge_p2_dbl crypto_sign_ed25519_ref10_ge_p2_dbl
|
65
|
+
#define ge_p3_dbl crypto_sign_ed25519_ref10_ge_p3_dbl
|
66
|
+
|
67
|
+
#define ge_madd crypto_sign_ed25519_ref10_ge_madd
|
68
|
+
#define ge_msub crypto_sign_ed25519_ref10_ge_msub
|
69
|
+
#define ge_add crypto_sign_ed25519_ref10_ge_add
|
70
|
+
#define ge_sub crypto_sign_ed25519_ref10_ge_sub
|
71
|
+
#define ge_scalarmult_base crypto_sign_ed25519_ref10_ge_scalarmult_base
|
72
|
+
#define ge_double_scalarmult_vartime crypto_sign_ed25519_ref10_ge_double_scalarmult_vartime
|
73
|
+
|
74
|
+
extern void ge_tobytes(unsigned char *,const ge_p2 *);
|
75
|
+
extern void ge_p3_tobytes(unsigned char *,const ge_p3 *);
|
76
|
+
extern int ge_frombytes_negate_vartime(ge_p3 *,const unsigned char *);
|
77
|
+
|
78
|
+
extern void ge_p2_0(ge_p2 *);
|
79
|
+
extern void ge_p3_0(ge_p3 *);
|
80
|
+
extern void ge_precomp_0(ge_precomp *);
|
81
|
+
extern void ge_p3_to_p2(ge_p2 *,const ge_p3 *);
|
82
|
+
extern void ge_p3_to_cached(ge_cached *,const ge_p3 *);
|
83
|
+
extern void ge_p1p1_to_p2(ge_p2 *,const ge_p1p1 *);
|
84
|
+
extern void ge_p1p1_to_p3(ge_p3 *,const ge_p1p1 *);
|
85
|
+
extern void ge_p2_dbl(ge_p1p1 *,const ge_p2 *);
|
86
|
+
extern void ge_p3_dbl(ge_p1p1 *,const ge_p3 *);
|
87
|
+
|
88
|
+
extern void ge_madd(ge_p1p1 *,const ge_p3 *,const ge_precomp *);
|
89
|
+
extern void ge_msub(ge_p1p1 *,const ge_p3 *,const ge_precomp *);
|
90
|
+
extern void ge_add(ge_p1p1 *,const ge_p3 *,const ge_cached *);
|
91
|
+
extern void ge_sub(ge_p1p1 *,const ge_p3 *,const ge_cached *);
|
92
|
+
extern void ge_scalarmult_base(ge_p3 *,const unsigned char *);
|
93
|
+
extern void ge_double_scalarmult_vartime(ge_p2 *,const unsigned char *,const ge_p3 *,const unsigned char *);
|
94
|
+
|
95
|
+
#endif
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
/* qhasm: enter ge_add */
|
3
|
+
|
4
|
+
/* qhasm: fe X1 */
|
5
|
+
|
6
|
+
/* qhasm: fe Y1 */
|
7
|
+
|
8
|
+
/* qhasm: fe Z1 */
|
9
|
+
|
10
|
+
/* qhasm: fe Z2 */
|
11
|
+
|
12
|
+
/* qhasm: fe T1 */
|
13
|
+
|
14
|
+
/* qhasm: fe ZZ */
|
15
|
+
|
16
|
+
/* qhasm: fe YpX2 */
|
17
|
+
|
18
|
+
/* qhasm: fe YmX2 */
|
19
|
+
|
20
|
+
/* qhasm: fe T2d2 */
|
21
|
+
|
22
|
+
/* qhasm: fe X3 */
|
23
|
+
|
24
|
+
/* qhasm: fe Y3 */
|
25
|
+
|
26
|
+
/* qhasm: fe Z3 */
|
27
|
+
|
28
|
+
/* qhasm: fe T3 */
|
29
|
+
|
30
|
+
/* qhasm: fe YpX1 */
|
31
|
+
|
32
|
+
/* qhasm: fe YmX1 */
|
33
|
+
|
34
|
+
/* qhasm: fe A */
|
35
|
+
|
36
|
+
/* qhasm: fe B */
|
37
|
+
|
38
|
+
/* qhasm: fe C */
|
39
|
+
|
40
|
+
/* qhasm: fe D */
|
41
|
+
|
42
|
+
/* qhasm: YpX1 = Y1+X1 */
|
43
|
+
/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
|
44
|
+
/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
|
45
|
+
fe_add(r->X,p->Y,p->X);
|
46
|
+
|
47
|
+
/* qhasm: YmX1 = Y1-X1 */
|
48
|
+
/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
|
49
|
+
/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
|
50
|
+
fe_sub(r->Y,p->Y,p->X);
|
51
|
+
|
52
|
+
/* qhasm: A = YpX1*YpX2 */
|
53
|
+
/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YpX2=fe#15); */
|
54
|
+
/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YpX2=q->YplusX); */
|
55
|
+
fe_mul(r->Z,r->X,q->YplusX);
|
56
|
+
|
57
|
+
/* qhasm: B = YmX1*YmX2 */
|
58
|
+
/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YmX2=fe#16); */
|
59
|
+
/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YmX2=q->YminusX); */
|
60
|
+
fe_mul(r->Y,r->Y,q->YminusX);
|
61
|
+
|
62
|
+
/* qhasm: C = T2d2*T1 */
|
63
|
+
/* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */
|
64
|
+
/* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */
|
65
|
+
fe_mul(r->T,q->T2d,p->T);
|
66
|
+
|
67
|
+
/* qhasm: ZZ = Z1*Z2 */
|
68
|
+
/* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */
|
69
|
+
/* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */
|
70
|
+
fe_mul(r->X,p->Z,q->Z);
|
71
|
+
|
72
|
+
/* qhasm: D = 2*ZZ */
|
73
|
+
/* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */
|
74
|
+
/* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */
|
75
|
+
fe_add(t0,r->X,r->X);
|
76
|
+
|
77
|
+
/* qhasm: X3 = A-B */
|
78
|
+
/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
|
79
|
+
/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
|
80
|
+
fe_sub(r->X,r->Z,r->Y);
|
81
|
+
|
82
|
+
/* qhasm: Y3 = A+B */
|
83
|
+
/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
|
84
|
+
/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
|
85
|
+
fe_add(r->Y,r->Z,r->Y);
|
86
|
+
|
87
|
+
/* qhasm: Z3 = D+C */
|
88
|
+
/* asm 1: fe_add(>Z3=fe#3,<D=fe#5,<C=fe#4); */
|
89
|
+
/* asm 2: fe_add(>Z3=r->Z,<D=t0,<C=r->T); */
|
90
|
+
fe_add(r->Z,t0,r->T);
|
91
|
+
|
92
|
+
/* qhasm: T3 = D-C */
|
93
|
+
/* asm 1: fe_sub(>T3=fe#4,<D=fe#5,<C=fe#4); */
|
94
|
+
/* asm 2: fe_sub(>T3=r->T,<D=t0,<C=r->T); */
|
95
|
+
fe_sub(r->T,t0,r->T);
|
96
|
+
|
97
|
+
/* qhasm: return */
|
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
/* qhasm: enter ge_madd */
|
3
|
+
|
4
|
+
/* qhasm: fe X1 */
|
5
|
+
|
6
|
+
/* qhasm: fe Y1 */
|
7
|
+
|
8
|
+
/* qhasm: fe Z1 */
|
9
|
+
|
10
|
+
/* qhasm: fe T1 */
|
11
|
+
|
12
|
+
/* qhasm: fe ypx2 */
|
13
|
+
|
14
|
+
/* qhasm: fe ymx2 */
|
15
|
+
|
16
|
+
/* qhasm: fe xy2d2 */
|
17
|
+
|
18
|
+
/* qhasm: fe X3 */
|
19
|
+
|
20
|
+
/* qhasm: fe Y3 */
|
21
|
+
|
22
|
+
/* qhasm: fe Z3 */
|
23
|
+
|
24
|
+
/* qhasm: fe T3 */
|
25
|
+
|
26
|
+
/* qhasm: fe YpX1 */
|
27
|
+
|
28
|
+
/* qhasm: fe YmX1 */
|
29
|
+
|
30
|
+
/* qhasm: fe A */
|
31
|
+
|
32
|
+
/* qhasm: fe B */
|
33
|
+
|
34
|
+
/* qhasm: fe C */
|
35
|
+
|
36
|
+
/* qhasm: fe D */
|
37
|
+
|
38
|
+
/* qhasm: YpX1 = Y1+X1 */
|
39
|
+
/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
|
40
|
+
/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
|
41
|
+
fe_add(r->X,p->Y,p->X);
|
42
|
+
|
43
|
+
/* qhasm: YmX1 = Y1-X1 */
|
44
|
+
/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
|
45
|
+
/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
|
46
|
+
fe_sub(r->Y,p->Y,p->X);
|
47
|
+
|
48
|
+
/* qhasm: A = YpX1*ypx2 */
|
49
|
+
/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<ypx2=fe#15); */
|
50
|
+
/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<ypx2=q->yplusx); */
|
51
|
+
fe_mul(r->Z,r->X,q->yplusx);
|
52
|
+
|
53
|
+
/* qhasm: B = YmX1*ymx2 */
|
54
|
+
/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<ymx2=fe#16); */
|
55
|
+
/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<ymx2=q->yminusx); */
|
56
|
+
fe_mul(r->Y,r->Y,q->yminusx);
|
57
|
+
|
58
|
+
/* qhasm: C = xy2d2*T1 */
|
59
|
+
/* asm 1: fe_mul(>C=fe#4,<xy2d2=fe#17,<T1=fe#14); */
|
60
|
+
/* asm 2: fe_mul(>C=r->T,<xy2d2=q->xy2d,<T1=p->T); */
|
61
|
+
fe_mul(r->T,q->xy2d,p->T);
|
62
|
+
|
63
|
+
/* qhasm: D = 2*Z1 */
|
64
|
+
/* asm 1: fe_add(>D=fe#5,<Z1=fe#13,<Z1=fe#13); */
|
65
|
+
/* asm 2: fe_add(>D=t0,<Z1=p->Z,<Z1=p->Z); */
|
66
|
+
fe_add(t0,p->Z,p->Z);
|
67
|
+
|
68
|
+
/* qhasm: X3 = A-B */
|
69
|
+
/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
|
70
|
+
/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
|
71
|
+
fe_sub(r->X,r->Z,r->Y);
|
72
|
+
|
73
|
+
/* qhasm: Y3 = A+B */
|
74
|
+
/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
|
75
|
+
/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
|
76
|
+
fe_add(r->Y,r->Z,r->Y);
|
77
|
+
|
78
|
+
/* qhasm: Z3 = D+C */
|
79
|
+
/* asm 1: fe_add(>Z3=fe#3,<D=fe#5,<C=fe#4); */
|
80
|
+
/* asm 2: fe_add(>Z3=r->Z,<D=t0,<C=r->T); */
|
81
|
+
fe_add(r->Z,t0,r->T);
|
82
|
+
|
83
|
+
/* qhasm: T3 = D-C */
|
84
|
+
/* asm 1: fe_sub(>T3=fe#4,<D=fe#5,<C=fe#4); */
|
85
|
+
/* asm 2: fe_sub(>T3=r->T,<D=t0,<C=r->T); */
|
86
|
+
fe_sub(r->T,t0,r->T);
|
87
|
+
|
88
|
+
/* qhasm: return */
|
@@ -0,0 +1,88 @@
|
|
1
|
+
|
2
|
+
/* qhasm: enter ge_msub */
|
3
|
+
|
4
|
+
/* qhasm: fe X1 */
|
5
|
+
|
6
|
+
/* qhasm: fe Y1 */
|
7
|
+
|
8
|
+
/* qhasm: fe Z1 */
|
9
|
+
|
10
|
+
/* qhasm: fe T1 */
|
11
|
+
|
12
|
+
/* qhasm: fe ypx2 */
|
13
|
+
|
14
|
+
/* qhasm: fe ymx2 */
|
15
|
+
|
16
|
+
/* qhasm: fe xy2d2 */
|
17
|
+
|
18
|
+
/* qhasm: fe X3 */
|
19
|
+
|
20
|
+
/* qhasm: fe Y3 */
|
21
|
+
|
22
|
+
/* qhasm: fe Z3 */
|
23
|
+
|
24
|
+
/* qhasm: fe T3 */
|
25
|
+
|
26
|
+
/* qhasm: fe YpX1 */
|
27
|
+
|
28
|
+
/* qhasm: fe YmX1 */
|
29
|
+
|
30
|
+
/* qhasm: fe A */
|
31
|
+
|
32
|
+
/* qhasm: fe B */
|
33
|
+
|
34
|
+
/* qhasm: fe C */
|
35
|
+
|
36
|
+
/* qhasm: fe D */
|
37
|
+
|
38
|
+
/* qhasm: YpX1 = Y1+X1 */
|
39
|
+
/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
|
40
|
+
/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
|
41
|
+
fe_add(r->X,p->Y,p->X);
|
42
|
+
|
43
|
+
/* qhasm: YmX1 = Y1-X1 */
|
44
|
+
/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
|
45
|
+
/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
|
46
|
+
fe_sub(r->Y,p->Y,p->X);
|
47
|
+
|
48
|
+
/* qhasm: A = YpX1*ymx2 */
|
49
|
+
/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<ymx2=fe#16); */
|
50
|
+
/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<ymx2=q->yminusx); */
|
51
|
+
fe_mul(r->Z,r->X,q->yminusx);
|
52
|
+
|
53
|
+
/* qhasm: B = YmX1*ypx2 */
|
54
|
+
/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<ypx2=fe#15); */
|
55
|
+
/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<ypx2=q->yplusx); */
|
56
|
+
fe_mul(r->Y,r->Y,q->yplusx);
|
57
|
+
|
58
|
+
/* qhasm: C = xy2d2*T1 */
|
59
|
+
/* asm 1: fe_mul(>C=fe#4,<xy2d2=fe#17,<T1=fe#14); */
|
60
|
+
/* asm 2: fe_mul(>C=r->T,<xy2d2=q->xy2d,<T1=p->T); */
|
61
|
+
fe_mul(r->T,q->xy2d,p->T);
|
62
|
+
|
63
|
+
/* qhasm: D = 2*Z1 */
|
64
|
+
/* asm 1: fe_add(>D=fe#5,<Z1=fe#13,<Z1=fe#13); */
|
65
|
+
/* asm 2: fe_add(>D=t0,<Z1=p->Z,<Z1=p->Z); */
|
66
|
+
fe_add(t0,p->Z,p->Z);
|
67
|
+
|
68
|
+
/* qhasm: X3 = A-B */
|
69
|
+
/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
|
70
|
+
/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
|
71
|
+
fe_sub(r->X,r->Z,r->Y);
|
72
|
+
|
73
|
+
/* qhasm: Y3 = A+B */
|
74
|
+
/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
|
75
|
+
/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
|
76
|
+
fe_add(r->Y,r->Z,r->Y);
|
77
|
+
|
78
|
+
/* qhasm: Z3 = D-C */
|
79
|
+
/* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */
|
80
|
+
/* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */
|
81
|
+
fe_sub(r->Z,t0,r->T);
|
82
|
+
|
83
|
+
/* qhasm: T3 = D+C */
|
84
|
+
/* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */
|
85
|
+
/* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */
|
86
|
+
fe_add(r->T,t0,r->T);
|
87
|
+
|
88
|
+
/* qhasm: return */
|
@@ -0,0 +1,73 @@
|
|
1
|
+
|
2
|
+
/* qhasm: enter ge_p2_dbl */
|
3
|
+
|
4
|
+
/* qhasm: fe X1 */
|
5
|
+
|
6
|
+
/* qhasm: fe Y1 */
|
7
|
+
|
8
|
+
/* qhasm: fe Z1 */
|
9
|
+
|
10
|
+
/* qhasm: fe A */
|
11
|
+
|
12
|
+
/* qhasm: fe AA */
|
13
|
+
|
14
|
+
/* qhasm: fe XX */
|
15
|
+
|
16
|
+
/* qhasm: fe YY */
|
17
|
+
|
18
|
+
/* qhasm: fe B */
|
19
|
+
|
20
|
+
/* qhasm: fe X3 */
|
21
|
+
|
22
|
+
/* qhasm: fe Y3 */
|
23
|
+
|
24
|
+
/* qhasm: fe Z3 */
|
25
|
+
|
26
|
+
/* qhasm: fe T3 */
|
27
|
+
|
28
|
+
/* qhasm: XX=X1^2 */
|
29
|
+
/* asm 1: fe_sq(>XX=fe#1,<X1=fe#11); */
|
30
|
+
/* asm 2: fe_sq(>XX=r->X,<X1=p->X); */
|
31
|
+
fe_sq(r->X,p->X);
|
32
|
+
|
33
|
+
/* qhasm: YY=Y1^2 */
|
34
|
+
/* asm 1: fe_sq(>YY=fe#3,<Y1=fe#12); */
|
35
|
+
/* asm 2: fe_sq(>YY=r->Z,<Y1=p->Y); */
|
36
|
+
fe_sq(r->Z,p->Y);
|
37
|
+
|
38
|
+
/* qhasm: B=2*Z1^2 */
|
39
|
+
/* asm 1: fe_sq2(>B=fe#4,<Z1=fe#13); */
|
40
|
+
/* asm 2: fe_sq2(>B=r->T,<Z1=p->Z); */
|
41
|
+
fe_sq2(r->T,p->Z);
|
42
|
+
|
43
|
+
/* qhasm: A=X1+Y1 */
|
44
|
+
/* asm 1: fe_add(>A=fe#2,<X1=fe#11,<Y1=fe#12); */
|
45
|
+
/* asm 2: fe_add(>A=r->Y,<X1=p->X,<Y1=p->Y); */
|
46
|
+
fe_add(r->Y,p->X,p->Y);
|
47
|
+
|
48
|
+
/* qhasm: AA=A^2 */
|
49
|
+
/* asm 1: fe_sq(>AA=fe#5,<A=fe#2); */
|
50
|
+
/* asm 2: fe_sq(>AA=t0,<A=r->Y); */
|
51
|
+
fe_sq(t0,r->Y);
|
52
|
+
|
53
|
+
/* qhasm: Y3=YY+XX */
|
54
|
+
/* asm 1: fe_add(>Y3=fe#2,<YY=fe#3,<XX=fe#1); */
|
55
|
+
/* asm 2: fe_add(>Y3=r->Y,<YY=r->Z,<XX=r->X); */
|
56
|
+
fe_add(r->Y,r->Z,r->X);
|
57
|
+
|
58
|
+
/* qhasm: Z3=YY-XX */
|
59
|
+
/* asm 1: fe_sub(>Z3=fe#3,<YY=fe#3,<XX=fe#1); */
|
60
|
+
/* asm 2: fe_sub(>Z3=r->Z,<YY=r->Z,<XX=r->X); */
|
61
|
+
fe_sub(r->Z,r->Z,r->X);
|
62
|
+
|
63
|
+
/* qhasm: X3=AA-Y3 */
|
64
|
+
/* asm 1: fe_sub(>X3=fe#1,<AA=fe#5,<Y3=fe#2); */
|
65
|
+
/* asm 2: fe_sub(>X3=r->X,<AA=t0,<Y3=r->Y); */
|
66
|
+
fe_sub(r->X,t0,r->Y);
|
67
|
+
|
68
|
+
/* qhasm: T3=B-Z3 */
|
69
|
+
/* asm 1: fe_sub(>T3=fe#4,<B=fe#4,<Z3=fe#3); */
|
70
|
+
/* asm 2: fe_sub(>T3=r->T,<B=r->T,<Z3=r->Z); */
|
71
|
+
fe_sub(r->T,r->T,r->Z);
|
72
|
+
|
73
|
+
/* qhasm: return */
|
@@ -0,0 +1,97 @@
|
|
1
|
+
|
2
|
+
/* qhasm: enter ge_sub */
|
3
|
+
|
4
|
+
/* qhasm: fe X1 */
|
5
|
+
|
6
|
+
/* qhasm: fe Y1 */
|
7
|
+
|
8
|
+
/* qhasm: fe Z1 */
|
9
|
+
|
10
|
+
/* qhasm: fe Z2 */
|
11
|
+
|
12
|
+
/* qhasm: fe T1 */
|
13
|
+
|
14
|
+
/* qhasm: fe ZZ */
|
15
|
+
|
16
|
+
/* qhasm: fe YpX2 */
|
17
|
+
|
18
|
+
/* qhasm: fe YmX2 */
|
19
|
+
|
20
|
+
/* qhasm: fe T2d2 */
|
21
|
+
|
22
|
+
/* qhasm: fe X3 */
|
23
|
+
|
24
|
+
/* qhasm: fe Y3 */
|
25
|
+
|
26
|
+
/* qhasm: fe Z3 */
|
27
|
+
|
28
|
+
/* qhasm: fe T3 */
|
29
|
+
|
30
|
+
/* qhasm: fe YpX1 */
|
31
|
+
|
32
|
+
/* qhasm: fe YmX1 */
|
33
|
+
|
34
|
+
/* qhasm: fe A */
|
35
|
+
|
36
|
+
/* qhasm: fe B */
|
37
|
+
|
38
|
+
/* qhasm: fe C */
|
39
|
+
|
40
|
+
/* qhasm: fe D */
|
41
|
+
|
42
|
+
/* qhasm: YpX1 = Y1+X1 */
|
43
|
+
/* asm 1: fe_add(>YpX1=fe#1,<Y1=fe#12,<X1=fe#11); */
|
44
|
+
/* asm 2: fe_add(>YpX1=r->X,<Y1=p->Y,<X1=p->X); */
|
45
|
+
fe_add(r->X,p->Y,p->X);
|
46
|
+
|
47
|
+
/* qhasm: YmX1 = Y1-X1 */
|
48
|
+
/* asm 1: fe_sub(>YmX1=fe#2,<Y1=fe#12,<X1=fe#11); */
|
49
|
+
/* asm 2: fe_sub(>YmX1=r->Y,<Y1=p->Y,<X1=p->X); */
|
50
|
+
fe_sub(r->Y,p->Y,p->X);
|
51
|
+
|
52
|
+
/* qhasm: A = YpX1*YmX2 */
|
53
|
+
/* asm 1: fe_mul(>A=fe#3,<YpX1=fe#1,<YmX2=fe#16); */
|
54
|
+
/* asm 2: fe_mul(>A=r->Z,<YpX1=r->X,<YmX2=q->YminusX); */
|
55
|
+
fe_mul(r->Z,r->X,q->YminusX);
|
56
|
+
|
57
|
+
/* qhasm: B = YmX1*YpX2 */
|
58
|
+
/* asm 1: fe_mul(>B=fe#2,<YmX1=fe#2,<YpX2=fe#15); */
|
59
|
+
/* asm 2: fe_mul(>B=r->Y,<YmX1=r->Y,<YpX2=q->YplusX); */
|
60
|
+
fe_mul(r->Y,r->Y,q->YplusX);
|
61
|
+
|
62
|
+
/* qhasm: C = T2d2*T1 */
|
63
|
+
/* asm 1: fe_mul(>C=fe#4,<T2d2=fe#18,<T1=fe#14); */
|
64
|
+
/* asm 2: fe_mul(>C=r->T,<T2d2=q->T2d,<T1=p->T); */
|
65
|
+
fe_mul(r->T,q->T2d,p->T);
|
66
|
+
|
67
|
+
/* qhasm: ZZ = Z1*Z2 */
|
68
|
+
/* asm 1: fe_mul(>ZZ=fe#1,<Z1=fe#13,<Z2=fe#17); */
|
69
|
+
/* asm 2: fe_mul(>ZZ=r->X,<Z1=p->Z,<Z2=q->Z); */
|
70
|
+
fe_mul(r->X,p->Z,q->Z);
|
71
|
+
|
72
|
+
/* qhasm: D = 2*ZZ */
|
73
|
+
/* asm 1: fe_add(>D=fe#5,<ZZ=fe#1,<ZZ=fe#1); */
|
74
|
+
/* asm 2: fe_add(>D=t0,<ZZ=r->X,<ZZ=r->X); */
|
75
|
+
fe_add(t0,r->X,r->X);
|
76
|
+
|
77
|
+
/* qhasm: X3 = A-B */
|
78
|
+
/* asm 1: fe_sub(>X3=fe#1,<A=fe#3,<B=fe#2); */
|
79
|
+
/* asm 2: fe_sub(>X3=r->X,<A=r->Z,<B=r->Y); */
|
80
|
+
fe_sub(r->X,r->Z,r->Y);
|
81
|
+
|
82
|
+
/* qhasm: Y3 = A+B */
|
83
|
+
/* asm 1: fe_add(>Y3=fe#2,<A=fe#3,<B=fe#2); */
|
84
|
+
/* asm 2: fe_add(>Y3=r->Y,<A=r->Z,<B=r->Y); */
|
85
|
+
fe_add(r->Y,r->Z,r->Y);
|
86
|
+
|
87
|
+
/* qhasm: Z3 = D-C */
|
88
|
+
/* asm 1: fe_sub(>Z3=fe#3,<D=fe#5,<C=fe#4); */
|
89
|
+
/* asm 2: fe_sub(>Z3=r->Z,<D=t0,<C=r->T); */
|
90
|
+
fe_sub(r->Z,t0,r->T);
|
91
|
+
|
92
|
+
/* qhasm: T3 = D+C */
|
93
|
+
/* asm 1: fe_add(>T3=fe#4,<D=fe#5,<C=fe#4); */
|
94
|
+
/* asm 2: fe_add(>T3=r->T,<D=t0,<C=r->T); */
|
95
|
+
fe_add(r->T,t0,r->T);
|
96
|
+
|
97
|
+
/* qhasm: return */
|