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.
Files changed (79) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +5 -0
  4. data/.rubocop.yml +35 -0
  5. data/.travis.yml +26 -0
  6. data/CHANGES.md +70 -0
  7. data/CODE_OF_CONDUCT.md +74 -0
  8. data/Gemfile +12 -0
  9. data/LICENSE +22 -0
  10. data/README.md +170 -0
  11. data/Rakefile +27 -0
  12. data/appveyor.yml +21 -0
  13. data/ed25519.gemspec +32 -0
  14. data/ed25519.png +0 -0
  15. data/ext/ed25519_jruby/LICENSE.txt +123 -0
  16. data/ext/ed25519_jruby/README.md +77 -0
  17. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAEngine.java +491 -0
  18. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAKey.java +31 -0
  19. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPrivateKey.java +338 -0
  20. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSAPublicKey.java +275 -0
  21. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/EdDSASecurityProvider.java +59 -0
  22. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyFactory.java +75 -0
  23. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/KeyPairGenerator.java +97 -0
  24. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/Utils.java +103 -0
  25. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Constants.java +23 -0
  26. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Curve.java +100 -0
  27. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Encoding.java +54 -0
  28. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/Field.java +99 -0
  29. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/FieldElement.java +76 -0
  30. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/GroupElement.java +1034 -0
  31. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ScalarOps.java +34 -0
  32. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerFieldElement.java +131 -0
  33. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerLittleEndianEncoding.java +102 -0
  34. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/BigIntegerScalarOps.java +37 -0
  35. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/bigint/package.html +6 -0
  36. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519FieldElement.java +988 -0
  37. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519LittleEndianEncoding.java +256 -0
  38. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/math/ed25519/Ed25519ScalarOps.java +693 -0
  39. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAGenParameterSpec.java +32 -0
  40. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveSpec.java +35 -0
  41. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSANamedCurveTable.java +71 -0
  42. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAParameterSpec.java +97 -0
  43. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPrivateKeySpec.java +133 -0
  44. data/ext/ed25519_jruby/net/i2p/crypto/eddsa/spec/EdDSAPublicKeySpec.java +61 -0
  45. data/ext/ed25519_jruby/org/cryptorb/Ed25519Provider.java +95 -0
  46. data/ext/ed25519_ref10/api.h +4 -0
  47. data/ext/ed25519_ref10/base.h +1344 -0
  48. data/ext/ed25519_ref10/base2.h +40 -0
  49. data/ext/ed25519_ref10/d.h +1 -0
  50. data/ext/ed25519_ref10/d2.h +1 -0
  51. data/ext/ed25519_ref10/ed25519_ref10.c +99 -0
  52. data/ext/ed25519_ref10/ed25519_ref10.h +33 -0
  53. data/ext/ed25519_ref10/extconf.rb +9 -0
  54. data/ext/ed25519_ref10/fe.c +1085 -0
  55. data/ext/ed25519_ref10/fe.h +56 -0
  56. data/ext/ed25519_ref10/ge.c +407 -0
  57. data/ext/ed25519_ref10/ge.h +95 -0
  58. data/ext/ed25519_ref10/ge_add.h +97 -0
  59. data/ext/ed25519_ref10/ge_madd.h +88 -0
  60. data/ext/ed25519_ref10/ge_msub.h +88 -0
  61. data/ext/ed25519_ref10/ge_p2_dbl.h +73 -0
  62. data/ext/ed25519_ref10/ge_sub.h +97 -0
  63. data/ext/ed25519_ref10/keypair.c +22 -0
  64. data/ext/ed25519_ref10/open.c +47 -0
  65. data/ext/ed25519_ref10/pow22523.h +160 -0
  66. data/ext/ed25519_ref10/pow225521.h +160 -0
  67. data/ext/ed25519_ref10/sc.h +17 -0
  68. data/ext/ed25519_ref10/sc_muladd.c +366 -0
  69. data/ext/ed25519_ref10/sc_reduce.c +272 -0
  70. data/ext/ed25519_ref10/sha512.c +304 -0
  71. data/ext/ed25519_ref10/sha512.h +8 -0
  72. data/ext/ed25519_ref10/sign.c +41 -0
  73. data/ext/ed25519_ref10/sqrtm1.h +1 -0
  74. data/ext/ed25519_ref10/verify.c +40 -0
  75. data/lib/ed25519.rb +72 -0
  76. data/lib/ed25519/signing_key.rb +60 -0
  77. data/lib/ed25519/verify_key.rb +44 -0
  78. data/lib/ed25519/version.rb +5 -0
  79. 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 */