root/trunk/pdns/pdns/ed25519/ge_madd.h @ 2535

Revision 2535, 1.9 KB (checked in by ahu, 14 months ago)

add ED25519 implementation (not hooked up yet, but does work with some prodding).
Thanks to Brian Warner's Python ED25519 implementation which extracted ED25519 'ref10' from SUPERCOP.

Line 
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); */
41fe_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); */
46fe_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); */
51fe_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); */
56fe_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); */
61fe_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); */
66fe_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); */
71fe_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); */
76fe_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); */
81fe_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); */
86fe_sub(r->T,t0,r->T);
87
88/* qhasm: return */
Note: See TracBrowser for help on using the browser.