summaryrefslogtreecommitdiff
path: root/nacl/crypto_scalarmult
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2013-07-02 09:53:34 -0400
committerirungentoo <irungentoo@gmail.com>2013-07-02 09:53:34 -0400
commite2967396ac73cb7410787886cdaf072a184ffc49 (patch)
tree527a74d25a4a0705fc641994fd35bfab22662034 /nacl/crypto_scalarmult
parent8928c817df345f29aa0b194743595aa11bd6a8ba (diff)
Added NaCl crypto library.
Diffstat (limited to 'nacl/crypto_scalarmult')
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/api.h2
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/base.c8
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/const.s114
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/fromdouble.s195
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/implementors1
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/init.s13
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/mainloop.s3990
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/mult.s410
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/smult.c91
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/square.s298
-rw-r--r--nacl/crypto_scalarmult/curve25519/athlon/todouble.s144
-rw-r--r--nacl/crypto_scalarmult/curve25519/checksum1
-rw-r--r--nacl/crypto_scalarmult/curve25519/donna_c64/api.h2
-rw-r--r--nacl/crypto_scalarmult/curve25519/donna_c64/base.c8
-rw-r--r--nacl/crypto_scalarmult/curve25519/donna_c64/implementors1
-rw-r--r--nacl/crypto_scalarmult/curve25519/donna_c64/smult.c477
-rw-r--r--nacl/crypto_scalarmult/curve25519/ref/api.h2
-rw-r--r--nacl/crypto_scalarmult/curve25519/ref/base.c16
-rw-r--r--nacl/crypto_scalarmult/curve25519/ref/implementors1
-rw-r--r--nacl/crypto_scalarmult/curve25519/ref/smult.c265
-rw-r--r--nacl/crypto_scalarmult/curve25519/used0
-rw-r--r--nacl/crypto_scalarmult/measure.c61
-rw-r--r--nacl/crypto_scalarmult/try.c126
-rw-r--r--nacl/crypto_scalarmult/wrapper-base.cpp11
-rw-r--r--nacl/crypto_scalarmult/wrapper-mult.cpp12
25 files changed, 6249 insertions, 0 deletions
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/api.h b/nacl/crypto_scalarmult/curve25519/athlon/api.h
new file mode 100644
index 00000000..60339596
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/api.h
@@ -0,0 +1,2 @@
1#define CRYPTO_BYTES 32
2#define CRYPTO_SCALARBYTES 32
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/base.c b/nacl/crypto_scalarmult/curve25519/athlon/base.c
new file mode 100644
index 00000000..dde929ec
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/base.c
@@ -0,0 +1,8 @@
1#include "crypto_scalarmult.h"
2
3static char basepoint[32] = {9};
4
5int crypto_scalarmult_base(unsigned char *q,const unsigned char *n)
6{
7 return crypto_scalarmult(q,n,basepoint);
8}
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/const.s b/nacl/crypto_scalarmult/curve25519/athlon/const.s
new file mode 100644
index 00000000..9042c2fb
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/const.s
@@ -0,0 +1,114 @@
1.data
2.section .rodata
3.p2align 5
4
5.globl crypto_scalarmult_curve25519_athlon_scale
6.globl crypto_scalarmult_curve25519_athlon_121665
7.globl crypto_scalarmult_curve25519_athlon_alpha26
8.globl crypto_scalarmult_curve25519_athlon_alpha51
9.globl crypto_scalarmult_curve25519_athlon_alpha77
10.globl crypto_scalarmult_curve25519_athlon_alpha102
11.globl crypto_scalarmult_curve25519_athlon_alpha128
12.globl crypto_scalarmult_curve25519_athlon_alpha153
13.globl crypto_scalarmult_curve25519_athlon_alpha179
14.globl crypto_scalarmult_curve25519_athlon_alpha204
15.globl crypto_scalarmult_curve25519_athlon_alpha230
16.globl crypto_scalarmult_curve25519_athlon_alpha255
17.globl crypto_scalarmult_curve25519_athlon_in0offset
18.globl crypto_scalarmult_curve25519_athlon_in1offset
19.globl crypto_scalarmult_curve25519_athlon_in2offset
20.globl crypto_scalarmult_curve25519_athlon_in3offset
21.globl crypto_scalarmult_curve25519_athlon_in4offset
22.globl crypto_scalarmult_curve25519_athlon_in5offset
23.globl crypto_scalarmult_curve25519_athlon_in6offset
24.globl crypto_scalarmult_curve25519_athlon_in7offset
25.globl crypto_scalarmult_curve25519_athlon_in8offset
26.globl crypto_scalarmult_curve25519_athlon_in9offset
27.globl crypto_scalarmult_curve25519_athlon_out0offset
28.globl crypto_scalarmult_curve25519_athlon_out1offset
29.globl crypto_scalarmult_curve25519_athlon_out2offset
30.globl crypto_scalarmult_curve25519_athlon_out3offset
31.globl crypto_scalarmult_curve25519_athlon_out4offset
32.globl crypto_scalarmult_curve25519_athlon_out5offset
33.globl crypto_scalarmult_curve25519_athlon_out6offset
34.globl crypto_scalarmult_curve25519_athlon_out7offset
35.globl crypto_scalarmult_curve25519_athlon_out8offset
36.globl crypto_scalarmult_curve25519_athlon_out9offset
37.globl crypto_scalarmult_curve25519_athlon_two0
38.globl crypto_scalarmult_curve25519_athlon_two1
39.globl crypto_scalarmult_curve25519_athlon_zero
40.globl crypto_scalarmult_curve25519_athlon_rounding
41
42crypto_scalarmult_curve25519_athlon_scale:
43 .long 0x0,0x30430000
44crypto_scalarmult_curve25519_athlon_121665:
45 .long 0x0,0x40fdb410
46crypto_scalarmult_curve25519_athlon_in0offset:
47 .long 0x0,0x43300000
48crypto_scalarmult_curve25519_athlon_in1offset:
49 .long 0x0,0x45300000
50crypto_scalarmult_curve25519_athlon_in2offset:
51 .long 0x0,0x46b00000
52crypto_scalarmult_curve25519_athlon_in3offset:
53 .long 0x0,0x48300000
54crypto_scalarmult_curve25519_athlon_in4offset:
55 .long 0x0,0x49b00000
56crypto_scalarmult_curve25519_athlon_in5offset:
57 .long 0x0,0x4b300000
58crypto_scalarmult_curve25519_athlon_in6offset:
59 .long 0x0,0x4d300000
60crypto_scalarmult_curve25519_athlon_in7offset:
61 .long 0x0,0x4eb00000
62crypto_scalarmult_curve25519_athlon_in8offset:
63 .long 0x0,0x50300000
64crypto_scalarmult_curve25519_athlon_in9offset:
65 .long 0x0,0x51b00000
66crypto_scalarmult_curve25519_athlon_alpha26:
67 .long 0x0,0x45880000
68crypto_scalarmult_curve25519_athlon_alpha51:
69 .long 0x0,0x47180000
70crypto_scalarmult_curve25519_athlon_alpha77:
71 .long 0x0,0x48b80000
72crypto_scalarmult_curve25519_athlon_alpha102:
73 .long 0x0,0x4a480000
74crypto_scalarmult_curve25519_athlon_alpha128:
75 .long 0x0,0x4be80000
76crypto_scalarmult_curve25519_athlon_alpha153:
77 .long 0x0,0x4d780000
78crypto_scalarmult_curve25519_athlon_alpha179:
79 .long 0x0,0x4f180000
80crypto_scalarmult_curve25519_athlon_alpha204:
81 .long 0x0,0x50a80000
82crypto_scalarmult_curve25519_athlon_alpha230:
83 .long 0x0,0x52480000
84crypto_scalarmult_curve25519_athlon_alpha255:
85 .long 0x0,0x53d80000
86crypto_scalarmult_curve25519_athlon_two0:
87 .long 0x0,0x3ff00000
88crypto_scalarmult_curve25519_athlon_two1:
89 .long 0x0,0x40000000
90crypto_scalarmult_curve25519_athlon_zero:
91 .long 0x0,0x0
92crypto_scalarmult_curve25519_athlon_out0offset:
93 .long 0x1fffffed,0x43380000
94crypto_scalarmult_curve25519_athlon_out1offset:
95 .long 0xffffff8,0x44d80000
96crypto_scalarmult_curve25519_athlon_out2offset:
97 .long 0x1ffffff8,0x46680000
98crypto_scalarmult_curve25519_athlon_out3offset:
99 .long 0xffffff8,0x48080000
100crypto_scalarmult_curve25519_athlon_out4offset:
101 .long 0x1ffffff8,0x49980000
102crypto_scalarmult_curve25519_athlon_out5offset:
103 .long 0xffffff8,0x4b380000
104crypto_scalarmult_curve25519_athlon_out6offset:
105 .long 0x1ffffff8,0x4cc80000
106crypto_scalarmult_curve25519_athlon_out7offset:
107 .long 0xffffff8,0x4e680000
108crypto_scalarmult_curve25519_athlon_out8offset:
109 .long 0x1ffffff8,0x4ff80000
110crypto_scalarmult_curve25519_athlon_out9offset:
111 .long 0x1fffff8,0x51980000
112crypto_scalarmult_curve25519_athlon_rounding:
113 .byte 0x7f
114 .byte 0x13
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/fromdouble.s b/nacl/crypto_scalarmult/curve25519/athlon/fromdouble.s
new file mode 100644
index 00000000..221ca35f
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/fromdouble.s
@@ -0,0 +1,195 @@
1.text
2.p2align 5
3.globl _crypto_scalarmult_curve25519_athlon_fromdouble
4.globl crypto_scalarmult_curve25519_athlon_fromdouble
5_crypto_scalarmult_curve25519_athlon_fromdouble:
6crypto_scalarmult_curve25519_athlon_fromdouble:
7mov %esp,%eax
8and $31,%eax
9add $192,%eax
10sub %eax,%esp
11movl %ebp,0(%esp)
12movl 8(%esp,%eax),%ecx
13fldl 0(%ecx)
14faddl crypto_scalarmult_curve25519_athlon_out0offset
15fstpl 96(%esp)
16fldl 8(%ecx)
17faddl crypto_scalarmult_curve25519_athlon_out1offset
18fstpl 104(%esp)
19fldl 16(%ecx)
20faddl crypto_scalarmult_curve25519_athlon_out2offset
21fstpl 112(%esp)
22fldl 24(%ecx)
23faddl crypto_scalarmult_curve25519_athlon_out3offset
24fstpl 120(%esp)
25fldl 32(%ecx)
26faddl crypto_scalarmult_curve25519_athlon_out4offset
27fstpl 128(%esp)
28fldl 40(%ecx)
29faddl crypto_scalarmult_curve25519_athlon_out5offset
30fstpl 136(%esp)
31fldl 48(%ecx)
32faddl crypto_scalarmult_curve25519_athlon_out6offset
33fstpl 144(%esp)
34fldl 56(%ecx)
35faddl crypto_scalarmult_curve25519_athlon_out7offset
36fstpl 152(%esp)
37fldl 64(%ecx)
38faddl crypto_scalarmult_curve25519_athlon_out8offset
39fstpl 160(%esp)
40fldl 72(%ecx)
41faddl crypto_scalarmult_curve25519_athlon_out9offset
42fstpl 168(%esp)
43movl 96(%esp),%ecx
44movl %ecx,4(%esp)
45movl 104(%esp),%ecx
46shl $26,%ecx
47movl %ecx,40(%esp)
48movl 104(%esp),%ecx
49shr $6,%ecx
50movl %ecx,8(%esp)
51movl 112(%esp),%ecx
52shl $19,%ecx
53movl %ecx,44(%esp)
54movl 112(%esp),%ecx
55shr $13,%ecx
56movl %ecx,12(%esp)
57movl 120(%esp),%ecx
58shl $13,%ecx
59movl %ecx,48(%esp)
60movl 120(%esp),%ecx
61shr $19,%ecx
62movl %ecx,16(%esp)
63movl 128(%esp),%ecx
64shl $6,%ecx
65movl %ecx,52(%esp)
66movl 128(%esp),%ecx
67shr $26,%ecx
68movl 136(%esp),%edx
69add %edx,%ecx
70movl %ecx,20(%esp)
71movl 144(%esp),%ecx
72shl $25,%ecx
73movl %ecx,56(%esp)
74movl 144(%esp),%ecx
75shr $7,%ecx
76movl %ecx,24(%esp)
77movl 152(%esp),%ecx
78shl $19,%ecx
79movl %ecx,60(%esp)
80movl 152(%esp),%ecx
81shr $13,%ecx
82movl %ecx,28(%esp)
83movl 160(%esp),%ecx
84shl $12,%ecx
85movl %ecx,64(%esp)
86movl 160(%esp),%ecx
87shr $20,%ecx
88movl %ecx,32(%esp)
89movl 168(%esp),%ecx
90shl $6,%ecx
91movl %ecx,68(%esp)
92movl 168(%esp),%ecx
93shr $26,%ecx
94movl %ecx,36(%esp)
95mov $0,%ecx
96movl %ecx,72(%esp)
97movl 4(%esp),%ecx
98addl 40(%esp),%ecx
99movl %ecx,4(%esp)
100movl 8(%esp),%ecx
101adcl 44(%esp),%ecx
102movl %ecx,8(%esp)
103movl 12(%esp),%ecx
104adcl 48(%esp),%ecx
105movl %ecx,12(%esp)
106movl 16(%esp),%ecx
107adcl 52(%esp),%ecx
108movl %ecx,16(%esp)
109movl 20(%esp),%ecx
110adcl 56(%esp),%ecx
111movl %ecx,20(%esp)
112movl 24(%esp),%ecx
113adcl 60(%esp),%ecx
114movl %ecx,24(%esp)
115movl 28(%esp),%ecx
116adcl 64(%esp),%ecx
117movl %ecx,28(%esp)
118movl 32(%esp),%ecx
119adcl 68(%esp),%ecx
120movl %ecx,32(%esp)
121movl 36(%esp),%ecx
122adcl 72(%esp),%ecx
123movl %ecx,36(%esp)
124movl 4(%esp),%ecx
125adc $0x13,%ecx
126movl %ecx,40(%esp)
127movl 8(%esp),%ecx
128adc $0,%ecx
129movl %ecx,44(%esp)
130movl 12(%esp),%ecx
131adc $0,%ecx
132movl %ecx,48(%esp)
133movl 16(%esp),%ecx
134adc $0,%ecx
135movl %ecx,52(%esp)
136movl 20(%esp),%ecx
137adc $0,%ecx
138movl %ecx,56(%esp)
139movl 24(%esp),%ecx
140adc $0,%ecx
141movl %ecx,60(%esp)
142movl 28(%esp),%ecx
143adc $0,%ecx
144movl %ecx,64(%esp)
145movl 32(%esp),%ecx
146adc $0x80000000,%ecx
147movl %ecx,68(%esp)
148movl 36(%esp),%ebp
149adc $0xffffffff,%ebp
150and $0x80000000,%ebp
151sar $31,%ebp
152movl 4(%esp,%eax),%ecx
153movl 4(%esp),%edx
154xorl 40(%esp),%edx
155and %ebp,%edx
156xorl 40(%esp),%edx
157movl %edx,0(%ecx)
158movl 8(%esp),%edx
159xorl 44(%esp),%edx
160and %ebp,%edx
161xorl 44(%esp),%edx
162movl %edx,4(%ecx)
163movl 12(%esp),%edx
164xorl 48(%esp),%edx
165and %ebp,%edx
166xorl 48(%esp),%edx
167movl %edx,8(%ecx)
168movl 16(%esp),%edx
169xorl 52(%esp),%edx
170and %ebp,%edx
171xorl 52(%esp),%edx
172movl %edx,12(%ecx)
173movl 20(%esp),%edx
174xorl 56(%esp),%edx
175and %ebp,%edx
176xorl 56(%esp),%edx
177movl %edx,16(%ecx)
178movl 24(%esp),%edx
179xorl 60(%esp),%edx
180and %ebp,%edx
181xorl 60(%esp),%edx
182movl %edx,20(%ecx)
183movl 28(%esp),%edx
184xorl 64(%esp),%edx
185and %ebp,%edx
186xorl 64(%esp),%edx
187movl %edx,24(%ecx)
188movl 32(%esp),%edx
189xorl 68(%esp),%edx
190and %ebp,%edx
191xorl 68(%esp),%edx
192movl %edx,28(%ecx)
193movl 0(%esp),%ebp
194add %eax,%esp
195ret
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/implementors b/nacl/crypto_scalarmult/curve25519/athlon/implementors
new file mode 100644
index 00000000..f6fb3c73
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/implementors
@@ -0,0 +1 @@
Daniel J. Bernstein
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/init.s b/nacl/crypto_scalarmult/curve25519/athlon/init.s
new file mode 100644
index 00000000..edd3c589
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/init.s
@@ -0,0 +1,13 @@
1.text
2.p2align 5
3.globl _crypto_scalarmult_curve25519_athlon_init
4.globl crypto_scalarmult_curve25519_athlon_init
5_crypto_scalarmult_curve25519_athlon_init:
6crypto_scalarmult_curve25519_athlon_init:
7mov %esp,%eax
8and $31,%eax
9add $0,%eax
10sub %eax,%esp
11fldcw crypto_scalarmult_curve25519_athlon_rounding
12add %eax,%esp
13ret
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/mainloop.s b/nacl/crypto_scalarmult/curve25519/athlon/mainloop.s
new file mode 100644
index 00000000..47412905
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/mainloop.s
@@ -0,0 +1,3990 @@
1.text
2.p2align 5
3.globl _crypto_scalarmult_curve25519_athlon_mainloop
4.globl crypto_scalarmult_curve25519_athlon_mainloop
5_crypto_scalarmult_curve25519_athlon_mainloop:
6crypto_scalarmult_curve25519_athlon_mainloop:
7mov %esp,%eax
8and $31,%eax
9add $704,%eax
10sub %eax,%esp
11lea 256(%esp),%edx
12lea 512(%esp),%ecx
13fldl crypto_scalarmult_curve25519_athlon_two0
14fldl crypto_scalarmult_curve25519_athlon_zero
15movl %eax,160(%ecx)
16movl %ebx,164(%ecx)
17movl %esi,168(%ecx)
18movl %edi,172(%ecx)
19movl %ebp,176(%ecx)
20movl 4(%esp,%eax),%ebx
21fxch %st(1)
22fstl 0(%esp)
23fxch %st(1)
24fstl 8(%esp)
25fstl 16(%esp)
26fstl 24(%esp)
27fstl 32(%esp)
28fstl 40(%esp)
29fstl 48(%esp)
30fstl -120(%edx)
31fstl -112(%edx)
32fstl -104(%edx)
33fstl -96(%edx)
34fstl -88(%edx)
35fstl -80(%edx)
36fstl -72(%edx)
37fstl -64(%edx)
38fstl -56(%edx)
39fstl -48(%edx)
40fstl -40(%edx)
41fstl -32(%edx)
42fstl -24(%edx)
43fxch %st(1)
44fstpl 64(%edx)
45fstl 72(%edx)
46fstl 80(%edx)
47fstl 88(%edx)
48fstl 96(%edx)
49fstl 104(%edx)
50fstl 112(%edx)
51fstl 120(%edx)
52fstl -128(%ecx)
53fstpl -120(%ecx)
54fldl 0(%ebx)
55fldl 8(%ebx)
56fldl 16(%ebx)
57fldl 24(%ebx)
58fxch %st(3)
59fstl -16(%edx)
60fstpl 56(%esp)
61fldl 32(%ebx)
62fxch %st(2)
63fstl -8(%edx)
64fstpl 64(%esp)
65fldl 40(%ebx)
66fxch %st(1)
67fstl 0(%edx)
68fstpl 72(%esp)
69fldl 48(%ebx)
70fxch %st(3)
71fstl 8(%edx)
72fstpl 80(%esp)
73fldl 56(%ebx)
74fxch %st(2)
75fstl 16(%edx)
76fstpl 88(%esp)
77fldl 64(%ebx)
78fxch %st(1)
79fstl 24(%edx)
80fstpl 96(%esp)
81fldl 72(%ebx)
82fxch %st(3)
83fstl 32(%edx)
84fstpl 104(%esp)
85fxch %st(1)
86fstl 40(%edx)
87fstpl 112(%esp)
88fstl 48(%edx)
89fstpl 120(%esp)
90fstl 56(%edx)
91fstpl -128(%edx)
92movl 8(%esp,%eax),%ebx
93mov $28,%edi
94mov $31,%ebp
95movl 28(%ebx),%esi
96rol $1,%esi
97._morebytes:
98movl %edi,188(%ecx)
99._morebits:
100rol $1,%esi
101movl %esi,180(%ecx)
102movl %ebp,184(%ecx)
103and $1,%esi
104movl $0x43300000,-108(%ecx)
105movl %esi,-112(%ecx)
106fldl -96(%edx)
107fldl 0(%esp)
108fadd %st(0),%st(1)
109fsubl -96(%edx)
110fldl 64(%edx)
111fldl -16(%edx)
112fadd %st(0),%st(1)
113fsubl 64(%edx)
114fldl -88(%edx)
115fldl 8(%esp)
116fadd %st(0),%st(1)
117fsubl -88(%edx)
118fxch %st(5)
119fstpl 0(%esp)
120fxch %st(3)
121fstpl -96(%edx)
122fldl 72(%edx)
123fldl -8(%edx)
124fadd %st(0),%st(1)
125fsubl 72(%edx)
126fxch %st(3)
127fstpl -16(%edx)
128fxch %st(1)
129fstpl 64(%edx)
130fldl -80(%edx)
131fldl 16(%esp)
132fadd %st(0),%st(1)
133fsubl -80(%edx)
134fxch %st(4)
135fstpl 8(%esp)
136fxch %st(4)
137fstpl -88(%edx)
138fldl 80(%edx)
139fldl 0(%edx)
140fadd %st(0),%st(1)
141fsubl 80(%edx)
142fxch %st(2)
143fstpl -8(%edx)
144fxch %st(2)
145fstpl 72(%edx)
146fldl -72(%edx)
147fldl 24(%esp)
148fadd %st(0),%st(1)
149fsubl -72(%edx)
150fxch %st(5)
151fstpl 16(%esp)
152fxch %st(3)
153fstpl -80(%edx)
154fldl 88(%edx)
155fldl 8(%edx)
156fadd %st(0),%st(1)
157fsubl 88(%edx)
158fxch %st(3)
159fstpl 0(%edx)
160fxch %st(1)
161fstpl 80(%edx)
162fldl -64(%edx)
163fldl 32(%esp)
164fadd %st(0),%st(1)
165fsubl -64(%edx)
166fxch %st(4)
167fstpl 24(%esp)
168fxch %st(4)
169fstpl -72(%edx)
170fldl 96(%edx)
171fldl 16(%edx)
172fadd %st(0),%st(1)
173fsubl 96(%edx)
174fxch %st(2)
175fstpl 8(%edx)
176fxch %st(2)
177fstpl 88(%edx)
178fldl -56(%edx)
179fldl 40(%esp)
180fadd %st(0),%st(1)
181fsubl -56(%edx)
182fxch %st(5)
183fstpl 32(%esp)
184fxch %st(3)
185fstpl -64(%edx)
186fldl 104(%edx)
187fldl 24(%edx)
188fadd %st(0),%st(1)
189fsubl 104(%edx)
190fxch %st(3)
191fstpl 16(%edx)
192fxch %st(1)
193fstpl 96(%edx)
194fldl -48(%edx)
195fldl 48(%esp)
196fadd %st(0),%st(1)
197fsubl -48(%edx)
198fxch %st(4)
199fstpl 40(%esp)
200fxch %st(4)
201fstpl -56(%edx)
202fldl 112(%edx)
203fldl 32(%edx)
204fadd %st(0),%st(1)
205fsubl 112(%edx)
206fxch %st(2)
207fstpl 24(%edx)
208fxch %st(2)
209fstpl 104(%edx)
210fldl -40(%edx)
211fldl -120(%edx)
212fadd %st(0),%st(1)
213fsubl -40(%edx)
214fxch %st(5)
215fstpl 48(%esp)
216fxch %st(3)
217fstpl -48(%edx)
218fldl 120(%edx)
219fldl 40(%edx)
220fadd %st(0),%st(1)
221fsubl 120(%edx)
222fxch %st(3)
223fstpl 32(%edx)
224fxch %st(1)
225fstpl 112(%edx)
226fldl -32(%edx)
227fldl -112(%edx)
228fadd %st(0),%st(1)
229fsubl -32(%edx)
230fxch %st(4)
231fstpl -120(%edx)
232fxch %st(4)
233fstpl -40(%edx)
234fldl -128(%ecx)
235fldl 48(%edx)
236fadd %st(0),%st(1)
237fsubl -128(%ecx)
238fxch %st(2)
239fstpl 40(%edx)
240fxch %st(2)
241fstpl 120(%edx)
242fldl -24(%edx)
243fldl -104(%edx)
244fadd %st(0),%st(1)
245fsubl -24(%edx)
246fxch %st(5)
247fstpl -112(%edx)
248fxch %st(3)
249fstpl -32(%edx)
250fldl -120(%ecx)
251fldl 56(%edx)
252fadd %st(0),%st(1)
253fsubl -120(%ecx)
254fxch %st(3)
255fstpl 48(%edx)
256fxch %st(1)
257fstpl -128(%ecx)
258fldl -112(%ecx)
259fsubl crypto_scalarmult_curve25519_athlon_in0offset
260fldl crypto_scalarmult_curve25519_athlon_two0
261fsub %st(1),%st(0)
262fxch %st(4)
263fstpl -104(%edx)
264fxch %st(4)
265fstpl -24(%edx)
266fstpl 56(%edx)
267fstpl -120(%ecx)
268fxch %st(1)
269fstl 136(%ecx)
270fldl 0(%esp)
271fmul %st(2),%st(0)
272fldl -16(%edx)
273fmul %st(2),%st(0)
274faddp %st(0),%st(1)
275fldl 8(%esp)
276fmul %st(3),%st(0)
277fldl -8(%edx)
278fmul %st(3),%st(0)
279faddp %st(0),%st(1)
280fldl 16(%esp)
281fmul %st(4),%st(0)
282fldl 0(%edx)
283fmul %st(4),%st(0)
284faddp %st(0),%st(1)
285fldl 24(%esp)
286fmul %st(5),%st(0)
287fldl 8(%edx)
288fmul %st(5),%st(0)
289faddp %st(0),%st(1)
290fxch %st(3)
291fstpl -112(%ecx)
292fldl 32(%esp)
293fmul %st(5),%st(0)
294fldl 16(%edx)
295fmul %st(5),%st(0)
296faddp %st(0),%st(1)
297fxch %st(2)
298fstpl -104(%ecx)
299fldl 40(%esp)
300fmul %st(5),%st(0)
301fldl 24(%edx)
302fmul %st(5),%st(0)
303faddp %st(0),%st(1)
304fxch %st(1)
305fstpl -96(%ecx)
306fldl 48(%esp)
307fmul %st(5),%st(0)
308fldl 32(%edx)
309fmul %st(5),%st(0)
310faddp %st(0),%st(1)
311fxch %st(3)
312fstpl -88(%ecx)
313fldl -120(%edx)
314fmul %st(5),%st(0)
315fldl 40(%edx)
316fmul %st(5),%st(0)
317faddp %st(0),%st(1)
318fxch %st(2)
319fstpl -80(%ecx)
320fldl -112(%edx)
321fmul %st(5),%st(0)
322fldl 48(%edx)
323fmul %st(5),%st(0)
324faddp %st(0),%st(1)
325fxch %st(1)
326fstpl -72(%ecx)
327fldl -104(%edx)
328fmul %st(5),%st(0)
329fldl 56(%edx)
330fmul %st(5),%st(0)
331faddp %st(0),%st(1)
332fxch %st(3)
333fstpl -64(%ecx)
334fldl -96(%edx)
335fmul %st(5),%st(0)
336fldl 64(%edx)
337fmul %st(5),%st(0)
338faddp %st(0),%st(1)
339fxch %st(2)
340fstpl -56(%ecx)
341fldl -88(%edx)
342fmul %st(5),%st(0)
343fldl 72(%edx)
344fmul %st(5),%st(0)
345faddp %st(0),%st(1)
346fxch %st(1)
347fstpl -48(%ecx)
348fldl -80(%edx)
349fmul %st(5),%st(0)
350fldl 80(%edx)
351fmul %st(5),%st(0)
352faddp %st(0),%st(1)
353fxch %st(3)
354fstpl -40(%ecx)
355fldl -72(%edx)
356fmul %st(5),%st(0)
357fldl 88(%edx)
358fmul %st(5),%st(0)
359faddp %st(0),%st(1)
360fxch %st(2)
361fstpl -32(%ecx)
362fldl -64(%edx)
363fmul %st(5),%st(0)
364fldl 96(%edx)
365fmul %st(5),%st(0)
366faddp %st(0),%st(1)
367fxch %st(1)
368fstpl -24(%ecx)
369fldl -56(%edx)
370fmul %st(5),%st(0)
371fldl 104(%edx)
372fmul %st(5),%st(0)
373faddp %st(0),%st(1)
374fxch %st(3)
375fstpl -16(%ecx)
376fldl -48(%edx)
377fmul %st(5),%st(0)
378fldl 112(%edx)
379fmul %st(5),%st(0)
380faddp %st(0),%st(1)
381fxch %st(2)
382fstpl -8(%ecx)
383fldl -40(%edx)
384fmul %st(5),%st(0)
385fldl 120(%edx)
386fmul %st(5),%st(0)
387faddp %st(0),%st(1)
388fxch %st(1)
389fstpl 0(%ecx)
390fldl -32(%edx)
391fmul %st(5),%st(0)
392fldl -128(%ecx)
393fmul %st(5),%st(0)
394faddp %st(0),%st(1)
395fxch %st(3)
396fstpl 8(%ecx)
397fldl -24(%edx)
398fmulp %st(0),%st(5)
399fldl -120(%ecx)
400fmulp %st(0),%st(4)
401fxch %st(3)
402faddp %st(0),%st(4)
403fstpl 16(%ecx)
404fxch %st(1)
405fstpl 24(%ecx)
406fstpl 32(%ecx)
407fstpl 40(%ecx)
408fldl -24(%edx)
409fmull 56(%edx)
410fmull crypto_scalarmult_curve25519_athlon_scale
411fldl -96(%edx)
412fmull 48(%edx)
413faddp %st(0),%st(1)
414fldl -88(%edx)
415fmull 40(%edx)
416faddp %st(0),%st(1)
417fldl -96(%edx)
418fmull 56(%edx)
419fldl -80(%edx)
420fmull 32(%edx)
421faddp %st(0),%st(2)
422fldl -88(%edx)
423fmull 48(%edx)
424faddp %st(0),%st(1)
425fldl -72(%edx)
426fmull 24(%edx)
427faddp %st(0),%st(2)
428fldl -80(%edx)
429fmull 40(%edx)
430faddp %st(0),%st(1)
431fldl -64(%edx)
432fmull 16(%edx)
433faddp %st(0),%st(2)
434fldl -72(%edx)
435fmull 32(%edx)
436faddp %st(0),%st(1)
437fldl -88(%edx)
438fmull 56(%edx)
439fldl -56(%edx)
440fmull 8(%edx)
441faddp %st(0),%st(3)
442fldl -64(%edx)
443fmull 24(%edx)
444faddp %st(0),%st(2)
445fldl -80(%edx)
446fmull 48(%edx)
447faddp %st(0),%st(1)
448fldl -48(%edx)
449fmull 0(%edx)
450faddp %st(0),%st(3)
451fldl -56(%edx)
452fmull 16(%edx)
453faddp %st(0),%st(2)
454fldl -72(%edx)
455fmull 40(%edx)
456faddp %st(0),%st(1)
457fldl -40(%edx)
458fmull -8(%edx)
459faddp %st(0),%st(3)
460fldl -48(%edx)
461fmull 8(%edx)
462faddp %st(0),%st(2)
463fldl -64(%edx)
464fmull 32(%edx)
465faddp %st(0),%st(1)
466fldl -32(%edx)
467fmull -16(%edx)
468faddp %st(0),%st(3)
469fldl -40(%edx)
470fmull 0(%edx)
471faddp %st(0),%st(2)
472fldl -56(%edx)
473fmull 24(%edx)
474faddp %st(0),%st(1)
475fldl -80(%edx)
476fmull 56(%edx)
477fldl -48(%edx)
478fmull 16(%edx)
479faddp %st(0),%st(2)
480fldl -32(%edx)
481fmull -8(%edx)
482faddp %st(0),%st(3)
483fldl crypto_scalarmult_curve25519_athlon_alpha230
484fadd %st(4),%st(0)
485fldl -72(%edx)
486fmull 48(%edx)
487faddp %st(0),%st(2)
488fldl -40(%edx)
489fmull 8(%edx)
490faddp %st(0),%st(3)
491fldl -24(%edx)
492fmull -16(%edx)
493faddp %st(0),%st(4)
494fsubl crypto_scalarmult_curve25519_athlon_alpha230
495fldl -64(%edx)
496fmull 40(%edx)
497faddp %st(0),%st(2)
498fldl -72(%edx)
499fmull 56(%edx)
500fldl -32(%edx)
501fmull 0(%edx)
502faddp %st(0),%st(4)
503fxch %st(1)
504fadd %st(0),%st(4)
505fldl -56(%edx)
506fmull 32(%edx)
507faddp %st(0),%st(3)
508fldl -64(%edx)
509fmull 48(%edx)
510faddp %st(0),%st(2)
511fsubrp %st(0),%st(5)
512fldl crypto_scalarmult_curve25519_athlon_alpha255
513fadd %st(4),%st(0)
514fldl -48(%edx)
515fmull 24(%edx)
516faddp %st(0),%st(3)
517fldl -56(%edx)
518fmull 40(%edx)
519faddp %st(0),%st(2)
520fldl -24(%edx)
521fmull -8(%edx)
522faddp %st(0),%st(4)
523fsubl crypto_scalarmult_curve25519_athlon_alpha255
524fldl -40(%edx)
525fmull 16(%edx)
526faddp %st(0),%st(3)
527fldl -64(%edx)
528fmull 56(%edx)
529fldl -48(%edx)
530fmull 32(%edx)
531faddp %st(0),%st(3)
532fldl -32(%edx)
533fmull 8(%edx)
534faddp %st(0),%st(4)
535fxch %st(1)
536fadd %st(0),%st(4)
537fsubrp %st(0),%st(5)
538fxch %st(5)
539fstpl 64(%ecx)
540fldl -56(%edx)
541fmull 48(%edx)
542faddp %st(0),%st(5)
543fldl -40(%edx)
544fmull 24(%edx)
545faddp %st(0),%st(1)
546fldl -24(%edx)
547fmull 0(%edx)
548faddp %st(0),%st(2)
549fxch %st(2)
550fmull crypto_scalarmult_curve25519_athlon_scale
551fldl -48(%edx)
552fmull 40(%edx)
553faddp %st(0),%st(5)
554fldl -32(%edx)
555fmull 16(%edx)
556faddp %st(0),%st(3)
557fxch %st(1)
558fmull crypto_scalarmult_curve25519_athlon_scale
559fldl -96(%edx)
560fmull -16(%edx)
561faddp %st(0),%st(2)
562fxch %st(3)
563fstpl 72(%ecx)
564fldl -56(%edx)
565fmull 56(%edx)
566fldl -40(%edx)
567fmull 32(%edx)
568faddp %st(0),%st(5)
569fldl -24(%edx)
570fmull 8(%edx)
571faddp %st(0),%st(3)
572fldl -96(%edx)
573fmull -8(%edx)
574faddp %st(0),%st(4)
575fldl crypto_scalarmult_curve25519_athlon_alpha26
576fadd %st(2),%st(0)
577fldl -48(%edx)
578fmull 48(%edx)
579faddp %st(0),%st(2)
580fldl -32(%edx)
581fmull 24(%edx)
582faddp %st(0),%st(6)
583fxch %st(3)
584fmull crypto_scalarmult_curve25519_athlon_scale
585fldl -88(%edx)
586fmull -16(%edx)
587faddp %st(0),%st(5)
588fxch %st(3)
589fsubl crypto_scalarmult_curve25519_athlon_alpha26
590fldl -40(%edx)
591fmull 40(%edx)
592faddp %st(0),%st(2)
593fldl -24(%edx)
594fmull 16(%edx)
595faddp %st(0),%st(6)
596fldl -96(%edx)
597fmull 0(%edx)
598faddp %st(0),%st(4)
599fadd %st(0),%st(4)
600fsubrp %st(0),%st(2)
601fldl -48(%edx)
602fmull 56(%edx)
603fldl -32(%edx)
604fmull 32(%edx)
605faddp %st(0),%st(2)
606fxch %st(5)
607fmull crypto_scalarmult_curve25519_athlon_scale
608fldl -88(%edx)
609fmull -8(%edx)
610faddp %st(0),%st(4)
611fldl crypto_scalarmult_curve25519_athlon_alpha51
612fadd %st(5),%st(0)
613fldl -40(%edx)
614fmull 48(%edx)
615faddp %st(0),%st(7)
616fldl -24(%edx)
617fmull 24(%edx)
618faddp %st(0),%st(3)
619fldl -96(%edx)
620fmull 8(%edx)
621faddp %st(0),%st(2)
622fldl -80(%edx)
623fmull -16(%edx)
624faddp %st(0),%st(5)
625fsubl crypto_scalarmult_curve25519_athlon_alpha51
626fxch %st(3)
627fstpl 48(%ecx)
628fldl -32(%edx)
629fmull 40(%edx)
630faddp %st(0),%st(6)
631fxch %st(1)
632fmull crypto_scalarmult_curve25519_athlon_scale
633fldl -88(%edx)
634fmull 0(%edx)
635faddp %st(0),%st(2)
636fxch %st(2)
637fadd %st(0),%st(3)
638fsubrp %st(0),%st(4)
639fldl -40(%edx)
640fmull 56(%edx)
641fldl -24(%edx)
642fmull 32(%edx)
643faddp %st(0),%st(6)
644fldl -96(%edx)
645fmull 16(%edx)
646faddp %st(0),%st(3)
647fldl -80(%edx)
648fmull -8(%edx)
649faddp %st(0),%st(2)
650fldl crypto_scalarmult_curve25519_athlon_alpha77
651fadd %st(4),%st(0)
652fldl -32(%edx)
653fmull 48(%edx)
654faddp %st(0),%st(2)
655fxch %st(6)
656fmull crypto_scalarmult_curve25519_athlon_scale
657fldl -88(%edx)
658fmull 8(%edx)
659faddp %st(0),%st(4)
660fldl -72(%edx)
661fmull -16(%edx)
662faddp %st(0),%st(3)
663fxch %st(6)
664fsubl crypto_scalarmult_curve25519_athlon_alpha77
665fxch %st(5)
666fstpl 56(%ecx)
667fldl -24(%edx)
668fmull 40(%edx)
669faddp %st(0),%st(1)
670fldl -96(%edx)
671fmull 24(%edx)
672faddp %st(0),%st(6)
673fldl -80(%edx)
674fmull 0(%edx)
675faddp %st(0),%st(3)
676fxch %st(4)
677fadd %st(0),%st(1)
678fsubrp %st(0),%st(3)
679fldl -32(%edx)
680fmull 56(%edx)
681fxch %st(4)
682fmull crypto_scalarmult_curve25519_athlon_scale
683fldl -88(%edx)
684fmull 16(%edx)
685faddp %st(0),%st(6)
686fldl -72(%edx)
687fmull -8(%edx)
688faddp %st(0),%st(3)
689fldl crypto_scalarmult_curve25519_athlon_alpha102
690fadd %st(2),%st(0)
691fldl -24(%edx)
692fmull 48(%edx)
693faddp %st(0),%st(6)
694fldl -96(%edx)
695fmull 32(%edx)
696faddp %st(0),%st(2)
697fldl -80(%edx)
698fmull 8(%edx)
699faddp %st(0),%st(7)
700fldl -64(%edx)
701fmull -16(%edx)
702faddp %st(0),%st(4)
703fsubl crypto_scalarmult_curve25519_athlon_alpha102
704fxch %st(4)
705fstpl -24(%edx)
706fxch %st(4)
707fmull crypto_scalarmult_curve25519_athlon_scale
708fldl -88(%edx)
709fmull 24(%edx)
710faddp %st(0),%st(5)
711fldl -72(%edx)
712fmull 0(%edx)
713faddp %st(0),%st(6)
714fxch %st(3)
715fadd %st(0),%st(2)
716fsubrp %st(0),%st(1)
717fldl -96(%edx)
718fmull 40(%edx)
719faddp %st(0),%st(3)
720fldl -80(%edx)
721fmull 16(%edx)
722faddp %st(0),%st(4)
723fldl -64(%edx)
724fmull -8(%edx)
725faddp %st(0),%st(5)
726fldl crypto_scalarmult_curve25519_athlon_alpha128
727fadd %st(2),%st(0)
728fldl -88(%edx)
729fmull 32(%edx)
730faddp %st(0),%st(4)
731fldl -72(%edx)
732fmull 8(%edx)
733faddp %st(0),%st(5)
734fldl -56(%edx)
735fmull -16(%edx)
736faddp %st(0),%st(6)
737fsubl crypto_scalarmult_curve25519_athlon_alpha128
738fxch %st(1)
739fstpl -96(%edx)
740fldl -80(%edx)
741fmull 24(%edx)
742faddp %st(0),%st(3)
743fldl -64(%edx)
744fmull 0(%edx)
745faddp %st(0),%st(4)
746fadd %st(0),%st(4)
747fsubrp %st(0),%st(1)
748fstpl -88(%edx)
749fldl -72(%edx)
750fmull 16(%edx)
751faddp %st(0),%st(1)
752fldl -56(%edx)
753fmull -8(%edx)
754faddp %st(0),%st(2)
755fldl crypto_scalarmult_curve25519_athlon_alpha153
756fadd %st(3),%st(0)
757fldl -64(%edx)
758fmull 8(%edx)
759faddp %st(0),%st(2)
760fldl -48(%edx)
761fmull -16(%edx)
762faddp %st(0),%st(3)
763fsubl crypto_scalarmult_curve25519_athlon_alpha153
764fldl -56(%edx)
765fmull 0(%edx)
766faddp %st(0),%st(2)
767fadd %st(0),%st(2)
768fsubrp %st(0),%st(3)
769fxch %st(2)
770fstpl -80(%edx)
771fldl -48(%edx)
772fmull -8(%edx)
773faddp %st(0),%st(2)
774fldl crypto_scalarmult_curve25519_athlon_alpha179
775fadd %st(1),%st(0)
776fldl -40(%edx)
777fmull -16(%edx)
778faddp %st(0),%st(3)
779fsubl crypto_scalarmult_curve25519_athlon_alpha179
780fldl 64(%ecx)
781fldl 72(%ecx)
782fxch %st(2)
783fadd %st(0),%st(4)
784fsubrp %st(0),%st(3)
785fldl crypto_scalarmult_curve25519_athlon_alpha204
786fadd %st(4),%st(0)
787fsubl crypto_scalarmult_curve25519_athlon_alpha204
788fadd %st(0),%st(1)
789fsubrp %st(0),%st(4)
790fldl crypto_scalarmult_curve25519_athlon_alpha230
791fadd %st(1),%st(0)
792fsubl crypto_scalarmult_curve25519_athlon_alpha230
793fsubr %st(0),%st(1)
794faddp %st(0),%st(2)
795fxch %st(2)
796fstpl -72(%edx)
797fxch %st(2)
798fstpl -64(%edx)
799fstpl -56(%edx)
800fstpl -48(%edx)
801fldl -104(%edx)
802fmull -120(%ecx)
803fmull crypto_scalarmult_curve25519_athlon_scale
804fldl 0(%esp)
805fmull -128(%ecx)
806faddp %st(0),%st(1)
807fldl 8(%esp)
808fmull 120(%edx)
809faddp %st(0),%st(1)
810fldl 0(%esp)
811fmull -120(%ecx)
812fldl 16(%esp)
813fmull 112(%edx)
814faddp %st(0),%st(2)
815fldl 8(%esp)
816fmull -128(%ecx)
817faddp %st(0),%st(1)
818fldl 24(%esp)
819fmull 104(%edx)
820faddp %st(0),%st(2)
821fldl 16(%esp)
822fmull 120(%edx)
823faddp %st(0),%st(1)
824fldl 32(%esp)
825fmull 96(%edx)
826faddp %st(0),%st(2)
827fldl 24(%esp)
828fmull 112(%edx)
829faddp %st(0),%st(1)
830fldl 8(%esp)
831fmull -120(%ecx)
832fldl 40(%esp)
833fmull 88(%edx)
834faddp %st(0),%st(3)
835fldl 32(%esp)
836fmull 104(%edx)
837faddp %st(0),%st(2)
838fldl 16(%esp)
839fmull -128(%ecx)
840faddp %st(0),%st(1)
841fldl 48(%esp)
842fmull 80(%edx)
843faddp %st(0),%st(3)
844fldl 40(%esp)
845fmull 96(%edx)
846faddp %st(0),%st(2)
847fldl 24(%esp)
848fmull 120(%edx)
849faddp %st(0),%st(1)
850fldl -120(%edx)
851fmull 72(%edx)
852faddp %st(0),%st(3)
853fldl 48(%esp)
854fmull 88(%edx)
855faddp %st(0),%st(2)
856fldl 32(%esp)
857fmull 112(%edx)
858faddp %st(0),%st(1)
859fldl -112(%edx)
860fmull 64(%edx)
861faddp %st(0),%st(3)
862fldl -120(%edx)
863fmull 80(%edx)
864faddp %st(0),%st(2)
865fldl 40(%esp)
866fmull 104(%edx)
867faddp %st(0),%st(1)
868fldl 16(%esp)
869fmull -120(%ecx)
870fldl 48(%esp)
871fmull 96(%edx)
872faddp %st(0),%st(2)
873fldl -112(%edx)
874fmull 72(%edx)
875faddp %st(0),%st(3)
876fldl crypto_scalarmult_curve25519_athlon_alpha230
877fadd %st(4),%st(0)
878fldl 24(%esp)
879fmull -128(%ecx)
880faddp %st(0),%st(2)
881fldl -120(%edx)
882fmull 88(%edx)
883faddp %st(0),%st(3)
884fldl -104(%edx)
885fmull 64(%edx)
886faddp %st(0),%st(4)
887fsubl crypto_scalarmult_curve25519_athlon_alpha230
888fldl 32(%esp)
889fmull 120(%edx)
890faddp %st(0),%st(2)
891fldl 24(%esp)
892fmull -120(%ecx)
893fldl -112(%edx)
894fmull 80(%edx)
895faddp %st(0),%st(4)
896fxch %st(1)
897fadd %st(0),%st(4)
898fldl 40(%esp)
899fmull 112(%edx)
900faddp %st(0),%st(3)
901fldl 32(%esp)
902fmull -128(%ecx)
903faddp %st(0),%st(2)
904fsubrp %st(0),%st(5)
905fldl crypto_scalarmult_curve25519_athlon_alpha255
906fadd %st(4),%st(0)
907fldl 48(%esp)
908fmull 104(%edx)
909faddp %st(0),%st(3)
910fldl 40(%esp)
911fmull 120(%edx)
912faddp %st(0),%st(2)
913fldl -104(%edx)
914fmull 72(%edx)
915faddp %st(0),%st(4)
916fsubl crypto_scalarmult_curve25519_athlon_alpha255
917fldl -120(%edx)
918fmull 96(%edx)
919faddp %st(0),%st(3)
920fldl 32(%esp)
921fmull -120(%ecx)
922fldl 48(%esp)
923fmull 112(%edx)
924faddp %st(0),%st(3)
925fldl -112(%edx)
926fmull 88(%edx)
927faddp %st(0),%st(4)
928fxch %st(1)
929fadd %st(0),%st(4)
930fsubrp %st(0),%st(5)
931fxch %st(5)
932fstpl 8(%edx)
933fldl 40(%esp)
934fmull -128(%ecx)
935faddp %st(0),%st(5)
936fldl -120(%edx)
937fmull 104(%edx)
938faddp %st(0),%st(1)
939fldl -104(%edx)
940fmull 80(%edx)
941faddp %st(0),%st(2)
942fxch %st(2)
943fmull crypto_scalarmult_curve25519_athlon_scale
944fldl 48(%esp)
945fmull 120(%edx)
946faddp %st(0),%st(5)
947fldl -112(%edx)
948fmull 96(%edx)
949faddp %st(0),%st(3)
950fxch %st(1)
951fmull crypto_scalarmult_curve25519_athlon_scale
952fldl 0(%esp)
953fmull 64(%edx)
954faddp %st(0),%st(2)
955fxch %st(3)
956fstpl 16(%edx)
957fldl 40(%esp)
958fmull -120(%ecx)
959fldl -120(%edx)
960fmull 112(%edx)
961faddp %st(0),%st(5)
962fldl -104(%edx)
963fmull 88(%edx)
964faddp %st(0),%st(3)
965fldl 0(%esp)
966fmull 72(%edx)
967faddp %st(0),%st(4)
968fldl crypto_scalarmult_curve25519_athlon_alpha26
969fadd %st(2),%st(0)
970fldl 48(%esp)
971fmull -128(%ecx)
972faddp %st(0),%st(2)
973fldl -112(%edx)
974fmull 104(%edx)
975faddp %st(0),%st(6)
976fxch %st(3)
977fmull crypto_scalarmult_curve25519_athlon_scale
978fldl 8(%esp)
979fmull 64(%edx)
980faddp %st(0),%st(5)
981fxch %st(3)
982fsubl crypto_scalarmult_curve25519_athlon_alpha26
983fldl -120(%edx)
984fmull 120(%edx)
985faddp %st(0),%st(2)
986fldl -104(%edx)
987fmull 96(%edx)
988faddp %st(0),%st(6)
989fldl 0(%esp)
990fmull 80(%edx)
991faddp %st(0),%st(4)
992fadd %st(0),%st(4)
993fsubrp %st(0),%st(2)
994fldl 48(%esp)
995fmull -120(%ecx)
996fldl -112(%edx)
997fmull 112(%edx)
998faddp %st(0),%st(2)
999fxch %st(5)
1000fmull crypto_scalarmult_curve25519_athlon_scale
1001fldl 8(%esp)
1002fmull 72(%edx)
1003faddp %st(0),%st(4)
1004fldl crypto_scalarmult_curve25519_athlon_alpha51
1005fadd %st(5),%st(0)
1006fldl -120(%edx)
1007fmull -128(%ecx)
1008faddp %st(0),%st(7)
1009fldl -104(%edx)
1010fmull 104(%edx)
1011faddp %st(0),%st(3)
1012fldl 0(%esp)
1013fmull 88(%edx)
1014faddp %st(0),%st(2)
1015fldl 16(%esp)
1016fmull 64(%edx)
1017faddp %st(0),%st(5)
1018fsubl crypto_scalarmult_curve25519_athlon_alpha51
1019fxch %st(3)
1020fstpl -40(%edx)
1021fldl -112(%edx)
1022fmull 120(%edx)
1023faddp %st(0),%st(6)
1024fxch %st(1)
1025fmull crypto_scalarmult_curve25519_athlon_scale
1026fldl 8(%esp)
1027fmull 80(%edx)
1028faddp %st(0),%st(2)
1029fxch %st(2)
1030fadd %st(0),%st(3)
1031fsubrp %st(0),%st(4)
1032fldl -120(%edx)
1033fmull -120(%ecx)
1034fldl -104(%edx)
1035fmull 112(%edx)
1036faddp %st(0),%st(6)
1037fldl 0(%esp)
1038fmull 96(%edx)
1039faddp %st(0),%st(3)
1040fldl 16(%esp)
1041fmull 72(%edx)
1042faddp %st(0),%st(2)
1043fldl crypto_scalarmult_curve25519_athlon_alpha77
1044fadd %st(4),%st(0)
1045fldl -112(%edx)
1046fmull -128(%ecx)
1047faddp %st(0),%st(2)
1048fxch %st(6)
1049fmull crypto_scalarmult_curve25519_athlon_scale
1050fldl 8(%esp)
1051fmull 88(%edx)
1052faddp %st(0),%st(4)
1053fldl 24(%esp)
1054fmull 64(%edx)
1055faddp %st(0),%st(3)
1056fxch %st(6)
1057fsubl crypto_scalarmult_curve25519_athlon_alpha77
1058fxch %st(5)
1059fstpl -32(%edx)
1060fldl -104(%edx)
1061fmull 120(%edx)
1062faddp %st(0),%st(1)
1063fldl 0(%esp)
1064fmull 104(%edx)
1065faddp %st(0),%st(6)
1066fldl 16(%esp)
1067fmull 80(%edx)
1068faddp %st(0),%st(3)
1069fxch %st(4)
1070fadd %st(0),%st(1)
1071fsubrp %st(0),%st(3)
1072fldl -112(%edx)
1073fmull -120(%ecx)
1074fxch %st(4)
1075fmull crypto_scalarmult_curve25519_athlon_scale
1076fldl 8(%esp)
1077fmull 96(%edx)
1078faddp %st(0),%st(6)
1079fldl 24(%esp)
1080fmull 72(%edx)
1081faddp %st(0),%st(3)
1082fldl crypto_scalarmult_curve25519_athlon_alpha102
1083fadd %st(2),%st(0)
1084fldl -104(%edx)
1085fmull -128(%ecx)
1086faddp %st(0),%st(6)
1087fldl 0(%esp)
1088fmull 112(%edx)
1089faddp %st(0),%st(2)
1090fldl 16(%esp)
1091fmull 88(%edx)
1092faddp %st(0),%st(7)
1093fldl 32(%esp)
1094fmull 64(%edx)
1095faddp %st(0),%st(4)
1096fsubl crypto_scalarmult_curve25519_athlon_alpha102
1097fxch %st(4)
1098fstpl -104(%edx)
1099fxch %st(4)
1100fmull crypto_scalarmult_curve25519_athlon_scale
1101fldl 8(%esp)
1102fmull 104(%edx)
1103faddp %st(0),%st(5)
1104fldl 24(%esp)
1105fmull 80(%edx)
1106faddp %st(0),%st(6)
1107fxch %st(3)
1108fadd %st(0),%st(2)
1109fsubrp %st(0),%st(1)
1110fldl 0(%esp)
1111fmull 120(%edx)
1112faddp %st(0),%st(3)
1113fldl 16(%esp)
1114fmull 96(%edx)
1115faddp %st(0),%st(4)
1116fldl 32(%esp)
1117fmull 72(%edx)
1118faddp %st(0),%st(5)
1119fldl crypto_scalarmult_curve25519_athlon_alpha128
1120fadd %st(2),%st(0)
1121fldl 8(%esp)
1122fmull 112(%edx)
1123faddp %st(0),%st(4)
1124fldl 24(%esp)
1125fmull 88(%edx)
1126faddp %st(0),%st(5)
1127fldl 40(%esp)
1128fmull 64(%edx)
1129faddp %st(0),%st(6)
1130fsubl crypto_scalarmult_curve25519_athlon_alpha128
1131fxch %st(1)
1132fstpl -16(%edx)
1133fldl 16(%esp)
1134fmull 104(%edx)
1135faddp %st(0),%st(3)
1136fldl 32(%esp)
1137fmull 80(%edx)
1138faddp %st(0),%st(4)
1139fadd %st(0),%st(4)
1140fsubrp %st(0),%st(1)
1141fstpl -8(%edx)
1142fldl 24(%esp)
1143fmull 96(%edx)
1144faddp %st(0),%st(1)
1145fldl 40(%esp)
1146fmull 72(%edx)
1147faddp %st(0),%st(2)
1148fldl crypto_scalarmult_curve25519_athlon_alpha153
1149fadd %st(3),%st(0)
1150fldl 32(%esp)
1151fmull 88(%edx)
1152faddp %st(0),%st(2)
1153fldl 48(%esp)
1154fmull 64(%edx)
1155faddp %st(0),%st(3)
1156fsubl crypto_scalarmult_curve25519_athlon_alpha153
1157fldl 40(%esp)
1158fmull 80(%edx)
1159faddp %st(0),%st(2)
1160fadd %st(0),%st(2)
1161fsubrp %st(0),%st(3)
1162fxch %st(2)
1163fstpl 0(%edx)
1164fldl 48(%esp)
1165fmull 72(%edx)
1166faddp %st(0),%st(2)
1167fldl crypto_scalarmult_curve25519_athlon_alpha179
1168fadd %st(1),%st(0)
1169fldl -120(%edx)
1170fmull 64(%edx)
1171faddp %st(0),%st(3)
1172fsubl crypto_scalarmult_curve25519_athlon_alpha179
1173fldl 8(%edx)
1174fldl 16(%edx)
1175fxch %st(2)
1176fadd %st(0),%st(4)
1177fsubrp %st(0),%st(3)
1178fldl crypto_scalarmult_curve25519_athlon_alpha204
1179fadd %st(4),%st(0)
1180fsubl crypto_scalarmult_curve25519_athlon_alpha204
1181fadd %st(0),%st(1)
1182fsubrp %st(0),%st(4)
1183fldl crypto_scalarmult_curve25519_athlon_alpha230
1184fadd %st(1),%st(0)
1185fsubl crypto_scalarmult_curve25519_athlon_alpha230
1186fsubr %st(0),%st(1)
1187faddp %st(0),%st(2)
1188fxch %st(2)
1189fstpl 8(%edx)
1190fxch %st(2)
1191fstpl 16(%edx)
1192fstpl 24(%edx)
1193fstpl 32(%edx)
1194fldl -40(%ecx)
1195fmul %st(0),%st(0)
1196fldl -112(%ecx)
1197fadd %st(0),%st(0)
1198fldl -104(%ecx)
1199fadd %st(0),%st(0)
1200fldl -96(%ecx)
1201fadd %st(0),%st(0)
1202fldl -56(%ecx)
1203fxch %st(4)
1204fmull crypto_scalarmult_curve25519_athlon_scale
1205fldl -40(%ecx)
1206fmul %st(4),%st(0)
1207fldl -48(%ecx)
1208fmul %st(4),%st(0)
1209faddp %st(0),%st(1)
1210fxch %st(4)
1211fstl 0(%esp)
1212fxch %st(3)
1213fstl 8(%esp)
1214fxch %st(3)
1215fmull -48(%ecx)
1216faddp %st(0),%st(1)
1217fldl -64(%ecx)
1218fxch %st(5)
1219fmul %st(0),%st(3)
1220fxch %st(3)
1221faddp %st(0),%st(1)
1222fxch %st(2)
1223fadd %st(0),%st(0)
1224fldl -56(%ecx)
1225fmul %st(2),%st(0)
1226faddp %st(0),%st(4)
1227fxch %st(1)
1228fstl 16(%esp)
1229fldl -72(%ecx)
1230fxch %st(5)
1231fmul %st(0),%st(1)
1232fxch %st(1)
1233faddp %st(0),%st(3)
1234fadd %st(0),%st(0)
1235fstpl 48(%esp)
1236fldl -88(%ecx)
1237fadd %st(0),%st(0)
1238fstl 24(%esp)
1239fldl -64(%ecx)
1240fmul %st(1),%st(0)
1241faddp %st(0),%st(4)
1242fmul %st(4),%st(0)
1243faddp %st(0),%st(2)
1244fxch %st(3)
1245fadd %st(0),%st(0)
1246fstpl 40(%esp)
1247fldl -80(%ecx)
1248fmul %st(0),%st(0)
1249faddp %st(0),%st(1)
1250fldl crypto_scalarmult_curve25519_athlon_alpha230
1251fadd %st(1),%st(0)
1252fsubl crypto_scalarmult_curve25519_athlon_alpha230
1253fsubr %st(0),%st(1)
1254fldl 8(%esp)
1255fldl -40(%ecx)
1256fmul %st(0),%st(1)
1257fldl 16(%esp)
1258fmul %st(0),%st(1)
1259fldl -48(%ecx)
1260fmul %st(0),%st(1)
1261fxch %st(1)
1262faddp %st(0),%st(3)
1263fldl 24(%esp)
1264fmul %st(0),%st(1)
1265fxch %st(1)
1266faddp %st(0),%st(2)
1267fldl -80(%ecx)
1268fadd %st(0),%st(0)
1269fstl 32(%esp)
1270fmull -72(%ecx)
1271faddp %st(0),%st(6)
1272fxch %st(3)
1273faddp %st(0),%st(5)
1274fldl crypto_scalarmult_curve25519_athlon_alpha255
1275fadd %st(5),%st(0)
1276fsubl crypto_scalarmult_curve25519_athlon_alpha255
1277fsubr %st(0),%st(5)
1278fldl -56(%ecx)
1279fmul %st(0),%st(4)
1280fxch %st(4)
1281faddp %st(0),%st(3)
1282fldl 32(%esp)
1283fmul %st(0),%st(4)
1284fxch %st(4)
1285faddp %st(0),%st(2)
1286fldl -64(%ecx)
1287fmul %st(0),%st(4)
1288fxch %st(4)
1289faddp %st(0),%st(3)
1290fxch %st(3)
1291fmull 40(%esp)
1292faddp %st(0),%st(1)
1293fxch %st(3)
1294fstpl -120(%edx)
1295fldl -72(%ecx)
1296fmul %st(0),%st(0)
1297faddp %st(0),%st(1)
1298fxch %st(2)
1299fmull crypto_scalarmult_curve25519_athlon_scale
1300fxch %st(3)
1301fstpl -112(%edx)
1302faddp %st(0),%st(1)
1303fmull crypto_scalarmult_curve25519_athlon_scale
1304fldl 24(%esp)
1305fmull -40(%ecx)
1306fldl -112(%ecx)
1307fmul %st(0),%st(0)
1308faddp %st(0),%st(2)
1309fldl 32(%esp)
1310fmull -48(%ecx)
1311faddp %st(0),%st(1)
1312fldl 0(%esp)
1313fmull -104(%ecx)
1314faddp %st(0),%st(3)
1315fldl 40(%esp)
1316fmull -56(%ecx)
1317faddp %st(0),%st(1)
1318fldl crypto_scalarmult_curve25519_athlon_alpha26
1319fadd %st(2),%st(0)
1320fsubl crypto_scalarmult_curve25519_athlon_alpha26
1321fsubr %st(0),%st(2)
1322faddp %st(0),%st(3)
1323fldl crypto_scalarmult_curve25519_athlon_alpha51
1324fadd %st(3),%st(0)
1325fsubl crypto_scalarmult_curve25519_athlon_alpha51
1326fsubr %st(0),%st(3)
1327fldl -64(%ecx)
1328fmul %st(0),%st(0)
1329faddp %st(0),%st(2)
1330fxch %st(1)
1331fmull crypto_scalarmult_curve25519_athlon_scale
1332fldl 0(%esp)
1333fmull -96(%ecx)
1334faddp %st(0),%st(1)
1335fldl -104(%ecx)
1336fmul %st(0),%st(0)
1337faddp %st(0),%st(1)
1338faddp %st(0),%st(1)
1339fldl crypto_scalarmult_curve25519_athlon_alpha77
1340fadd %st(1),%st(0)
1341fsubl crypto_scalarmult_curve25519_athlon_alpha77
1342fsubr %st(0),%st(1)
1343fxch %st(2)
1344fstpl 64(%edx)
1345fldl 32(%esp)
1346fmull -40(%ecx)
1347fldl 40(%esp)
1348fmull -48(%ecx)
1349faddp %st(0),%st(1)
1350fldl 48(%esp)
1351fmull -56(%ecx)
1352faddp %st(0),%st(1)
1353fmull crypto_scalarmult_curve25519_athlon_scale
1354fldl 0(%esp)
1355fmull -88(%ecx)
1356faddp %st(0),%st(1)
1357fldl 8(%esp)
1358fmull -96(%ecx)
1359faddp %st(0),%st(1)
1360faddp %st(0),%st(2)
1361fldl crypto_scalarmult_curve25519_athlon_alpha102
1362fadd %st(2),%st(0)
1363fsubl crypto_scalarmult_curve25519_athlon_alpha102
1364fsubr %st(0),%st(2)
1365fxch %st(3)
1366fstpl 72(%edx)
1367fldl 40(%esp)
1368fmull -40(%ecx)
1369fldl 48(%esp)
1370fmull -48(%ecx)
1371faddp %st(0),%st(1)
1372fldl -56(%ecx)
1373fmul %st(0),%st(0)
1374faddp %st(0),%st(1)
1375fmull crypto_scalarmult_curve25519_athlon_scale
1376fldl 0(%esp)
1377fmull -80(%ecx)
1378faddp %st(0),%st(1)
1379fldl 8(%esp)
1380fmull -88(%ecx)
1381faddp %st(0),%st(1)
1382fldl -96(%ecx)
1383fmul %st(0),%st(0)
1384faddp %st(0),%st(1)
1385faddp %st(0),%st(3)
1386fldl crypto_scalarmult_curve25519_athlon_alpha128
1387fadd %st(3),%st(0)
1388fsubl crypto_scalarmult_curve25519_athlon_alpha128
1389fsubr %st(0),%st(3)
1390fxch %st(1)
1391fstpl 80(%edx)
1392fldl 48(%esp)
1393fldl -40(%ecx)
1394fmul %st(0),%st(1)
1395fmul %st(5),%st(0)
1396fxch %st(5)
1397fmull -48(%ecx)
1398faddp %st(0),%st(1)
1399fmull crypto_scalarmult_curve25519_athlon_scale
1400fldl 0(%esp)
1401fmull -72(%ecx)
1402faddp %st(0),%st(1)
1403fldl 8(%esp)
1404fmull -80(%ecx)
1405faddp %st(0),%st(1)
1406fldl 16(%esp)
1407fmull -88(%ecx)
1408faddp %st(0),%st(1)
1409faddp %st(0),%st(1)
1410fldl crypto_scalarmult_curve25519_athlon_alpha153
1411fadd %st(1),%st(0)
1412fsubl crypto_scalarmult_curve25519_athlon_alpha153
1413fsubr %st(0),%st(1)
1414fxch %st(2)
1415fstpl 88(%edx)
1416fldl -48(%ecx)
1417fmul %st(0),%st(0)
1418faddp %st(0),%st(4)
1419fxch %st(3)
1420fmull crypto_scalarmult_curve25519_athlon_scale
1421fldl 0(%esp)
1422fmull -64(%ecx)
1423faddp %st(0),%st(1)
1424fldl 8(%esp)
1425fmull -72(%ecx)
1426faddp %st(0),%st(1)
1427fldl 16(%esp)
1428fmull -80(%ecx)
1429faddp %st(0),%st(1)
1430fldl -88(%ecx)
1431fmul %st(0),%st(0)
1432faddp %st(0),%st(1)
1433faddp %st(0),%st(1)
1434fldl crypto_scalarmult_curve25519_athlon_alpha179
1435fadd %st(1),%st(0)
1436fsubl crypto_scalarmult_curve25519_athlon_alpha179
1437fsubr %st(0),%st(1)
1438fldl -48(%ecx)
1439fadd %st(0),%st(0)
1440fmull -40(%ecx)
1441fmull crypto_scalarmult_curve25519_athlon_scale
1442fldl 0(%esp)
1443fmull -56(%ecx)
1444faddp %st(0),%st(1)
1445fldl 8(%esp)
1446fmull -64(%ecx)
1447faddp %st(0),%st(1)
1448fldl 16(%esp)
1449fmull -72(%ecx)
1450faddp %st(0),%st(1)
1451fldl 24(%esp)
1452fmull -80(%ecx)
1453faddp %st(0),%st(1)
1454faddp %st(0),%st(1)
1455fldl crypto_scalarmult_curve25519_athlon_alpha204
1456fadd %st(1),%st(0)
1457fsubl crypto_scalarmult_curve25519_athlon_alpha204
1458fsubr %st(0),%st(1)
1459fldl -120(%edx)
1460faddp %st(0),%st(1)
1461fldl crypto_scalarmult_curve25519_athlon_alpha230
1462fadd %st(1),%st(0)
1463fldl -112(%edx)
1464fxch %st(1)
1465fsubl crypto_scalarmult_curve25519_athlon_alpha230
1466fsubr %st(0),%st(2)
1467faddp %st(0),%st(1)
1468fxch %st(4)
1469fstpl 96(%edx)
1470fxch %st(4)
1471fstpl 104(%edx)
1472fxch %st(1)
1473fstpl 112(%edx)
1474fstpl 120(%edx)
1475fxch %st(1)
1476fstpl -128(%ecx)
1477fstpl -120(%ecx)
1478fldl 40(%ecx)
1479fmul %st(0),%st(0)
1480fldl -32(%ecx)
1481fadd %st(0),%st(0)
1482fldl -24(%ecx)
1483fadd %st(0),%st(0)
1484fldl -16(%ecx)
1485fadd %st(0),%st(0)
1486fldl 24(%ecx)
1487fxch %st(4)
1488fmull crypto_scalarmult_curve25519_athlon_scale
1489fldl 40(%ecx)
1490fmul %st(4),%st(0)
1491fldl 32(%ecx)
1492fmul %st(4),%st(0)
1493faddp %st(0),%st(1)
1494fxch %st(4)
1495fstl 0(%esp)
1496fxch %st(3)
1497fstl 8(%esp)
1498fxch %st(3)
1499fmull 32(%ecx)
1500faddp %st(0),%st(1)
1501fldl 16(%ecx)
1502fxch %st(5)
1503fmul %st(0),%st(3)
1504fxch %st(3)
1505faddp %st(0),%st(1)
1506fxch %st(2)
1507fadd %st(0),%st(0)
1508fldl 24(%ecx)
1509fmul %st(2),%st(0)
1510faddp %st(0),%st(4)
1511fxch %st(1)
1512fstl 16(%esp)
1513fldl 8(%ecx)
1514fxch %st(5)
1515fmul %st(0),%st(1)
1516fxch %st(1)
1517faddp %st(0),%st(3)
1518fadd %st(0),%st(0)
1519fstpl 48(%esp)
1520fldl -8(%ecx)
1521fadd %st(0),%st(0)
1522fstl 24(%esp)
1523fldl 16(%ecx)
1524fmul %st(1),%st(0)
1525faddp %st(0),%st(4)
1526fmul %st(4),%st(0)
1527faddp %st(0),%st(2)
1528fxch %st(3)
1529fadd %st(0),%st(0)
1530fstpl 40(%esp)
1531fldl 0(%ecx)
1532fmul %st(0),%st(0)
1533faddp %st(0),%st(1)
1534fldl crypto_scalarmult_curve25519_athlon_alpha230
1535fadd %st(1),%st(0)
1536fsubl crypto_scalarmult_curve25519_athlon_alpha230
1537fsubr %st(0),%st(1)
1538fldl 8(%esp)
1539fldl 40(%ecx)
1540fmul %st(0),%st(1)
1541fldl 16(%esp)
1542fmul %st(0),%st(1)
1543fldl 32(%ecx)
1544fmul %st(0),%st(1)
1545fxch %st(1)
1546faddp %st(0),%st(3)
1547fldl 24(%esp)
1548fmul %st(0),%st(1)
1549fxch %st(1)
1550faddp %st(0),%st(2)
1551fldl 0(%ecx)
1552fadd %st(0),%st(0)
1553fstl 32(%esp)
1554fmull 8(%ecx)
1555faddp %st(0),%st(6)
1556fxch %st(3)
1557faddp %st(0),%st(5)
1558fldl crypto_scalarmult_curve25519_athlon_alpha255
1559fadd %st(5),%st(0)
1560fsubl crypto_scalarmult_curve25519_athlon_alpha255
1561fsubr %st(0),%st(5)
1562fldl 24(%ecx)
1563fmul %st(0),%st(4)
1564fxch %st(4)
1565faddp %st(0),%st(3)
1566fldl 32(%esp)
1567fmul %st(0),%st(4)
1568fxch %st(4)
1569faddp %st(0),%st(2)
1570fldl 16(%ecx)
1571fmul %st(0),%st(4)
1572fxch %st(4)
1573faddp %st(0),%st(3)
1574fxch %st(3)
1575fmull 40(%esp)
1576faddp %st(0),%st(1)
1577fxch %st(3)
1578fstpl -120(%edx)
1579fldl 8(%ecx)
1580fmul %st(0),%st(0)
1581faddp %st(0),%st(1)
1582fxch %st(2)
1583fmull crypto_scalarmult_curve25519_athlon_scale
1584fxch %st(3)
1585fstpl -112(%edx)
1586faddp %st(0),%st(1)
1587fmull crypto_scalarmult_curve25519_athlon_scale
1588fldl 24(%esp)
1589fmull 40(%ecx)
1590fldl -32(%ecx)
1591fmul %st(0),%st(0)
1592faddp %st(0),%st(2)
1593fldl 32(%esp)
1594fmull 32(%ecx)
1595faddp %st(0),%st(1)
1596fldl 0(%esp)
1597fmull -24(%ecx)
1598faddp %st(0),%st(3)
1599fldl 40(%esp)
1600fmull 24(%ecx)
1601faddp %st(0),%st(1)
1602fldl crypto_scalarmult_curve25519_athlon_alpha26
1603fadd %st(2),%st(0)
1604fsubl crypto_scalarmult_curve25519_athlon_alpha26
1605fsubr %st(0),%st(2)
1606faddp %st(0),%st(3)
1607fldl crypto_scalarmult_curve25519_athlon_alpha51
1608fadd %st(3),%st(0)
1609fsubl crypto_scalarmult_curve25519_athlon_alpha51
1610fsubr %st(0),%st(3)
1611fldl 16(%ecx)
1612fmul %st(0),%st(0)
1613faddp %st(0),%st(2)
1614fxch %st(1)
1615fmull crypto_scalarmult_curve25519_athlon_scale
1616fldl 0(%esp)
1617fmull -16(%ecx)
1618faddp %st(0),%st(1)
1619fldl -24(%ecx)
1620fmul %st(0),%st(0)
1621faddp %st(0),%st(1)
1622faddp %st(0),%st(1)
1623fldl crypto_scalarmult_curve25519_athlon_alpha77
1624fadd %st(1),%st(0)
1625fsubl crypto_scalarmult_curve25519_athlon_alpha77
1626fsubr %st(0),%st(1)
1627fxch %st(2)
1628fstpl -112(%ecx)
1629fldl 32(%esp)
1630fmull 40(%ecx)
1631fldl 40(%esp)
1632fmull 32(%ecx)
1633faddp %st(0),%st(1)
1634fldl 48(%esp)
1635fmull 24(%ecx)
1636faddp %st(0),%st(1)
1637fmull crypto_scalarmult_curve25519_athlon_scale
1638fldl 0(%esp)
1639fmull -8(%ecx)
1640faddp %st(0),%st(1)
1641fldl 8(%esp)
1642fmull -16(%ecx)
1643faddp %st(0),%st(1)
1644faddp %st(0),%st(2)
1645fldl crypto_scalarmult_curve25519_athlon_alpha102
1646fadd %st(2),%st(0)
1647fsubl crypto_scalarmult_curve25519_athlon_alpha102
1648fsubr %st(0),%st(2)
1649fxch %st(3)
1650fstpl -104(%ecx)
1651fldl 40(%esp)
1652fmull 40(%ecx)
1653fldl 48(%esp)
1654fmull 32(%ecx)
1655faddp %st(0),%st(1)
1656fldl 24(%ecx)
1657fmul %st(0),%st(0)
1658faddp %st(0),%st(1)
1659fmull crypto_scalarmult_curve25519_athlon_scale
1660fldl 0(%esp)
1661fmull 0(%ecx)
1662faddp %st(0),%st(1)
1663fldl 8(%esp)
1664fmull -8(%ecx)
1665faddp %st(0),%st(1)
1666fldl -16(%ecx)
1667fmul %st(0),%st(0)
1668faddp %st(0),%st(1)
1669faddp %st(0),%st(3)
1670fldl crypto_scalarmult_curve25519_athlon_alpha128
1671fadd %st(3),%st(0)
1672fsubl crypto_scalarmult_curve25519_athlon_alpha128
1673fsubr %st(0),%st(3)
1674fxch %st(1)
1675fstpl -96(%ecx)
1676fldl 48(%esp)
1677fldl 40(%ecx)
1678fmul %st(0),%st(1)
1679fmul %st(5),%st(0)
1680fxch %st(5)
1681fmull 32(%ecx)
1682faddp %st(0),%st(1)
1683fmull crypto_scalarmult_curve25519_athlon_scale
1684fldl 0(%esp)
1685fmull 8(%ecx)
1686faddp %st(0),%st(1)
1687fldl 8(%esp)
1688fmull 0(%ecx)
1689faddp %st(0),%st(1)
1690fldl 16(%esp)
1691fmull -8(%ecx)
1692faddp %st(0),%st(1)
1693faddp %st(0),%st(1)
1694fldl crypto_scalarmult_curve25519_athlon_alpha153
1695fadd %st(1),%st(0)
1696fsubl crypto_scalarmult_curve25519_athlon_alpha153
1697fsubr %st(0),%st(1)
1698fxch %st(2)
1699fstpl -88(%ecx)
1700fldl 32(%ecx)
1701fmul %st(0),%st(0)
1702faddp %st(0),%st(4)
1703fxch %st(3)
1704fmull crypto_scalarmult_curve25519_athlon_scale
1705fldl 0(%esp)
1706fmull 16(%ecx)
1707faddp %st(0),%st(1)
1708fldl 8(%esp)
1709fmull 8(%ecx)
1710faddp %st(0),%st(1)
1711fldl 16(%esp)
1712fmull 0(%ecx)
1713faddp %st(0),%st(1)
1714fldl -8(%ecx)
1715fmul %st(0),%st(0)
1716faddp %st(0),%st(1)
1717faddp %st(0),%st(1)
1718fldl crypto_scalarmult_curve25519_athlon_alpha179
1719fadd %st(1),%st(0)
1720fsubl crypto_scalarmult_curve25519_athlon_alpha179
1721fsubr %st(0),%st(1)
1722fldl 32(%ecx)
1723fadd %st(0),%st(0)
1724fmull 40(%ecx)
1725fmull crypto_scalarmult_curve25519_athlon_scale
1726fldl 0(%esp)
1727fmull 24(%ecx)
1728faddp %st(0),%st(1)
1729fldl 8(%esp)
1730fmull 16(%ecx)
1731faddp %st(0),%st(1)
1732fldl 16(%esp)
1733fmull 8(%ecx)
1734faddp %st(0),%st(1)
1735fldl 24(%esp)
1736fmull 0(%ecx)
1737faddp %st(0),%st(1)
1738faddp %st(0),%st(1)
1739fldl crypto_scalarmult_curve25519_athlon_alpha204
1740fadd %st(1),%st(0)
1741fsubl crypto_scalarmult_curve25519_athlon_alpha204
1742fsubr %st(0),%st(1)
1743fldl -120(%edx)
1744faddp %st(0),%st(1)
1745fldl crypto_scalarmult_curve25519_athlon_alpha230
1746fadd %st(1),%st(0)
1747fldl -112(%edx)
1748fxch %st(1)
1749fsubl crypto_scalarmult_curve25519_athlon_alpha230
1750fsubr %st(0),%st(2)
1751faddp %st(0),%st(1)
1752fxch %st(4)
1753fstpl -80(%ecx)
1754fxch %st(4)
1755fstpl -72(%ecx)
1756fxch %st(1)
1757fstpl -64(%ecx)
1758fstpl -56(%ecx)
1759fxch %st(1)
1760fstpl -48(%ecx)
1761fstpl -40(%ecx)
1762fldl -40(%edx)
1763fldl 48(%ecx)
1764fadd %st(0),%st(1)
1765fsubl -40(%edx)
1766fxch %st(1)
1767fstpl -120(%edx)
1768fstpl -40(%edx)
1769fldl -32(%edx)
1770fldl 56(%ecx)
1771fadd %st(0),%st(1)
1772fsubl -32(%edx)
1773fxch %st(1)
1774fstpl -112(%edx)
1775fstpl -32(%edx)
1776fldl -104(%edx)
1777fldl -24(%edx)
1778fadd %st(0),%st(1)
1779fsubl -104(%edx)
1780fxch %st(1)
1781fstpl -104(%edx)
1782fstpl -24(%edx)
1783fldl -16(%edx)
1784fldl -96(%edx)
1785fadd %st(0),%st(1)
1786fsubl -16(%edx)
1787fxch %st(1)
1788fstpl -96(%edx)
1789fstpl -16(%edx)
1790fldl -8(%edx)
1791fldl -88(%edx)
1792fadd %st(0),%st(1)
1793fsubl -8(%edx)
1794fxch %st(1)
1795fstpl -88(%edx)
1796fstpl -8(%edx)
1797fldl 0(%edx)
1798fldl -80(%edx)
1799fadd %st(0),%st(1)
1800fsubl 0(%edx)
1801fxch %st(1)
1802fstpl -80(%edx)
1803fstpl 0(%edx)
1804fldl 8(%edx)
1805fldl -72(%edx)
1806fadd %st(0),%st(1)
1807fsubl 8(%edx)
1808fxch %st(1)
1809fstpl -72(%edx)
1810fstpl 8(%edx)
1811fldl 16(%edx)
1812fldl -64(%edx)
1813fadd %st(0),%st(1)
1814fsubl 16(%edx)
1815fxch %st(1)
1816fstpl -64(%edx)
1817fstpl 16(%edx)
1818fldl 24(%edx)
1819fldl -56(%edx)
1820fadd %st(0),%st(1)
1821fsubl 24(%edx)
1822fxch %st(1)
1823fstpl -56(%edx)
1824fstpl 24(%edx)
1825fldl 32(%edx)
1826fldl -48(%edx)
1827fadd %st(0),%st(1)
1828fsubl 32(%edx)
1829fxch %st(1)
1830fstpl -48(%edx)
1831fstpl 32(%edx)
1832fldl 64(%edx)
1833fsubl -112(%ecx)
1834fstpl -32(%ecx)
1835fldl 72(%edx)
1836fsubl -104(%ecx)
1837fstpl -24(%ecx)
1838fldl 80(%edx)
1839fsubl -96(%ecx)
1840fstpl -16(%ecx)
1841fldl 88(%edx)
1842fsubl -88(%ecx)
1843fstpl -8(%ecx)
1844fldl 96(%edx)
1845fsubl -80(%ecx)
1846fstpl 0(%ecx)
1847fldl 104(%edx)
1848fsubl -72(%ecx)
1849fstpl 8(%ecx)
1850fldl 112(%edx)
1851fsubl -64(%ecx)
1852fstpl 16(%ecx)
1853fldl 120(%edx)
1854fsubl -56(%ecx)
1855fstpl 24(%ecx)
1856fldl -128(%ecx)
1857fsubl -48(%ecx)
1858fstpl 32(%ecx)
1859fldl -120(%ecx)
1860fsubl -40(%ecx)
1861fstpl 40(%ecx)
1862fldl -48(%edx)
1863fmul %st(0),%st(0)
1864fldl -120(%edx)
1865fadd %st(0),%st(0)
1866fldl -112(%edx)
1867fadd %st(0),%st(0)
1868fldl -104(%edx)
1869fadd %st(0),%st(0)
1870fldl -64(%edx)
1871fxch %st(4)
1872fmull crypto_scalarmult_curve25519_athlon_scale
1873fldl -48(%edx)
1874fmul %st(4),%st(0)
1875fldl -56(%edx)
1876fmul %st(4),%st(0)
1877faddp %st(0),%st(1)
1878fxch %st(4)
1879fstl 0(%esp)
1880fxch %st(3)
1881fstl 8(%esp)
1882fxch %st(3)
1883fmull -56(%edx)
1884faddp %st(0),%st(1)
1885fldl -72(%edx)
1886fxch %st(5)
1887fmul %st(0),%st(3)
1888fxch %st(3)
1889faddp %st(0),%st(1)
1890fxch %st(2)
1891fadd %st(0),%st(0)
1892fldl -64(%edx)
1893fmul %st(2),%st(0)
1894faddp %st(0),%st(4)
1895fxch %st(1)
1896fstl 16(%esp)
1897fldl -80(%edx)
1898fxch %st(5)
1899fmul %st(0),%st(1)
1900fxch %st(1)
1901faddp %st(0),%st(3)
1902fadd %st(0),%st(0)
1903fstpl 48(%esp)
1904fldl -96(%edx)
1905fadd %st(0),%st(0)
1906fstl 24(%esp)
1907fldl -72(%edx)
1908fmul %st(1),%st(0)
1909faddp %st(0),%st(4)
1910fmul %st(4),%st(0)
1911faddp %st(0),%st(2)
1912fxch %st(3)
1913fadd %st(0),%st(0)
1914fstpl 40(%esp)
1915fldl -88(%edx)
1916fmul %st(0),%st(0)
1917faddp %st(0),%st(1)
1918fldl crypto_scalarmult_curve25519_athlon_alpha230
1919fadd %st(1),%st(0)
1920fsubl crypto_scalarmult_curve25519_athlon_alpha230
1921fsubr %st(0),%st(1)
1922fldl 8(%esp)
1923fldl -48(%edx)
1924fmul %st(0),%st(1)
1925fldl 16(%esp)
1926fmul %st(0),%st(1)
1927fldl -56(%edx)
1928fmul %st(0),%st(1)
1929fxch %st(1)
1930faddp %st(0),%st(3)
1931fldl 24(%esp)
1932fmul %st(0),%st(1)
1933fxch %st(1)
1934faddp %st(0),%st(2)
1935fldl -88(%edx)
1936fadd %st(0),%st(0)
1937fstl 32(%esp)
1938fmull -80(%edx)
1939faddp %st(0),%st(6)
1940fxch %st(3)
1941faddp %st(0),%st(5)
1942fldl crypto_scalarmult_curve25519_athlon_alpha255
1943fadd %st(5),%st(0)
1944fsubl crypto_scalarmult_curve25519_athlon_alpha255
1945fsubr %st(0),%st(5)
1946fldl -64(%edx)
1947fmul %st(0),%st(4)
1948fxch %st(4)
1949faddp %st(0),%st(3)
1950fldl 32(%esp)
1951fmul %st(0),%st(4)
1952fxch %st(4)
1953faddp %st(0),%st(2)
1954fldl -72(%edx)
1955fmul %st(0),%st(4)
1956fxch %st(4)
1957faddp %st(0),%st(3)
1958fxch %st(3)
1959fmull 40(%esp)
1960faddp %st(0),%st(1)
1961fxch %st(3)
1962fstpl 48(%edx)
1963fldl -80(%edx)
1964fmul %st(0),%st(0)
1965faddp %st(0),%st(1)
1966fxch %st(2)
1967fmull crypto_scalarmult_curve25519_athlon_scale
1968fxch %st(3)
1969fstpl 56(%edx)
1970faddp %st(0),%st(1)
1971fmull crypto_scalarmult_curve25519_athlon_scale
1972fldl 24(%esp)
1973fmull -48(%edx)
1974fldl -120(%edx)
1975fmul %st(0),%st(0)
1976faddp %st(0),%st(2)
1977fldl 32(%esp)
1978fmull -56(%edx)
1979faddp %st(0),%st(1)
1980fldl 0(%esp)
1981fmull -112(%edx)
1982faddp %st(0),%st(3)
1983fldl 40(%esp)
1984fmull -64(%edx)
1985faddp %st(0),%st(1)
1986fldl crypto_scalarmult_curve25519_athlon_alpha26
1987fadd %st(2),%st(0)
1988fsubl crypto_scalarmult_curve25519_athlon_alpha26
1989fsubr %st(0),%st(2)
1990faddp %st(0),%st(3)
1991fldl crypto_scalarmult_curve25519_athlon_alpha51
1992fadd %st(3),%st(0)
1993fsubl crypto_scalarmult_curve25519_athlon_alpha51
1994fsubr %st(0),%st(3)
1995fldl -72(%edx)
1996fmul %st(0),%st(0)
1997faddp %st(0),%st(2)
1998fxch %st(1)
1999fmull crypto_scalarmult_curve25519_athlon_scale
2000fldl 0(%esp)
2001fmull -104(%edx)
2002faddp %st(0),%st(1)
2003fldl -112(%edx)
2004fmul %st(0),%st(0)
2005faddp %st(0),%st(1)
2006faddp %st(0),%st(1)
2007fldl crypto_scalarmult_curve25519_athlon_alpha77
2008fadd %st(1),%st(0)
2009fsubl crypto_scalarmult_curve25519_athlon_alpha77
2010fsubr %st(0),%st(1)
2011fxch %st(2)
2012fstpl -120(%edx)
2013fldl 32(%esp)
2014fmull -48(%edx)
2015fldl 40(%esp)
2016fmull -56(%edx)
2017faddp %st(0),%st(1)
2018fldl 48(%esp)
2019fmull -64(%edx)
2020faddp %st(0),%st(1)
2021fmull crypto_scalarmult_curve25519_athlon_scale
2022fldl 0(%esp)
2023fmull -96(%edx)
2024faddp %st(0),%st(1)
2025fldl 8(%esp)
2026fmull -104(%edx)
2027faddp %st(0),%st(1)
2028faddp %st(0),%st(2)
2029fldl crypto_scalarmult_curve25519_athlon_alpha102
2030fadd %st(2),%st(0)
2031fsubl crypto_scalarmult_curve25519_athlon_alpha102
2032fsubr %st(0),%st(2)
2033fxch %st(3)
2034fstpl -112(%edx)
2035fldl 40(%esp)
2036fmull -48(%edx)
2037fldl 48(%esp)
2038fmull -56(%edx)
2039faddp %st(0),%st(1)
2040fldl -64(%edx)
2041fmul %st(0),%st(0)
2042faddp %st(0),%st(1)
2043fmull crypto_scalarmult_curve25519_athlon_scale
2044fldl 0(%esp)
2045fmull -88(%edx)
2046faddp %st(0),%st(1)
2047fldl 8(%esp)
2048fmull -96(%edx)
2049faddp %st(0),%st(1)
2050fldl -104(%edx)
2051fmul %st(0),%st(0)
2052faddp %st(0),%st(1)
2053faddp %st(0),%st(3)
2054fldl crypto_scalarmult_curve25519_athlon_alpha128
2055fadd %st(3),%st(0)
2056fsubl crypto_scalarmult_curve25519_athlon_alpha128
2057fsubr %st(0),%st(3)
2058fxch %st(1)
2059fstpl -104(%edx)
2060fldl 48(%esp)
2061fldl -48(%edx)
2062fmul %st(0),%st(1)
2063fmul %st(5),%st(0)
2064fxch %st(5)
2065fmull -56(%edx)
2066faddp %st(0),%st(1)
2067fmull crypto_scalarmult_curve25519_athlon_scale
2068fldl 0(%esp)
2069fmull -80(%edx)
2070faddp %st(0),%st(1)
2071fldl 8(%esp)
2072fmull -88(%edx)
2073faddp %st(0),%st(1)
2074fldl 16(%esp)
2075fmull -96(%edx)
2076faddp %st(0),%st(1)
2077faddp %st(0),%st(1)
2078fldl crypto_scalarmult_curve25519_athlon_alpha153
2079fadd %st(1),%st(0)
2080fsubl crypto_scalarmult_curve25519_athlon_alpha153
2081fsubr %st(0),%st(1)
2082fxch %st(2)
2083fstpl 40(%edx)
2084fldl -56(%edx)
2085fmul %st(0),%st(0)
2086faddp %st(0),%st(4)
2087fxch %st(3)
2088fmull crypto_scalarmult_curve25519_athlon_scale
2089fldl 0(%esp)
2090fmull -72(%edx)
2091faddp %st(0),%st(1)
2092fldl 8(%esp)
2093fmull -80(%edx)
2094faddp %st(0),%st(1)
2095fldl 16(%esp)
2096fmull -88(%edx)
2097faddp %st(0),%st(1)
2098fldl -96(%edx)
2099fmul %st(0),%st(0)
2100faddp %st(0),%st(1)
2101faddp %st(0),%st(1)
2102fldl crypto_scalarmult_curve25519_athlon_alpha179
2103fadd %st(1),%st(0)
2104fsubl crypto_scalarmult_curve25519_athlon_alpha179
2105fsubr %st(0),%st(1)
2106fldl -56(%edx)
2107fadd %st(0),%st(0)
2108fmull -48(%edx)
2109fmull crypto_scalarmult_curve25519_athlon_scale
2110fldl 0(%esp)
2111fmull -64(%edx)
2112faddp %st(0),%st(1)
2113fldl 8(%esp)
2114fmull -72(%edx)
2115faddp %st(0),%st(1)
2116fldl 16(%esp)
2117fmull -80(%edx)
2118faddp %st(0),%st(1)
2119fldl 24(%esp)
2120fmull -88(%edx)
2121faddp %st(0),%st(1)
2122faddp %st(0),%st(1)
2123fldl crypto_scalarmult_curve25519_athlon_alpha204
2124fadd %st(1),%st(0)
2125fsubl crypto_scalarmult_curve25519_athlon_alpha204
2126fsubr %st(0),%st(1)
2127fldl 48(%edx)
2128faddp %st(0),%st(1)
2129fldl crypto_scalarmult_curve25519_athlon_alpha230
2130fadd %st(1),%st(0)
2131fldl 56(%edx)
2132fxch %st(1)
2133fsubl crypto_scalarmult_curve25519_athlon_alpha230
2134fsubr %st(0),%st(2)
2135faddp %st(0),%st(1)
2136fxch %st(4)
2137fstpl -96(%edx)
2138fxch %st(4)
2139fstpl -88(%edx)
2140fxch %st(1)
2141fstpl -80(%edx)
2142fstpl -72(%edx)
2143fxch %st(1)
2144fstpl -64(%edx)
2145fstpl -56(%edx)
2146fldl 32(%edx)
2147fmul %st(0),%st(0)
2148fldl -40(%edx)
2149fadd %st(0),%st(0)
2150fldl -32(%edx)
2151fadd %st(0),%st(0)
2152fldl -24(%edx)
2153fadd %st(0),%st(0)
2154fldl 16(%edx)
2155fxch %st(4)
2156fmull crypto_scalarmult_curve25519_athlon_scale
2157fldl 32(%edx)
2158fmul %st(4),%st(0)
2159fldl 24(%edx)
2160fmul %st(4),%st(0)
2161faddp %st(0),%st(1)
2162fxch %st(4)
2163fstl 0(%esp)
2164fxch %st(3)
2165fstl 8(%esp)
2166fxch %st(3)
2167fmull 24(%edx)
2168faddp %st(0),%st(1)
2169fldl 8(%edx)
2170fxch %st(5)
2171fmul %st(0),%st(3)
2172fxch %st(3)
2173faddp %st(0),%st(1)
2174fxch %st(2)
2175fadd %st(0),%st(0)
2176fldl 16(%edx)
2177fmul %st(2),%st(0)
2178faddp %st(0),%st(4)
2179fxch %st(1)
2180fstl 16(%esp)
2181fldl 0(%edx)
2182fxch %st(5)
2183fmul %st(0),%st(1)
2184fxch %st(1)
2185faddp %st(0),%st(3)
2186fadd %st(0),%st(0)
2187fstpl 48(%esp)
2188fldl -16(%edx)
2189fadd %st(0),%st(0)
2190fstl 24(%esp)
2191fldl 8(%edx)
2192fmul %st(1),%st(0)
2193faddp %st(0),%st(4)
2194fmul %st(4),%st(0)
2195faddp %st(0),%st(2)
2196fxch %st(3)
2197fadd %st(0),%st(0)
2198fstpl 40(%esp)
2199fldl -8(%edx)
2200fmul %st(0),%st(0)
2201faddp %st(0),%st(1)
2202fldl crypto_scalarmult_curve25519_athlon_alpha230
2203fadd %st(1),%st(0)
2204fsubl crypto_scalarmult_curve25519_athlon_alpha230
2205fsubr %st(0),%st(1)
2206fldl 8(%esp)
2207fldl 32(%edx)
2208fmul %st(0),%st(1)
2209fldl 16(%esp)
2210fmul %st(0),%st(1)
2211fldl 24(%edx)
2212fmul %st(0),%st(1)
2213fxch %st(1)
2214faddp %st(0),%st(3)
2215fldl 24(%esp)
2216fmul %st(0),%st(1)
2217fxch %st(1)
2218faddp %st(0),%st(2)
2219fldl -8(%edx)
2220fadd %st(0),%st(0)
2221fstl 32(%esp)
2222fmull 0(%edx)
2223faddp %st(0),%st(6)
2224fxch %st(3)
2225faddp %st(0),%st(5)
2226fldl crypto_scalarmult_curve25519_athlon_alpha255
2227fadd %st(5),%st(0)
2228fsubl crypto_scalarmult_curve25519_athlon_alpha255
2229fsubr %st(0),%st(5)
2230fldl 16(%edx)
2231fmul %st(0),%st(4)
2232fxch %st(4)
2233faddp %st(0),%st(3)
2234fldl 32(%esp)
2235fmul %st(0),%st(4)
2236fxch %st(4)
2237faddp %st(0),%st(2)
2238fldl 8(%edx)
2239fmul %st(0),%st(4)
2240fxch %st(4)
2241faddp %st(0),%st(3)
2242fxch %st(3)
2243fmull 40(%esp)
2244faddp %st(0),%st(1)
2245fxch %st(3)
2246fstpl -48(%edx)
2247fldl 0(%edx)
2248fmul %st(0),%st(0)
2249faddp %st(0),%st(1)
2250fxch %st(2)
2251fmull crypto_scalarmult_curve25519_athlon_scale
2252fxch %st(3)
2253fstpl 48(%edx)
2254faddp %st(0),%st(1)
2255fmull crypto_scalarmult_curve25519_athlon_scale
2256fldl 24(%esp)
2257fmull 32(%edx)
2258fldl -40(%edx)
2259fmul %st(0),%st(0)
2260faddp %st(0),%st(2)
2261fldl 32(%esp)
2262fmull 24(%edx)
2263faddp %st(0),%st(1)
2264fldl 0(%esp)
2265fmull -32(%edx)
2266faddp %st(0),%st(3)
2267fldl 40(%esp)
2268fmull 16(%edx)
2269faddp %st(0),%st(1)
2270fldl crypto_scalarmult_curve25519_athlon_alpha26
2271fadd %st(2),%st(0)
2272fsubl crypto_scalarmult_curve25519_athlon_alpha26
2273fsubr %st(0),%st(2)
2274faddp %st(0),%st(3)
2275fldl crypto_scalarmult_curve25519_athlon_alpha51
2276fadd %st(3),%st(0)
2277fsubl crypto_scalarmult_curve25519_athlon_alpha51
2278fsubr %st(0),%st(3)
2279fldl 8(%edx)
2280fmul %st(0),%st(0)
2281faddp %st(0),%st(2)
2282fxch %st(1)
2283fmull crypto_scalarmult_curve25519_athlon_scale
2284fldl 0(%esp)
2285fmull -24(%edx)
2286faddp %st(0),%st(1)
2287fldl -32(%edx)
2288fmul %st(0),%st(0)
2289faddp %st(0),%st(1)
2290faddp %st(0),%st(1)
2291fldl crypto_scalarmult_curve25519_athlon_alpha77
2292fadd %st(1),%st(0)
2293fsubl crypto_scalarmult_curve25519_athlon_alpha77
2294fsubr %st(0),%st(1)
2295fxch %st(2)
2296fstpl 56(%ecx)
2297fldl 32(%esp)
2298fmull 32(%edx)
2299fldl 40(%esp)
2300fmull 24(%edx)
2301faddp %st(0),%st(1)
2302fldl 48(%esp)
2303fmull 16(%edx)
2304faddp %st(0),%st(1)
2305fmull crypto_scalarmult_curve25519_athlon_scale
2306fldl 0(%esp)
2307fmull -16(%edx)
2308faddp %st(0),%st(1)
2309fldl 8(%esp)
2310fmull -24(%edx)
2311faddp %st(0),%st(1)
2312faddp %st(0),%st(2)
2313fldl crypto_scalarmult_curve25519_athlon_alpha102
2314fadd %st(2),%st(0)
2315fsubl crypto_scalarmult_curve25519_athlon_alpha102
2316fsubr %st(0),%st(2)
2317fxch %st(3)
2318fstpl 64(%ecx)
2319fldl 40(%esp)
2320fmull 32(%edx)
2321fldl 48(%esp)
2322fmull 24(%edx)
2323faddp %st(0),%st(1)
2324fldl 16(%edx)
2325fmul %st(0),%st(0)
2326faddp %st(0),%st(1)
2327fmull crypto_scalarmult_curve25519_athlon_scale
2328fldl 0(%esp)
2329fmull -8(%edx)
2330faddp %st(0),%st(1)
2331fldl 8(%esp)
2332fmull -16(%edx)
2333faddp %st(0),%st(1)
2334fldl -24(%edx)
2335fmul %st(0),%st(0)
2336faddp %st(0),%st(1)
2337faddp %st(0),%st(3)
2338fldl crypto_scalarmult_curve25519_athlon_alpha128
2339fadd %st(3),%st(0)
2340fsubl crypto_scalarmult_curve25519_athlon_alpha128
2341fsubr %st(0),%st(3)
2342fxch %st(1)
2343fstpl 72(%ecx)
2344fldl 48(%esp)
2345fldl 32(%edx)
2346fmul %st(0),%st(1)
2347fmul %st(5),%st(0)
2348fxch %st(5)
2349fmull 24(%edx)
2350faddp %st(0),%st(1)
2351fmull crypto_scalarmult_curve25519_athlon_scale
2352fldl 0(%esp)
2353fmull 0(%edx)
2354faddp %st(0),%st(1)
2355fldl 8(%esp)
2356fmull -8(%edx)
2357faddp %st(0),%st(1)
2358fldl 16(%esp)
2359fmull -16(%edx)
2360faddp %st(0),%st(1)
2361faddp %st(0),%st(1)
2362fldl crypto_scalarmult_curve25519_athlon_alpha153
2363fadd %st(1),%st(0)
2364fsubl crypto_scalarmult_curve25519_athlon_alpha153
2365fsubr %st(0),%st(1)
2366fxch %st(2)
2367fstpl 80(%ecx)
2368fldl 24(%edx)
2369fmul %st(0),%st(0)
2370faddp %st(0),%st(4)
2371fxch %st(3)
2372fmull crypto_scalarmult_curve25519_athlon_scale
2373fldl 0(%esp)
2374fmull 8(%edx)
2375faddp %st(0),%st(1)
2376fldl 8(%esp)
2377fmull 0(%edx)
2378faddp %st(0),%st(1)
2379fldl 16(%esp)
2380fmull -8(%edx)
2381faddp %st(0),%st(1)
2382fldl -16(%edx)
2383fmul %st(0),%st(0)
2384faddp %st(0),%st(1)
2385faddp %st(0),%st(1)
2386fldl crypto_scalarmult_curve25519_athlon_alpha179
2387fadd %st(1),%st(0)
2388fsubl crypto_scalarmult_curve25519_athlon_alpha179
2389fsubr %st(0),%st(1)
2390fldl 24(%edx)
2391fadd %st(0),%st(0)
2392fmull 32(%edx)
2393fmull crypto_scalarmult_curve25519_athlon_scale
2394fldl 0(%esp)
2395fmull 16(%edx)
2396faddp %st(0),%st(1)
2397fldl 8(%esp)
2398fmull 8(%edx)
2399faddp %st(0),%st(1)
2400fldl 16(%esp)
2401fmull 0(%edx)
2402faddp %st(0),%st(1)
2403fldl 24(%esp)
2404fmull -8(%edx)
2405faddp %st(0),%st(1)
2406faddp %st(0),%st(1)
2407fldl crypto_scalarmult_curve25519_athlon_alpha204
2408fadd %st(1),%st(0)
2409fsubl crypto_scalarmult_curve25519_athlon_alpha204
2410fsubr %st(0),%st(1)
2411fldl -48(%edx)
2412faddp %st(0),%st(1)
2413fldl crypto_scalarmult_curve25519_athlon_alpha230
2414fadd %st(1),%st(0)
2415fldl 48(%edx)
2416fxch %st(1)
2417fsubl crypto_scalarmult_curve25519_athlon_alpha230
2418fsubr %st(0),%st(2)
2419faddp %st(0),%st(1)
2420fxch %st(4)
2421fstpl 88(%ecx)
2422fxch %st(4)
2423fstpl 96(%ecx)
2424fxch %st(1)
2425fstpl 104(%ecx)
2426fstpl 112(%ecx)
2427fxch %st(1)
2428fstpl 120(%ecx)
2429fstpl 128(%ecx)
2430fldl 32(%ecx)
2431fmull crypto_scalarmult_curve25519_athlon_121665
2432fldl crypto_scalarmult_curve25519_athlon_alpha230
2433fadd %st(1),%st(0)
2434fsubl crypto_scalarmult_curve25519_athlon_alpha230
2435fldl 40(%ecx)
2436fmull crypto_scalarmult_curve25519_athlon_121665
2437fadd %st(1),%st(0)
2438fxch %st(1)
2439fsubrp %st(0),%st(2)
2440fxch %st(1)
2441fstpl 0(%esp)
2442fldl crypto_scalarmult_curve25519_athlon_alpha255
2443fadd %st(1),%st(0)
2444fsubl crypto_scalarmult_curve25519_athlon_alpha255
2445fsubr %st(0),%st(1)
2446fmull crypto_scalarmult_curve25519_athlon_scale
2447fxch %st(1)
2448fstpl 8(%esp)
2449fldl -32(%ecx)
2450fmull crypto_scalarmult_curve25519_athlon_121665
2451faddp %st(0),%st(1)
2452fldl crypto_scalarmult_curve25519_athlon_alpha26
2453fadd %st(1),%st(0)
2454fsubl crypto_scalarmult_curve25519_athlon_alpha26
2455fldl -24(%ecx)
2456fmull crypto_scalarmult_curve25519_athlon_121665
2457fadd %st(1),%st(0)
2458fxch %st(1)
2459fsubrp %st(0),%st(2)
2460fxch %st(1)
2461fstpl -48(%edx)
2462fldl crypto_scalarmult_curve25519_athlon_alpha51
2463fadd %st(1),%st(0)
2464fsubl crypto_scalarmult_curve25519_athlon_alpha51
2465fldl -16(%ecx)
2466fmull crypto_scalarmult_curve25519_athlon_121665
2467fadd %st(1),%st(0)
2468fxch %st(1)
2469fsubrp %st(0),%st(2)
2470fxch %st(1)
2471fstpl -40(%edx)
2472fldl crypto_scalarmult_curve25519_athlon_alpha77
2473fadd %st(1),%st(0)
2474fsubl crypto_scalarmult_curve25519_athlon_alpha77
2475fldl -8(%ecx)
2476fmull crypto_scalarmult_curve25519_athlon_121665
2477fadd %st(1),%st(0)
2478fxch %st(1)
2479fsubrp %st(0),%st(2)
2480fxch %st(1)
2481fstpl -32(%edx)
2482fldl crypto_scalarmult_curve25519_athlon_alpha102
2483fadd %st(1),%st(0)
2484fsubl crypto_scalarmult_curve25519_athlon_alpha102
2485fldl 0(%ecx)
2486fmull crypto_scalarmult_curve25519_athlon_121665
2487fadd %st(1),%st(0)
2488fxch %st(1)
2489fsubrp %st(0),%st(2)
2490fxch %st(1)
2491fstpl -24(%edx)
2492fldl crypto_scalarmult_curve25519_athlon_alpha128
2493fadd %st(1),%st(0)
2494fsubl crypto_scalarmult_curve25519_athlon_alpha128
2495fldl 8(%ecx)
2496fmull crypto_scalarmult_curve25519_athlon_121665
2497fadd %st(1),%st(0)
2498fxch %st(1)
2499fsubrp %st(0),%st(2)
2500fxch %st(1)
2501fstpl -16(%edx)
2502fldl crypto_scalarmult_curve25519_athlon_alpha153
2503fadd %st(1),%st(0)
2504fsubl crypto_scalarmult_curve25519_athlon_alpha153
2505fldl 16(%ecx)
2506fmull crypto_scalarmult_curve25519_athlon_121665
2507fadd %st(1),%st(0)
2508fxch %st(1)
2509fsubrp %st(0),%st(2)
2510fxch %st(1)
2511fstpl -8(%edx)
2512fldl crypto_scalarmult_curve25519_athlon_alpha179
2513fadd %st(1),%st(0)
2514fsubl crypto_scalarmult_curve25519_athlon_alpha179
2515fldl 24(%ecx)
2516fmull crypto_scalarmult_curve25519_athlon_121665
2517fadd %st(1),%st(0)
2518fxch %st(1)
2519fsubrp %st(0),%st(2)
2520fxch %st(1)
2521fstpl 0(%edx)
2522fldl crypto_scalarmult_curve25519_athlon_alpha204
2523fadd %st(1),%st(0)
2524fsubl crypto_scalarmult_curve25519_athlon_alpha204
2525fldl 0(%esp)
2526fadd %st(1),%st(0)
2527fxch %st(1)
2528fsubrp %st(0),%st(2)
2529fxch %st(1)
2530fstpl 8(%edx)
2531fldl crypto_scalarmult_curve25519_athlon_alpha230
2532fadd %st(1),%st(0)
2533fsubl crypto_scalarmult_curve25519_athlon_alpha230
2534fldl 8(%esp)
2535fadd %st(1),%st(0)
2536fxch %st(1)
2537fsubrp %st(0),%st(2)
2538fxch %st(1)
2539fstpl 16(%edx)
2540fstpl 48(%ecx)
2541fldl -120(%ecx)
2542fmull -40(%ecx)
2543fmull crypto_scalarmult_curve25519_athlon_scale
2544fldl 64(%edx)
2545fmull -48(%ecx)
2546faddp %st(0),%st(1)
2547fldl 72(%edx)
2548fmull -56(%ecx)
2549faddp %st(0),%st(1)
2550fldl 64(%edx)
2551fmull -40(%ecx)
2552fldl 80(%edx)
2553fmull -64(%ecx)
2554faddp %st(0),%st(2)
2555fldl 72(%edx)
2556fmull -48(%ecx)
2557faddp %st(0),%st(1)
2558fldl 88(%edx)
2559fmull -72(%ecx)
2560faddp %st(0),%st(2)
2561fldl 80(%edx)
2562fmull -56(%ecx)
2563faddp %st(0),%st(1)
2564fldl 96(%edx)
2565fmull -80(%ecx)
2566faddp %st(0),%st(2)
2567fldl 88(%edx)
2568fmull -64(%ecx)
2569faddp %st(0),%st(1)
2570fldl 72(%edx)
2571fmull -40(%ecx)
2572fldl 104(%edx)
2573fmull -88(%ecx)
2574faddp %st(0),%st(3)
2575fldl 96(%edx)
2576fmull -72(%ecx)
2577faddp %st(0),%st(2)
2578fldl 80(%edx)
2579fmull -48(%ecx)
2580faddp %st(0),%st(1)
2581fldl 112(%edx)
2582fmull -96(%ecx)
2583faddp %st(0),%st(3)
2584fldl 104(%edx)
2585fmull -80(%ecx)
2586faddp %st(0),%st(2)
2587fldl 88(%edx)
2588fmull -56(%ecx)
2589faddp %st(0),%st(1)
2590fldl 120(%edx)
2591fmull -104(%ecx)
2592faddp %st(0),%st(3)
2593fldl 112(%edx)
2594fmull -88(%ecx)
2595faddp %st(0),%st(2)
2596fldl 96(%edx)
2597fmull -64(%ecx)
2598faddp %st(0),%st(1)
2599fldl -128(%ecx)
2600fmull -112(%ecx)
2601faddp %st(0),%st(3)
2602fldl 120(%edx)
2603fmull -96(%ecx)
2604faddp %st(0),%st(2)
2605fldl 104(%edx)
2606fmull -72(%ecx)
2607faddp %st(0),%st(1)
2608fldl 80(%edx)
2609fmull -40(%ecx)
2610fldl 112(%edx)
2611fmull -80(%ecx)
2612faddp %st(0),%st(2)
2613fldl -128(%ecx)
2614fmull -104(%ecx)
2615faddp %st(0),%st(3)
2616fldl crypto_scalarmult_curve25519_athlon_alpha230
2617fadd %st(4),%st(0)
2618fldl 88(%edx)
2619fmull -48(%ecx)
2620faddp %st(0),%st(2)
2621fldl 120(%edx)
2622fmull -88(%ecx)
2623faddp %st(0),%st(3)
2624fldl -120(%ecx)
2625fmull -112(%ecx)
2626faddp %st(0),%st(4)
2627fsubl crypto_scalarmult_curve25519_athlon_alpha230
2628fldl 96(%edx)
2629fmull -56(%ecx)
2630faddp %st(0),%st(2)
2631fldl 88(%edx)
2632fmull -40(%ecx)
2633fldl -128(%ecx)
2634fmull -96(%ecx)
2635faddp %st(0),%st(4)
2636fxch %st(1)
2637fadd %st(0),%st(4)
2638fldl 104(%edx)
2639fmull -64(%ecx)
2640faddp %st(0),%st(3)
2641fldl 96(%edx)
2642fmull -48(%ecx)
2643faddp %st(0),%st(2)
2644fsubrp %st(0),%st(5)
2645fldl crypto_scalarmult_curve25519_athlon_alpha255
2646fadd %st(4),%st(0)
2647fldl 112(%edx)
2648fmull -72(%ecx)
2649faddp %st(0),%st(3)
2650fldl 104(%edx)
2651fmull -56(%ecx)
2652faddp %st(0),%st(2)
2653fldl -120(%ecx)
2654fmull -104(%ecx)
2655faddp %st(0),%st(4)
2656fsubl crypto_scalarmult_curve25519_athlon_alpha255
2657fldl 120(%edx)
2658fmull -80(%ecx)
2659faddp %st(0),%st(3)
2660fldl 96(%edx)
2661fmull -40(%ecx)
2662fldl 112(%edx)
2663fmull -64(%ecx)
2664faddp %st(0),%st(3)
2665fldl -128(%ecx)
2666fmull -88(%ecx)
2667faddp %st(0),%st(4)
2668fxch %st(1)
2669fadd %st(0),%st(4)
2670fsubrp %st(0),%st(5)
2671fxch %st(5)
2672fstpl 0(%esp)
2673fldl 104(%edx)
2674fmull -48(%ecx)
2675faddp %st(0),%st(5)
2676fldl 120(%edx)
2677fmull -72(%ecx)
2678faddp %st(0),%st(1)
2679fldl -120(%ecx)
2680fmull -96(%ecx)
2681faddp %st(0),%st(2)
2682fxch %st(2)
2683fmull crypto_scalarmult_curve25519_athlon_scale
2684fldl 112(%edx)
2685fmull -56(%ecx)
2686faddp %st(0),%st(5)
2687fldl -128(%ecx)
2688fmull -80(%ecx)
2689faddp %st(0),%st(3)
2690fxch %st(1)
2691fmull crypto_scalarmult_curve25519_athlon_scale
2692fldl 64(%edx)
2693fmull -112(%ecx)
2694faddp %st(0),%st(2)
2695fxch %st(3)
2696fstpl 8(%esp)
2697fldl 104(%edx)
2698fmull -40(%ecx)
2699fldl 120(%edx)
2700fmull -64(%ecx)
2701faddp %st(0),%st(5)
2702fldl -120(%ecx)
2703fmull -88(%ecx)
2704faddp %st(0),%st(3)
2705fldl 64(%edx)
2706fmull -104(%ecx)
2707faddp %st(0),%st(4)
2708fldl crypto_scalarmult_curve25519_athlon_alpha26
2709fadd %st(2),%st(0)
2710fldl 112(%edx)
2711fmull -48(%ecx)
2712faddp %st(0),%st(2)
2713fldl -128(%ecx)
2714fmull -72(%ecx)
2715faddp %st(0),%st(6)
2716fxch %st(3)
2717fmull crypto_scalarmult_curve25519_athlon_scale
2718fldl 72(%edx)
2719fmull -112(%ecx)
2720faddp %st(0),%st(5)
2721fxch %st(3)
2722fsubl crypto_scalarmult_curve25519_athlon_alpha26
2723fldl 120(%edx)
2724fmull -56(%ecx)
2725faddp %st(0),%st(2)
2726fldl -120(%ecx)
2727fmull -80(%ecx)
2728faddp %st(0),%st(6)
2729fldl 64(%edx)
2730fmull -96(%ecx)
2731faddp %st(0),%st(4)
2732fadd %st(0),%st(4)
2733fsubrp %st(0),%st(2)
2734fldl 112(%edx)
2735fmull -40(%ecx)
2736fldl -128(%ecx)
2737fmull -64(%ecx)
2738faddp %st(0),%st(2)
2739fxch %st(5)
2740fmull crypto_scalarmult_curve25519_athlon_scale
2741fldl 72(%edx)
2742fmull -104(%ecx)
2743faddp %st(0),%st(4)
2744fldl crypto_scalarmult_curve25519_athlon_alpha51
2745fadd %st(5),%st(0)
2746fldl 120(%edx)
2747fmull -48(%ecx)
2748faddp %st(0),%st(7)
2749fldl -120(%ecx)
2750fmull -72(%ecx)
2751faddp %st(0),%st(3)
2752fldl 64(%edx)
2753fmull -88(%ecx)
2754faddp %st(0),%st(2)
2755fldl 80(%edx)
2756fmull -112(%ecx)
2757faddp %st(0),%st(5)
2758fsubl crypto_scalarmult_curve25519_athlon_alpha51
2759fxch %st(3)
2760fstpl 16(%esp)
2761fldl -128(%ecx)
2762fmull -56(%ecx)
2763faddp %st(0),%st(6)
2764fxch %st(1)
2765fmull crypto_scalarmult_curve25519_athlon_scale
2766fldl 72(%edx)
2767fmull -96(%ecx)
2768faddp %st(0),%st(2)
2769fxch %st(2)
2770fadd %st(0),%st(3)
2771fsubrp %st(0),%st(4)
2772fldl 120(%edx)
2773fmull -40(%ecx)
2774fldl -120(%ecx)
2775fmull -64(%ecx)
2776faddp %st(0),%st(6)
2777fldl 64(%edx)
2778fmull -80(%ecx)
2779faddp %st(0),%st(3)
2780fldl 80(%edx)
2781fmull -104(%ecx)
2782faddp %st(0),%st(2)
2783fldl crypto_scalarmult_curve25519_athlon_alpha77
2784fadd %st(4),%st(0)
2785fldl -128(%ecx)
2786fmull -48(%ecx)
2787faddp %st(0),%st(2)
2788fxch %st(6)
2789fmull crypto_scalarmult_curve25519_athlon_scale
2790fldl 72(%edx)
2791fmull -88(%ecx)
2792faddp %st(0),%st(4)
2793fldl 88(%edx)
2794fmull -112(%ecx)
2795faddp %st(0),%st(3)
2796fxch %st(6)
2797fsubl crypto_scalarmult_curve25519_athlon_alpha77
2798fxch %st(5)
2799fstpl 24(%esp)
2800fldl -120(%ecx)
2801fmull -56(%ecx)
2802faddp %st(0),%st(1)
2803fldl 64(%edx)
2804fmull -72(%ecx)
2805faddp %st(0),%st(6)
2806fldl 80(%edx)
2807fmull -96(%ecx)
2808faddp %st(0),%st(3)
2809fxch %st(4)
2810fadd %st(0),%st(1)
2811fsubrp %st(0),%st(3)
2812fldl -128(%ecx)
2813fmull -40(%ecx)
2814fxch %st(4)
2815fmull crypto_scalarmult_curve25519_athlon_scale
2816fldl 72(%edx)
2817fmull -80(%ecx)
2818faddp %st(0),%st(6)
2819fldl 88(%edx)
2820fmull -104(%ecx)
2821faddp %st(0),%st(3)
2822fldl crypto_scalarmult_curve25519_athlon_alpha102
2823fadd %st(2),%st(0)
2824fldl -120(%ecx)
2825fmull -48(%ecx)
2826faddp %st(0),%st(6)
2827fldl 64(%edx)
2828fmull -64(%ecx)
2829faddp %st(0),%st(2)
2830fldl 80(%edx)
2831fmull -88(%ecx)
2832faddp %st(0),%st(7)
2833fldl 96(%edx)
2834fmull -112(%ecx)
2835faddp %st(0),%st(4)
2836fsubl crypto_scalarmult_curve25519_athlon_alpha102
2837fxch %st(4)
2838fstpl 32(%esp)
2839fxch %st(4)
2840fmull crypto_scalarmult_curve25519_athlon_scale
2841fldl 72(%edx)
2842fmull -72(%ecx)
2843faddp %st(0),%st(5)
2844fldl 88(%edx)
2845fmull -96(%ecx)
2846faddp %st(0),%st(6)
2847fxch %st(3)
2848fadd %st(0),%st(2)
2849fsubrp %st(0),%st(1)
2850fldl 64(%edx)
2851fmull -56(%ecx)
2852faddp %st(0),%st(3)
2853fldl 80(%edx)
2854fmull -80(%ecx)
2855faddp %st(0),%st(4)
2856fldl 96(%edx)
2857fmull -104(%ecx)
2858faddp %st(0),%st(5)
2859fldl crypto_scalarmult_curve25519_athlon_alpha128
2860fadd %st(2),%st(0)
2861fldl 72(%edx)
2862fmull -64(%ecx)
2863faddp %st(0),%st(4)
2864fldl 88(%edx)
2865fmull -88(%ecx)
2866faddp %st(0),%st(5)
2867fldl 104(%edx)
2868fmull -112(%ecx)
2869faddp %st(0),%st(6)
2870fsubl crypto_scalarmult_curve25519_athlon_alpha128
2871fxch %st(1)
2872fstpl 40(%esp)
2873fldl 80(%edx)
2874fmull -72(%ecx)
2875faddp %st(0),%st(3)
2876fldl 96(%edx)
2877fmull -96(%ecx)
2878faddp %st(0),%st(4)
2879fadd %st(0),%st(4)
2880fsubrp %st(0),%st(1)
2881fstpl 48(%esp)
2882fldl 88(%edx)
2883fmull -80(%ecx)
2884faddp %st(0),%st(1)
2885fldl 104(%edx)
2886fmull -104(%ecx)
2887faddp %st(0),%st(2)
2888fldl crypto_scalarmult_curve25519_athlon_alpha153
2889fadd %st(3),%st(0)
2890fldl 96(%edx)
2891fmull -88(%ecx)
2892faddp %st(0),%st(2)
2893fldl 112(%edx)
2894fmull -112(%ecx)
2895faddp %st(0),%st(3)
2896fsubl crypto_scalarmult_curve25519_athlon_alpha153
2897fldl 104(%edx)
2898fmull -96(%ecx)
2899faddp %st(0),%st(2)
2900fadd %st(0),%st(2)
2901fsubrp %st(0),%st(3)
2902fxch %st(2)
2903fstpl 24(%edx)
2904fldl 112(%edx)
2905fmull -104(%ecx)
2906faddp %st(0),%st(2)
2907fldl crypto_scalarmult_curve25519_athlon_alpha179
2908fadd %st(1),%st(0)
2909fldl 120(%edx)
2910fmull -112(%ecx)
2911faddp %st(0),%st(3)
2912fsubl crypto_scalarmult_curve25519_athlon_alpha179
2913fldl 0(%esp)
2914fldl 8(%esp)
2915fxch %st(2)
2916fadd %st(0),%st(4)
2917fsubrp %st(0),%st(3)
2918fldl crypto_scalarmult_curve25519_athlon_alpha204
2919fadd %st(4),%st(0)
2920fsubl crypto_scalarmult_curve25519_athlon_alpha204
2921fadd %st(0),%st(1)
2922fsubrp %st(0),%st(4)
2923fldl crypto_scalarmult_curve25519_athlon_alpha230
2924fadd %st(1),%st(0)
2925fsubl crypto_scalarmult_curve25519_athlon_alpha230
2926fsubr %st(0),%st(1)
2927faddp %st(0),%st(2)
2928fxch %st(2)
2929fstpl 32(%edx)
2930fxch %st(2)
2931fstpl 48(%edx)
2932fstpl 56(%edx)
2933fstpl -112(%ecx)
2934fldl -48(%edx)
2935faddl 64(%edx)
2936fstpl -104(%ecx)
2937fldl -40(%edx)
2938faddl 72(%edx)
2939fstpl -96(%ecx)
2940fldl -32(%edx)
2941faddl 80(%edx)
2942fstpl -88(%ecx)
2943fldl -24(%edx)
2944faddl 88(%edx)
2945fstpl -80(%ecx)
2946fldl -16(%edx)
2947faddl 96(%edx)
2948fstpl -16(%edx)
2949fldl -8(%edx)
2950faddl 104(%edx)
2951fstpl -8(%edx)
2952fldl 0(%edx)
2953faddl 112(%edx)
2954fstpl 0(%edx)
2955fldl 8(%edx)
2956faddl 120(%edx)
2957fstpl 8(%edx)
2958fldl 16(%edx)
2959faddl -128(%ecx)
2960fstpl 16(%edx)
2961fldl 48(%ecx)
2962faddl -120(%ecx)
2963fstpl 80(%edx)
2964fldl 128(%ecx)
2965fmull -128(%edx)
2966fmull crypto_scalarmult_curve25519_athlon_scale
2967fldl 56(%ecx)
2968fmull 120(%esp)
2969faddp %st(0),%st(1)
2970fldl 64(%ecx)
2971fmull 112(%esp)
2972faddp %st(0),%st(1)
2973fldl 56(%ecx)
2974fmull -128(%edx)
2975fldl 72(%ecx)
2976fmull 104(%esp)
2977faddp %st(0),%st(2)
2978fldl 64(%ecx)
2979fmull 120(%esp)
2980faddp %st(0),%st(1)
2981fldl 80(%ecx)
2982fmull 96(%esp)
2983faddp %st(0),%st(2)
2984fldl 72(%ecx)
2985fmull 112(%esp)
2986faddp %st(0),%st(1)
2987fldl 88(%ecx)
2988fmull 88(%esp)
2989faddp %st(0),%st(2)
2990fldl 80(%ecx)
2991fmull 104(%esp)
2992faddp %st(0),%st(1)
2993fldl 64(%ecx)
2994fmull -128(%edx)
2995fldl 96(%ecx)
2996fmull 80(%esp)
2997faddp %st(0),%st(3)
2998fldl 88(%ecx)
2999fmull 96(%esp)
3000faddp %st(0),%st(2)
3001fldl 72(%ecx)
3002fmull 120(%esp)
3003faddp %st(0),%st(1)
3004fldl 104(%ecx)
3005fmull 72(%esp)
3006faddp %st(0),%st(3)
3007fldl 96(%ecx)
3008fmull 88(%esp)
3009faddp %st(0),%st(2)
3010fldl 80(%ecx)
3011fmull 112(%esp)
3012faddp %st(0),%st(1)
3013fldl 112(%ecx)
3014fmull 64(%esp)
3015faddp %st(0),%st(3)
3016fldl 104(%ecx)
3017fmull 80(%esp)
3018faddp %st(0),%st(2)
3019fldl 88(%ecx)
3020fmull 104(%esp)
3021faddp %st(0),%st(1)
3022fldl 120(%ecx)
3023fmull 56(%esp)
3024faddp %st(0),%st(3)
3025fldl 112(%ecx)
3026fmull 72(%esp)
3027faddp %st(0),%st(2)
3028fldl 96(%ecx)
3029fmull 96(%esp)
3030faddp %st(0),%st(1)
3031fldl 72(%ecx)
3032fmull -128(%edx)
3033fldl 104(%ecx)
3034fmull 88(%esp)
3035faddp %st(0),%st(2)
3036fldl 120(%ecx)
3037fmull 64(%esp)
3038faddp %st(0),%st(3)
3039fldl crypto_scalarmult_curve25519_athlon_alpha230
3040fadd %st(4),%st(0)
3041fldl 80(%ecx)
3042fmull 120(%esp)
3043faddp %st(0),%st(2)
3044fldl 112(%ecx)
3045fmull 80(%esp)
3046faddp %st(0),%st(3)
3047fldl 128(%ecx)
3048fmull 56(%esp)
3049faddp %st(0),%st(4)
3050fsubl crypto_scalarmult_curve25519_athlon_alpha230
3051fldl 88(%ecx)
3052fmull 112(%esp)
3053faddp %st(0),%st(2)
3054fldl 80(%ecx)
3055fmull -128(%edx)
3056fldl 120(%ecx)
3057fmull 72(%esp)
3058faddp %st(0),%st(4)
3059fxch %st(1)
3060fadd %st(0),%st(4)
3061fldl 96(%ecx)
3062fmull 104(%esp)
3063faddp %st(0),%st(3)
3064fldl 88(%ecx)
3065fmull 120(%esp)
3066faddp %st(0),%st(2)
3067fsubrp %st(0),%st(5)
3068fldl crypto_scalarmult_curve25519_athlon_alpha255
3069fadd %st(4),%st(0)
3070fldl 104(%ecx)
3071fmull 96(%esp)
3072faddp %st(0),%st(3)
3073fldl 96(%ecx)
3074fmull 112(%esp)
3075faddp %st(0),%st(2)
3076fldl 128(%ecx)
3077fmull 64(%esp)
3078faddp %st(0),%st(4)
3079fsubl crypto_scalarmult_curve25519_athlon_alpha255
3080fldl 112(%ecx)
3081fmull 88(%esp)
3082faddp %st(0),%st(3)
3083fldl 88(%ecx)
3084fmull -128(%edx)
3085fldl 104(%ecx)
3086fmull 104(%esp)
3087faddp %st(0),%st(3)
3088fldl 120(%ecx)
3089fmull 80(%esp)
3090faddp %st(0),%st(4)
3091fxch %st(1)
3092fadd %st(0),%st(4)
3093fsubrp %st(0),%st(5)
3094fxch %st(5)
3095fstpl 0(%esp)
3096fldl 96(%ecx)
3097fmull 120(%esp)
3098faddp %st(0),%st(5)
3099fldl 112(%ecx)
3100fmull 96(%esp)
3101faddp %st(0),%st(1)
3102fldl 128(%ecx)
3103fmull 72(%esp)
3104faddp %st(0),%st(2)
3105fxch %st(2)
3106fmull crypto_scalarmult_curve25519_athlon_scale
3107fldl 104(%ecx)
3108fmull 112(%esp)
3109faddp %st(0),%st(5)
3110fldl 120(%ecx)
3111fmull 88(%esp)
3112faddp %st(0),%st(3)
3113fxch %st(1)
3114fmull crypto_scalarmult_curve25519_athlon_scale
3115fldl 56(%ecx)
3116fmull 56(%esp)
3117faddp %st(0),%st(2)
3118fxch %st(3)
3119fstpl 8(%esp)
3120fldl 96(%ecx)
3121fmull -128(%edx)
3122fldl 112(%ecx)
3123fmull 104(%esp)
3124faddp %st(0),%st(5)
3125fldl 128(%ecx)
3126fmull 80(%esp)
3127faddp %st(0),%st(3)
3128fldl 56(%ecx)
3129fmull 64(%esp)
3130faddp %st(0),%st(4)
3131fldl crypto_scalarmult_curve25519_athlon_alpha26
3132fadd %st(2),%st(0)
3133fldl 104(%ecx)
3134fmull 120(%esp)
3135faddp %st(0),%st(2)
3136fldl 120(%ecx)
3137fmull 96(%esp)
3138faddp %st(0),%st(6)
3139fxch %st(3)
3140fmull crypto_scalarmult_curve25519_athlon_scale
3141fldl 64(%ecx)
3142fmull 56(%esp)
3143faddp %st(0),%st(5)
3144fxch %st(3)
3145fsubl crypto_scalarmult_curve25519_athlon_alpha26
3146fldl 112(%ecx)
3147fmull 112(%esp)
3148faddp %st(0),%st(2)
3149fldl 128(%ecx)
3150fmull 88(%esp)
3151faddp %st(0),%st(6)
3152fldl 56(%ecx)
3153fmull 72(%esp)
3154faddp %st(0),%st(4)
3155fadd %st(0),%st(4)
3156fsubrp %st(0),%st(2)
3157fldl 104(%ecx)
3158fmull -128(%edx)
3159fldl 120(%ecx)
3160fmull 104(%esp)
3161faddp %st(0),%st(2)
3162fxch %st(5)
3163fmull crypto_scalarmult_curve25519_athlon_scale
3164fldl 64(%ecx)
3165fmull 64(%esp)
3166faddp %st(0),%st(4)
3167fldl crypto_scalarmult_curve25519_athlon_alpha51
3168fadd %st(5),%st(0)
3169fldl 112(%ecx)
3170fmull 120(%esp)
3171faddp %st(0),%st(7)
3172fldl 128(%ecx)
3173fmull 96(%esp)
3174faddp %st(0),%st(3)
3175fldl 56(%ecx)
3176fmull 80(%esp)
3177faddp %st(0),%st(2)
3178fldl 72(%ecx)
3179fmull 56(%esp)
3180faddp %st(0),%st(5)
3181fsubl crypto_scalarmult_curve25519_athlon_alpha51
3182fxch %st(3)
3183fstpl -48(%edx)
3184fldl 120(%ecx)
3185fmull 112(%esp)
3186faddp %st(0),%st(6)
3187fxch %st(1)
3188fmull crypto_scalarmult_curve25519_athlon_scale
3189fldl 64(%ecx)
3190fmull 72(%esp)
3191faddp %st(0),%st(2)
3192fxch %st(2)
3193fadd %st(0),%st(3)
3194fsubrp %st(0),%st(4)
3195fldl 112(%ecx)
3196fmull -128(%edx)
3197fldl 128(%ecx)
3198fmull 104(%esp)
3199faddp %st(0),%st(6)
3200fldl 56(%ecx)
3201fmull 88(%esp)
3202faddp %st(0),%st(3)
3203fldl 72(%ecx)
3204fmull 64(%esp)
3205faddp %st(0),%st(2)
3206fldl crypto_scalarmult_curve25519_athlon_alpha77
3207fadd %st(4),%st(0)
3208fldl 120(%ecx)
3209fmull 120(%esp)
3210faddp %st(0),%st(2)
3211fxch %st(6)
3212fmull crypto_scalarmult_curve25519_athlon_scale
3213fldl 64(%ecx)
3214fmull 80(%esp)
3215faddp %st(0),%st(4)
3216fldl 80(%ecx)
3217fmull 56(%esp)
3218faddp %st(0),%st(3)
3219fxch %st(6)
3220fsubl crypto_scalarmult_curve25519_athlon_alpha77
3221fxch %st(5)
3222fstpl -40(%edx)
3223fldl 128(%ecx)
3224fmull 112(%esp)
3225faddp %st(0),%st(1)
3226fldl 56(%ecx)
3227fmull 96(%esp)
3228faddp %st(0),%st(6)
3229fldl 72(%ecx)
3230fmull 72(%esp)
3231faddp %st(0),%st(3)
3232fxch %st(4)
3233fadd %st(0),%st(1)
3234fsubrp %st(0),%st(3)
3235fldl 120(%ecx)
3236fmull -128(%edx)
3237fxch %st(4)
3238fmull crypto_scalarmult_curve25519_athlon_scale
3239fldl 64(%ecx)
3240fmull 88(%esp)
3241faddp %st(0),%st(6)
3242fldl 80(%ecx)
3243fmull 64(%esp)
3244faddp %st(0),%st(3)
3245fldl crypto_scalarmult_curve25519_athlon_alpha102
3246fadd %st(2),%st(0)
3247fldl 128(%ecx)
3248fmull 120(%esp)
3249faddp %st(0),%st(6)
3250fldl 56(%ecx)
3251fmull 104(%esp)
3252faddp %st(0),%st(2)
3253fldl 72(%ecx)
3254fmull 80(%esp)
3255faddp %st(0),%st(7)
3256fldl 88(%ecx)
3257fmull 56(%esp)
3258faddp %st(0),%st(4)
3259fsubl crypto_scalarmult_curve25519_athlon_alpha102
3260fxch %st(4)
3261fstpl -32(%edx)
3262fxch %st(4)
3263fmull crypto_scalarmult_curve25519_athlon_scale
3264fldl 64(%ecx)
3265fmull 96(%esp)
3266faddp %st(0),%st(5)
3267fldl 80(%ecx)
3268fmull 72(%esp)
3269faddp %st(0),%st(6)
3270fxch %st(3)
3271fadd %st(0),%st(2)
3272fsubrp %st(0),%st(1)
3273fldl 56(%ecx)
3274fmull 112(%esp)
3275faddp %st(0),%st(3)
3276fldl 72(%ecx)
3277fmull 88(%esp)
3278faddp %st(0),%st(4)
3279fldl 88(%ecx)
3280fmull 64(%esp)
3281faddp %st(0),%st(5)
3282fldl crypto_scalarmult_curve25519_athlon_alpha128
3283fadd %st(2),%st(0)
3284fldl 64(%ecx)
3285fmull 104(%esp)
3286faddp %st(0),%st(4)
3287fldl 80(%ecx)
3288fmull 80(%esp)
3289faddp %st(0),%st(5)
3290fldl 96(%ecx)
3291fmull 56(%esp)
3292faddp %st(0),%st(6)
3293fsubl crypto_scalarmult_curve25519_athlon_alpha128
3294fxch %st(1)
3295fstpl -24(%edx)
3296fldl 72(%ecx)
3297fmull 96(%esp)
3298faddp %st(0),%st(3)
3299fldl 88(%ecx)
3300fmull 72(%esp)
3301faddp %st(0),%st(4)
3302fadd %st(0),%st(4)
3303fsubrp %st(0),%st(1)
3304fstpl 96(%edx)
3305fldl 80(%ecx)
3306fmull 88(%esp)
3307faddp %st(0),%st(1)
3308fldl 96(%ecx)
3309fmull 64(%esp)
3310faddp %st(0),%st(2)
3311fldl crypto_scalarmult_curve25519_athlon_alpha153
3312fadd %st(3),%st(0)
3313fldl 88(%ecx)
3314fmull 80(%esp)
3315faddp %st(0),%st(2)
3316fldl 104(%ecx)
3317fmull 56(%esp)
3318faddp %st(0),%st(3)
3319fsubl crypto_scalarmult_curve25519_athlon_alpha153
3320fldl 96(%ecx)
3321fmull 72(%esp)
3322faddp %st(0),%st(2)
3323fadd %st(0),%st(2)
3324fsubrp %st(0),%st(3)
3325fxch %st(2)
3326fstpl 104(%edx)
3327fldl 104(%ecx)
3328fmull 64(%esp)
3329faddp %st(0),%st(2)
3330fldl crypto_scalarmult_curve25519_athlon_alpha179
3331fadd %st(1),%st(0)
3332fldl 112(%ecx)
3333fmull 56(%esp)
3334faddp %st(0),%st(3)
3335fsubl crypto_scalarmult_curve25519_athlon_alpha179
3336fldl 0(%esp)
3337fldl 8(%esp)
3338fxch %st(2)
3339fadd %st(0),%st(4)
3340fsubrp %st(0),%st(3)
3341fldl crypto_scalarmult_curve25519_athlon_alpha204
3342fadd %st(4),%st(0)
3343fsubl crypto_scalarmult_curve25519_athlon_alpha204
3344fadd %st(0),%st(1)
3345fsubrp %st(0),%st(4)
3346fldl crypto_scalarmult_curve25519_athlon_alpha230
3347fadd %st(1),%st(0)
3348fsubl crypto_scalarmult_curve25519_athlon_alpha230
3349fsubr %st(0),%st(1)
3350faddp %st(0),%st(2)
3351fxch %st(2)
3352fstpl 112(%edx)
3353fxch %st(2)
3354fstpl 120(%edx)
3355fstpl -128(%ecx)
3356fstpl -120(%ecx)
3357fldl 80(%edx)
3358fmull 40(%ecx)
3359fmull crypto_scalarmult_curve25519_athlon_scale
3360fldl -104(%ecx)
3361fmull 32(%ecx)
3362faddp %st(0),%st(1)
3363fldl -96(%ecx)
3364fmull 24(%ecx)
3365faddp %st(0),%st(1)
3366fldl -104(%ecx)
3367fmull 40(%ecx)
3368fldl -88(%ecx)
3369fmull 16(%ecx)
3370faddp %st(0),%st(2)
3371fldl -96(%ecx)
3372fmull 32(%ecx)
3373faddp %st(0),%st(1)
3374fldl -80(%ecx)
3375fmull 8(%ecx)
3376faddp %st(0),%st(2)
3377fldl -88(%ecx)
3378fmull 24(%ecx)
3379faddp %st(0),%st(1)
3380fldl -16(%edx)
3381fmull 0(%ecx)
3382faddp %st(0),%st(2)
3383fldl -80(%ecx)
3384fmull 16(%ecx)
3385faddp %st(0),%st(1)
3386fldl -96(%ecx)
3387fmull 40(%ecx)
3388fldl -8(%edx)
3389fmull -8(%ecx)
3390faddp %st(0),%st(3)
3391fldl -16(%edx)
3392fmull 8(%ecx)
3393faddp %st(0),%st(2)
3394fldl -88(%ecx)
3395fmull 32(%ecx)
3396faddp %st(0),%st(1)
3397fldl 0(%edx)
3398fmull -16(%ecx)
3399faddp %st(0),%st(3)
3400fldl -8(%edx)
3401fmull 0(%ecx)
3402faddp %st(0),%st(2)
3403fldl -80(%ecx)
3404fmull 24(%ecx)
3405faddp %st(0),%st(1)
3406fldl 8(%edx)
3407fmull -24(%ecx)
3408faddp %st(0),%st(3)
3409fldl 0(%edx)
3410fmull -8(%ecx)
3411faddp %st(0),%st(2)
3412fldl -16(%edx)
3413fmull 16(%ecx)
3414faddp %st(0),%st(1)
3415fldl 16(%edx)
3416fmull -32(%ecx)
3417faddp %st(0),%st(3)
3418fldl 8(%edx)
3419fmull -16(%ecx)
3420faddp %st(0),%st(2)
3421fldl -8(%edx)
3422fmull 8(%ecx)
3423faddp %st(0),%st(1)
3424fldl -88(%ecx)
3425fmull 40(%ecx)
3426fldl 0(%edx)
3427fmull 0(%ecx)
3428faddp %st(0),%st(2)
3429fldl 16(%edx)
3430fmull -24(%ecx)
3431faddp %st(0),%st(3)
3432fldl crypto_scalarmult_curve25519_athlon_alpha230
3433fadd %st(4),%st(0)
3434fldl -80(%ecx)
3435fmull 32(%ecx)
3436faddp %st(0),%st(2)
3437fldl 8(%edx)
3438fmull -8(%ecx)
3439faddp %st(0),%st(3)
3440fldl 80(%edx)
3441fmull -32(%ecx)
3442faddp %st(0),%st(4)
3443fsubl crypto_scalarmult_curve25519_athlon_alpha230
3444fldl -16(%edx)
3445fmull 24(%ecx)
3446faddp %st(0),%st(2)
3447fldl -80(%ecx)
3448fmull 40(%ecx)
3449fldl 16(%edx)
3450fmull -16(%ecx)
3451faddp %st(0),%st(4)
3452fxch %st(1)
3453fadd %st(0),%st(4)
3454fldl -8(%edx)
3455fmull 16(%ecx)
3456faddp %st(0),%st(3)
3457fldl -16(%edx)
3458fmull 32(%ecx)
3459faddp %st(0),%st(2)
3460fsubrp %st(0),%st(5)
3461fldl crypto_scalarmult_curve25519_athlon_alpha255
3462fadd %st(4),%st(0)
3463fldl 0(%edx)
3464fmull 8(%ecx)
3465faddp %st(0),%st(3)
3466fldl -8(%edx)
3467fmull 24(%ecx)
3468faddp %st(0),%st(2)
3469fldl 80(%edx)
3470fmull -24(%ecx)
3471faddp %st(0),%st(4)
3472fsubl crypto_scalarmult_curve25519_athlon_alpha255
3473fldl 8(%edx)
3474fmull 0(%ecx)
3475faddp %st(0),%st(3)
3476fldl -16(%edx)
3477fmull 40(%ecx)
3478fldl 0(%edx)
3479fmull 16(%ecx)
3480faddp %st(0),%st(3)
3481fldl 16(%edx)
3482fmull -8(%ecx)
3483faddp %st(0),%st(4)
3484fxch %st(1)
3485fadd %st(0),%st(4)
3486fsubrp %st(0),%st(5)
3487fxch %st(5)
3488fstpl 0(%esp)
3489fldl -8(%edx)
3490fmull 32(%ecx)
3491faddp %st(0),%st(5)
3492fldl 8(%edx)
3493fmull 8(%ecx)
3494faddp %st(0),%st(1)
3495fldl 80(%edx)
3496fmull -16(%ecx)
3497faddp %st(0),%st(2)
3498fxch %st(2)
3499fmull crypto_scalarmult_curve25519_athlon_scale
3500fldl 0(%edx)
3501fmull 24(%ecx)
3502faddp %st(0),%st(5)
3503fldl 16(%edx)
3504fmull 0(%ecx)
3505faddp %st(0),%st(3)
3506fxch %st(1)
3507fmull crypto_scalarmult_curve25519_athlon_scale
3508fldl -104(%ecx)
3509fmull -32(%ecx)
3510faddp %st(0),%st(2)
3511fxch %st(3)
3512fstpl 8(%esp)
3513fldl -8(%edx)
3514fmull 40(%ecx)
3515fldl 8(%edx)
3516fmull 16(%ecx)
3517faddp %st(0),%st(5)
3518fldl 80(%edx)
3519fmull -8(%ecx)
3520faddp %st(0),%st(3)
3521fldl -104(%ecx)
3522fmull -24(%ecx)
3523faddp %st(0),%st(4)
3524fldl crypto_scalarmult_curve25519_athlon_alpha26
3525fadd %st(2),%st(0)
3526fldl 0(%edx)
3527fmull 32(%ecx)
3528faddp %st(0),%st(2)
3529fldl 16(%edx)
3530fmull 8(%ecx)
3531faddp %st(0),%st(6)
3532fxch %st(3)
3533fmull crypto_scalarmult_curve25519_athlon_scale
3534fldl -96(%ecx)
3535fmull -32(%ecx)
3536faddp %st(0),%st(5)
3537fxch %st(3)
3538fsubl crypto_scalarmult_curve25519_athlon_alpha26
3539fldl 8(%edx)
3540fmull 24(%ecx)
3541faddp %st(0),%st(2)
3542fldl 80(%edx)
3543fmull 0(%ecx)
3544faddp %st(0),%st(6)
3545fldl -104(%ecx)
3546fmull -16(%ecx)
3547faddp %st(0),%st(4)
3548fadd %st(0),%st(4)
3549fsubrp %st(0),%st(2)
3550fldl 0(%edx)
3551fmull 40(%ecx)
3552fldl 16(%edx)
3553fmull 16(%ecx)
3554faddp %st(0),%st(2)
3555fxch %st(5)
3556fmull crypto_scalarmult_curve25519_athlon_scale
3557fldl -96(%ecx)
3558fmull -24(%ecx)
3559faddp %st(0),%st(4)
3560fldl crypto_scalarmult_curve25519_athlon_alpha51
3561fadd %st(5),%st(0)
3562fldl 8(%edx)
3563fmull 32(%ecx)
3564faddp %st(0),%st(7)
3565fldl 80(%edx)
3566fmull 8(%ecx)
3567faddp %st(0),%st(3)
3568fldl -104(%ecx)
3569fmull -8(%ecx)
3570faddp %st(0),%st(2)
3571fldl -88(%ecx)
3572fmull -32(%ecx)
3573faddp %st(0),%st(5)
3574fsubl crypto_scalarmult_curve25519_athlon_alpha51
3575fxch %st(3)
3576fstpl 64(%edx)
3577fldl 16(%edx)
3578fmull 24(%ecx)
3579faddp %st(0),%st(6)
3580fxch %st(1)
3581fmull crypto_scalarmult_curve25519_athlon_scale
3582fldl -96(%ecx)
3583fmull -16(%ecx)
3584faddp %st(0),%st(2)
3585fxch %st(2)
3586fadd %st(0),%st(3)
3587fsubrp %st(0),%st(4)
3588fldl 8(%edx)
3589fmull 40(%ecx)
3590fldl 80(%edx)
3591fmull 16(%ecx)
3592faddp %st(0),%st(6)
3593fldl -104(%ecx)
3594fmull 0(%ecx)
3595faddp %st(0),%st(3)
3596fldl -88(%ecx)
3597fmull -24(%ecx)
3598faddp %st(0),%st(2)
3599fldl crypto_scalarmult_curve25519_athlon_alpha77
3600fadd %st(4),%st(0)
3601fldl 16(%edx)
3602fmull 32(%ecx)
3603faddp %st(0),%st(2)
3604fxch %st(6)
3605fmull crypto_scalarmult_curve25519_athlon_scale
3606fldl -96(%ecx)
3607fmull -8(%ecx)
3608faddp %st(0),%st(4)
3609fldl -80(%ecx)
3610fmull -32(%ecx)
3611faddp %st(0),%st(3)
3612fxch %st(6)
3613fsubl crypto_scalarmult_curve25519_athlon_alpha77
3614fxch %st(5)
3615fstpl 72(%edx)
3616fldl 80(%edx)
3617fmull 24(%ecx)
3618faddp %st(0),%st(1)
3619fldl -104(%ecx)
3620fmull 8(%ecx)
3621faddp %st(0),%st(6)
3622fldl -88(%ecx)
3623fmull -16(%ecx)
3624faddp %st(0),%st(3)
3625fxch %st(4)
3626fadd %st(0),%st(1)
3627fsubrp %st(0),%st(3)
3628fldl 16(%edx)
3629fmull 40(%ecx)
3630fxch %st(4)
3631fmull crypto_scalarmult_curve25519_athlon_scale
3632fldl -96(%ecx)
3633fmull 0(%ecx)
3634faddp %st(0),%st(6)
3635fldl -80(%ecx)
3636fmull -24(%ecx)
3637faddp %st(0),%st(3)
3638fldl crypto_scalarmult_curve25519_athlon_alpha102
3639fadd %st(2),%st(0)
3640fldl 80(%edx)
3641fmull 32(%ecx)
3642faddp %st(0),%st(6)
3643fldl -104(%ecx)
3644fmull 16(%ecx)
3645faddp %st(0),%st(2)
3646fldl -88(%ecx)
3647fmull -8(%ecx)
3648faddp %st(0),%st(7)
3649fldl -16(%edx)
3650fmull -32(%ecx)
3651faddp %st(0),%st(4)
3652fsubl crypto_scalarmult_curve25519_athlon_alpha102
3653fxch %st(4)
3654fstpl 80(%edx)
3655fxch %st(4)
3656fmull crypto_scalarmult_curve25519_athlon_scale
3657fldl -96(%ecx)
3658fmull 8(%ecx)
3659faddp %st(0),%st(5)
3660fldl -80(%ecx)
3661fmull -16(%ecx)
3662faddp %st(0),%st(6)
3663fxch %st(3)
3664fadd %st(0),%st(2)
3665fsubrp %st(0),%st(1)
3666fldl -104(%ecx)
3667fmull 24(%ecx)
3668faddp %st(0),%st(3)
3669fldl -88(%ecx)
3670fmull 0(%ecx)
3671faddp %st(0),%st(4)
3672fldl -16(%edx)
3673fmull -24(%ecx)
3674faddp %st(0),%st(5)
3675fldl crypto_scalarmult_curve25519_athlon_alpha128
3676fadd %st(2),%st(0)
3677fldl -96(%ecx)
3678fmull 16(%ecx)
3679faddp %st(0),%st(4)
3680fldl -80(%ecx)
3681fmull -8(%ecx)
3682faddp %st(0),%st(5)
3683fldl -8(%edx)
3684fmull -32(%ecx)
3685faddp %st(0),%st(6)
3686fsubl crypto_scalarmult_curve25519_athlon_alpha128
3687fxch %st(1)
3688fstpl 88(%edx)
3689fldl -88(%ecx)
3690fmull 8(%ecx)
3691faddp %st(0),%st(3)
3692fldl -16(%edx)
3693fmull -16(%ecx)
3694faddp %st(0),%st(4)
3695fadd %st(0),%st(4)
3696fsubrp %st(0),%st(1)
3697fstpl -104(%ecx)
3698fldl -80(%ecx)
3699fmull 0(%ecx)
3700faddp %st(0),%st(1)
3701fldl -8(%edx)
3702fmull -24(%ecx)
3703faddp %st(0),%st(2)
3704fldl crypto_scalarmult_curve25519_athlon_alpha153
3705fadd %st(3),%st(0)
3706fldl -16(%edx)
3707fmull -8(%ecx)
3708faddp %st(0),%st(2)
3709fldl 0(%edx)
3710fmull -32(%ecx)
3711faddp %st(0),%st(3)
3712fsubl crypto_scalarmult_curve25519_athlon_alpha153
3713fldl -8(%edx)
3714fmull -16(%ecx)
3715faddp %st(0),%st(2)
3716fadd %st(0),%st(2)
3717fsubrp %st(0),%st(3)
3718fxch %st(2)
3719fstpl -96(%ecx)
3720fldl 0(%edx)
3721fmull -24(%ecx)
3722faddp %st(0),%st(2)
3723fldl crypto_scalarmult_curve25519_athlon_alpha179
3724fadd %st(1),%st(0)
3725fldl 8(%edx)
3726fmull -32(%ecx)
3727faddp %st(0),%st(3)
3728fsubl crypto_scalarmult_curve25519_athlon_alpha179
3729fldl 0(%esp)
3730fldl 8(%esp)
3731fxch %st(2)
3732fadd %st(0),%st(4)
3733fsubrp %st(0),%st(3)
3734fldl crypto_scalarmult_curve25519_athlon_alpha204
3735fadd %st(4),%st(0)
3736fsubl crypto_scalarmult_curve25519_athlon_alpha204
3737fadd %st(0),%st(1)
3738fsubrp %st(0),%st(4)
3739fldl crypto_scalarmult_curve25519_athlon_alpha230
3740fadd %st(1),%st(0)
3741fsubl crypto_scalarmult_curve25519_athlon_alpha230
3742fsubr %st(0),%st(1)
3743faddp %st(0),%st(2)
3744fxch %st(2)
3745fstpl -88(%ecx)
3746fxch %st(2)
3747fstpl -80(%ecx)
3748fstpl -72(%ecx)
3749fstpl -64(%ecx)
3750fldl 136(%ecx)
3751fldl -120(%edx)
3752fldl 16(%esp)
3753fsubr %st(1),%st(0)
3754fmul %st(2),%st(0)
3755fsubr %st(0),%st(1)
3756faddl 16(%esp)
3757fxch %st(1)
3758fstpl -16(%edx)
3759fstpl 0(%esp)
3760fldl -112(%edx)
3761fldl 24(%esp)
3762fsubr %st(1),%st(0)
3763fmul %st(2),%st(0)
3764fsubr %st(0),%st(1)
3765faddl 24(%esp)
3766fxch %st(1)
3767fstpl -8(%edx)
3768fstpl 8(%esp)
3769fldl -104(%edx)
3770fldl 32(%esp)
3771fsubr %st(1),%st(0)
3772fmul %st(2),%st(0)
3773fsubr %st(0),%st(1)
3774faddl 32(%esp)
3775fxch %st(1)
3776fstpl 0(%edx)
3777fstpl 16(%esp)
3778fldl 40(%edx)
3779fldl 40(%esp)
3780fsubr %st(1),%st(0)
3781fmul %st(2),%st(0)
3782fsubr %st(0),%st(1)
3783faddl 40(%esp)
3784fxch %st(1)
3785fstpl 8(%edx)
3786fstpl 24(%esp)
3787fldl -96(%edx)
3788fldl 48(%esp)
3789fsubr %st(1),%st(0)
3790fmul %st(2),%st(0)
3791fsubr %st(0),%st(1)
3792faddl 48(%esp)
3793fxch %st(1)
3794fstpl 16(%edx)
3795fstpl 32(%esp)
3796fldl -88(%edx)
3797fldl 24(%edx)
3798fsubr %st(1),%st(0)
3799fmul %st(2),%st(0)
3800fsubr %st(0),%st(1)
3801faddl 24(%edx)
3802fxch %st(1)
3803fstpl 24(%edx)
3804fstpl 40(%esp)
3805fldl -80(%edx)
3806fldl 32(%edx)
3807fsubr %st(1),%st(0)
3808fmul %st(2),%st(0)
3809fsubr %st(0),%st(1)
3810faddl 32(%edx)
3811fxch %st(1)
3812fstpl 32(%edx)
3813fstpl 48(%esp)
3814fldl -72(%edx)
3815fldl 48(%edx)
3816fsubr %st(1),%st(0)
3817fmul %st(2),%st(0)
3818fsubr %st(0),%st(1)
3819faddl 48(%edx)
3820fxch %st(1)
3821fstpl 40(%edx)
3822fstpl -120(%edx)
3823fldl -64(%edx)
3824fldl 56(%edx)
3825fsubr %st(1),%st(0)
3826fmul %st(2),%st(0)
3827fsubr %st(0),%st(1)
3828faddl 56(%edx)
3829fxch %st(1)
3830fstpl 48(%edx)
3831fstpl -112(%edx)
3832fldl -56(%edx)
3833fldl -112(%ecx)
3834fsubr %st(1),%st(0)
3835fmul %st(2),%st(0)
3836fsubr %st(0),%st(1)
3837faddl -112(%ecx)
3838fxch %st(1)
3839fstpl 56(%edx)
3840fstpl -104(%edx)
3841fldl -48(%edx)
3842fldl 64(%edx)
3843fsubr %st(1),%st(0)
3844fmul %st(2),%st(0)
3845fsubr %st(0),%st(1)
3846faddl 64(%edx)
3847fxch %st(1)
3848fstpl 64(%edx)
3849fstpl -96(%edx)
3850fldl -40(%edx)
3851fldl 72(%edx)
3852fsubr %st(1),%st(0)
3853fmul %st(2),%st(0)
3854fsubr %st(0),%st(1)
3855faddl 72(%edx)
3856fxch %st(1)
3857fstpl 72(%edx)
3858fstpl -88(%edx)
3859fldl -32(%edx)
3860fldl 80(%edx)
3861fsubr %st(1),%st(0)
3862fmul %st(2),%st(0)
3863fsubr %st(0),%st(1)
3864faddl 80(%edx)
3865fxch %st(1)
3866fstpl 80(%edx)
3867fstpl -80(%edx)
3868fldl -24(%edx)
3869fldl 88(%edx)
3870fsubr %st(1),%st(0)
3871fmul %st(2),%st(0)
3872fsubr %st(0),%st(1)
3873faddl 88(%edx)
3874fxch %st(1)
3875fstpl 88(%edx)
3876fstpl -72(%edx)
3877fldl 96(%edx)
3878fldl -104(%ecx)
3879fsubr %st(1),%st(0)
3880fmul %st(2),%st(0)
3881fsubr %st(0),%st(1)
3882faddl -104(%ecx)
3883fxch %st(1)
3884fstpl 96(%edx)
3885fstpl -64(%edx)
3886fldl 104(%edx)
3887fldl -96(%ecx)
3888fsubr %st(1),%st(0)
3889fmul %st(2),%st(0)
3890fsubr %st(0),%st(1)
3891faddl -96(%ecx)
3892fxch %st(1)
3893fstpl 104(%edx)
3894fstpl -56(%edx)
3895fldl 112(%edx)
3896fldl -88(%ecx)
3897fsubr %st(1),%st(0)
3898fmul %st(2),%st(0)
3899fsubr %st(0),%st(1)
3900faddl -88(%ecx)
3901fxch %st(1)
3902fstpl 112(%edx)
3903fstpl -48(%edx)
3904fldl 120(%edx)
3905fldl -80(%ecx)
3906fsubr %st(1),%st(0)
3907fmul %st(2),%st(0)
3908fsubr %st(0),%st(1)
3909faddl -80(%ecx)
3910fxch %st(1)
3911fstpl 120(%edx)
3912fstpl -40(%edx)
3913fldl -128(%ecx)
3914fldl -72(%ecx)
3915fsubr %st(1),%st(0)
3916fmul %st(2),%st(0)
3917fsubr %st(0),%st(1)
3918faddl -72(%ecx)
3919fxch %st(1)
3920fstpl -128(%ecx)
3921fstpl -32(%edx)
3922fldl -120(%ecx)
3923fldl -64(%ecx)
3924fsubr %st(1),%st(0)
3925fmulp %st(0),%st(2)
3926fsub %st(1),%st(0)
3927fxch %st(1)
3928faddl -64(%ecx)
3929fxch %st(1)
3930fstpl -120(%ecx)
3931fstpl -24(%edx)
3932movl 180(%ecx),%esi
3933movl 184(%ecx),%ebp
3934sub $1,%ebp
3935ja ._morebits
3936movl 188(%ecx),%edi
3937sub $4,%edi
3938jb ._done
3939movl (%ebx,%edi),%esi
3940mov $32,%ebp
3941jmp ._morebytes
3942._done:
3943movl 4(%esp,%eax),%eax
3944fldl 0(%esp)
3945fstpl 0(%eax)
3946fldl 8(%esp)
3947fstpl 8(%eax)
3948fldl 16(%esp)
3949fstpl 16(%eax)
3950fldl 24(%esp)
3951fstpl 24(%eax)
3952fldl 32(%esp)
3953fstpl 32(%eax)
3954fldl 40(%esp)
3955fstpl 40(%eax)
3956fldl 48(%esp)
3957fstpl 48(%eax)
3958fldl -120(%edx)
3959fstpl 56(%eax)
3960fldl -112(%edx)
3961fstpl 64(%eax)
3962fldl -104(%edx)
3963fstpl 72(%eax)
3964fldl -96(%edx)
3965fstpl 80(%eax)
3966fldl -88(%edx)
3967fstpl 88(%eax)
3968fldl -80(%edx)
3969fstpl 96(%eax)
3970fldl -72(%edx)
3971fstpl 104(%eax)
3972fldl -64(%edx)
3973fstpl 112(%eax)
3974fldl -56(%edx)
3975fstpl 120(%eax)
3976fldl -48(%edx)
3977fstpl 128(%eax)
3978fldl -40(%edx)
3979fstpl 136(%eax)
3980fldl -32(%edx)
3981fstpl 144(%eax)
3982fldl -24(%edx)
3983fstpl 152(%eax)
3984movl 160(%ecx),%eax
3985movl 164(%ecx),%ebx
3986movl 168(%ecx),%esi
3987movl 172(%ecx),%edi
3988movl 176(%ecx),%ebp
3989add %eax,%esp
3990ret
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/mult.s b/nacl/crypto_scalarmult/curve25519/athlon/mult.s
new file mode 100644
index 00000000..16f0e908
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/mult.s
@@ -0,0 +1,410 @@
1.text
2.p2align 5
3.globl _crypto_scalarmult_curve25519_athlon_mult
4.globl crypto_scalarmult_curve25519_athlon_mult
5_crypto_scalarmult_curve25519_athlon_mult:
6crypto_scalarmult_curve25519_athlon_mult:
7mov %esp,%eax
8and $31,%eax
9add $32,%eax
10sub %eax,%esp
11movl %ebp,0(%esp)
12movl 4(%esp,%eax),%ecx
13movl 8(%esp,%eax),%edx
14movl 12(%esp,%eax),%ebp
15fldl 72(%edx)
16fmull 72(%ebp)
17fmull crypto_scalarmult_curve25519_athlon_scale
18fldl 0(%edx)
19fmull 64(%ebp)
20faddp %st(0),%st(1)
21fldl 8(%edx)
22fmull 56(%ebp)
23faddp %st(0),%st(1)
24fldl 0(%edx)
25fmull 72(%ebp)
26fldl 16(%edx)
27fmull 48(%ebp)
28faddp %st(0),%st(2)
29fldl 8(%edx)
30fmull 64(%ebp)
31faddp %st(0),%st(1)
32fldl 24(%edx)
33fmull 40(%ebp)
34faddp %st(0),%st(2)
35fldl 16(%edx)
36fmull 56(%ebp)
37faddp %st(0),%st(1)
38fldl 32(%edx)
39fmull 32(%ebp)
40faddp %st(0),%st(2)
41fldl 24(%edx)
42fmull 48(%ebp)
43faddp %st(0),%st(1)
44fldl 8(%edx)
45fmull 72(%ebp)
46fldl 40(%edx)
47fmull 24(%ebp)
48faddp %st(0),%st(3)
49fldl 32(%edx)
50fmull 40(%ebp)
51faddp %st(0),%st(2)
52fldl 16(%edx)
53fmull 64(%ebp)
54faddp %st(0),%st(1)
55fldl 48(%edx)
56fmull 16(%ebp)
57faddp %st(0),%st(3)
58fldl 40(%edx)
59fmull 32(%ebp)
60faddp %st(0),%st(2)
61fldl 24(%edx)
62fmull 56(%ebp)
63faddp %st(0),%st(1)
64fldl 56(%edx)
65fmull 8(%ebp)
66faddp %st(0),%st(3)
67fldl 48(%edx)
68fmull 24(%ebp)
69faddp %st(0),%st(2)
70fldl 32(%edx)
71fmull 48(%ebp)
72faddp %st(0),%st(1)
73fldl 64(%edx)
74fmull 0(%ebp)
75faddp %st(0),%st(3)
76fldl 56(%edx)
77fmull 16(%ebp)
78faddp %st(0),%st(2)
79fldl 40(%edx)
80fmull 40(%ebp)
81faddp %st(0),%st(1)
82fldl 16(%edx)
83fmull 72(%ebp)
84fldl 48(%edx)
85fmull 32(%ebp)
86faddp %st(0),%st(2)
87fldl 64(%edx)
88fmull 8(%ebp)
89faddp %st(0),%st(3)
90fldl crypto_scalarmult_curve25519_athlon_alpha230
91fadd %st(4),%st(0)
92fldl 24(%edx)
93fmull 64(%ebp)
94faddp %st(0),%st(2)
95fldl 56(%edx)
96fmull 24(%ebp)
97faddp %st(0),%st(3)
98fldl 72(%edx)
99fmull 0(%ebp)
100faddp %st(0),%st(4)
101fsubl crypto_scalarmult_curve25519_athlon_alpha230
102fldl 32(%edx)
103fmull 56(%ebp)
104faddp %st(0),%st(2)
105fldl 24(%edx)
106fmull 72(%ebp)
107fldl 64(%edx)
108fmull 16(%ebp)
109faddp %st(0),%st(4)
110fxch %st(1)
111fadd %st(0),%st(4)
112fldl 40(%edx)
113fmull 48(%ebp)
114faddp %st(0),%st(3)
115fldl 32(%edx)
116fmull 64(%ebp)
117faddp %st(0),%st(2)
118fsubrp %st(0),%st(5)
119fldl crypto_scalarmult_curve25519_athlon_alpha255
120fadd %st(4),%st(0)
121fldl 48(%edx)
122fmull 40(%ebp)
123faddp %st(0),%st(3)
124fldl 40(%edx)
125fmull 56(%ebp)
126faddp %st(0),%st(2)
127fldl 72(%edx)
128fmull 8(%ebp)
129faddp %st(0),%st(4)
130fsubl crypto_scalarmult_curve25519_athlon_alpha255
131fldl 56(%edx)
132fmull 32(%ebp)
133faddp %st(0),%st(3)
134fldl 32(%edx)
135fmull 72(%ebp)
136fldl 48(%edx)
137fmull 48(%ebp)
138faddp %st(0),%st(3)
139fldl 64(%edx)
140fmull 24(%ebp)
141faddp %st(0),%st(4)
142fxch %st(1)
143fadd %st(0),%st(4)
144fsubrp %st(0),%st(5)
145fxch %st(5)
146fstpl 64(%ecx)
147fldl 40(%edx)
148fmull 64(%ebp)
149faddp %st(0),%st(5)
150fldl 56(%edx)
151fmull 40(%ebp)
152faddp %st(0),%st(1)
153fldl 72(%edx)
154fmull 16(%ebp)
155faddp %st(0),%st(2)
156fxch %st(2)
157fmull crypto_scalarmult_curve25519_athlon_scale
158fldl 48(%edx)
159fmull 56(%ebp)
160faddp %st(0),%st(5)
161fldl 64(%edx)
162fmull 32(%ebp)
163faddp %st(0),%st(3)
164fxch %st(1)
165fmull crypto_scalarmult_curve25519_athlon_scale
166fldl 0(%edx)
167fmull 0(%ebp)
168faddp %st(0),%st(2)
169fxch %st(3)
170fstpl 72(%ecx)
171fldl 40(%edx)
172fmull 72(%ebp)
173fldl 56(%edx)
174fmull 48(%ebp)
175faddp %st(0),%st(5)
176fldl 72(%edx)
177fmull 24(%ebp)
178faddp %st(0),%st(3)
179fldl 0(%edx)
180fmull 8(%ebp)
181faddp %st(0),%st(4)
182fldl crypto_scalarmult_curve25519_athlon_alpha26
183fadd %st(2),%st(0)
184fldl 48(%edx)
185fmull 64(%ebp)
186faddp %st(0),%st(2)
187fldl 64(%edx)
188fmull 40(%ebp)
189faddp %st(0),%st(6)
190fxch %st(3)
191fmull crypto_scalarmult_curve25519_athlon_scale
192fldl 8(%edx)
193fmull 0(%ebp)
194faddp %st(0),%st(5)
195fxch %st(3)
196fsubl crypto_scalarmult_curve25519_athlon_alpha26
197fldl 56(%edx)
198fmull 56(%ebp)
199faddp %st(0),%st(2)
200fldl 72(%edx)
201fmull 32(%ebp)
202faddp %st(0),%st(6)
203fldl 0(%edx)
204fmull 16(%ebp)
205faddp %st(0),%st(4)
206fadd %st(0),%st(4)
207fsubrp %st(0),%st(2)
208fldl 48(%edx)
209fmull 72(%ebp)
210fldl 64(%edx)
211fmull 48(%ebp)
212faddp %st(0),%st(2)
213fxch %st(5)
214fmull crypto_scalarmult_curve25519_athlon_scale
215fldl 8(%edx)
216fmull 8(%ebp)
217faddp %st(0),%st(4)
218fldl crypto_scalarmult_curve25519_athlon_alpha51
219fadd %st(5),%st(0)
220fldl 56(%edx)
221fmull 64(%ebp)
222faddp %st(0),%st(7)
223fldl 72(%edx)
224fmull 40(%ebp)
225faddp %st(0),%st(3)
226fldl 0(%edx)
227fmull 24(%ebp)
228faddp %st(0),%st(2)
229fldl 16(%edx)
230fmull 0(%ebp)
231faddp %st(0),%st(5)
232fsubl crypto_scalarmult_curve25519_athlon_alpha51
233fxch %st(3)
234fstpl 0(%ecx)
235fldl 64(%edx)
236fmull 56(%ebp)
237faddp %st(0),%st(6)
238fxch %st(1)
239fmull crypto_scalarmult_curve25519_athlon_scale
240fldl 8(%edx)
241fmull 16(%ebp)
242faddp %st(0),%st(2)
243fxch %st(2)
244fadd %st(0),%st(3)
245fsubrp %st(0),%st(4)
246fldl 56(%edx)
247fmull 72(%ebp)
248fldl 72(%edx)
249fmull 48(%ebp)
250faddp %st(0),%st(6)
251fldl 0(%edx)
252fmull 32(%ebp)
253faddp %st(0),%st(3)
254fldl 16(%edx)
255fmull 8(%ebp)
256faddp %st(0),%st(2)
257fldl crypto_scalarmult_curve25519_athlon_alpha77
258fadd %st(4),%st(0)
259fldl 64(%edx)
260fmull 64(%ebp)
261faddp %st(0),%st(2)
262fxch %st(6)
263fmull crypto_scalarmult_curve25519_athlon_scale
264fldl 8(%edx)
265fmull 24(%ebp)
266faddp %st(0),%st(4)
267fldl 24(%edx)
268fmull 0(%ebp)
269faddp %st(0),%st(3)
270fxch %st(6)
271fsubl crypto_scalarmult_curve25519_athlon_alpha77
272fxch %st(5)
273fstpl 8(%ecx)
274fldl 72(%edx)
275fmull 56(%ebp)
276faddp %st(0),%st(1)
277fldl 0(%edx)
278fmull 40(%ebp)
279faddp %st(0),%st(6)
280fldl 16(%edx)
281fmull 16(%ebp)
282faddp %st(0),%st(3)
283fxch %st(4)
284fadd %st(0),%st(1)
285fsubrp %st(0),%st(3)
286fldl 64(%edx)
287fmull 72(%ebp)
288fxch %st(4)
289fmull crypto_scalarmult_curve25519_athlon_scale
290fldl 8(%edx)
291fmull 32(%ebp)
292faddp %st(0),%st(6)
293fldl 24(%edx)
294fmull 8(%ebp)
295faddp %st(0),%st(3)
296fldl crypto_scalarmult_curve25519_athlon_alpha102
297fadd %st(2),%st(0)
298fldl 72(%edx)
299fmull 64(%ebp)
300faddp %st(0),%st(6)
301fldl 0(%edx)
302fmull 48(%ebp)
303faddp %st(0),%st(2)
304fldl 16(%edx)
305fmull 24(%ebp)
306faddp %st(0),%st(7)
307fldl 32(%edx)
308fmull 0(%ebp)
309faddp %st(0),%st(4)
310fsubl crypto_scalarmult_curve25519_athlon_alpha102
311fxch %st(4)
312fstpl 16(%ecx)
313fxch %st(4)
314fmull crypto_scalarmult_curve25519_athlon_scale
315fldl 8(%edx)
316fmull 40(%ebp)
317faddp %st(0),%st(5)
318fldl 24(%edx)
319fmull 16(%ebp)
320faddp %st(0),%st(6)
321fxch %st(3)
322fadd %st(0),%st(2)
323fsubrp %st(0),%st(1)
324fldl 0(%edx)
325fmull 56(%ebp)
326faddp %st(0),%st(3)
327fldl 16(%edx)
328fmull 32(%ebp)
329faddp %st(0),%st(4)
330fldl 32(%edx)
331fmull 8(%ebp)
332faddp %st(0),%st(5)
333fldl crypto_scalarmult_curve25519_athlon_alpha128
334fadd %st(2),%st(0)
335fldl 8(%edx)
336fmull 48(%ebp)
337faddp %st(0),%st(4)
338fldl 24(%edx)
339fmull 24(%ebp)
340faddp %st(0),%st(5)
341fldl 40(%edx)
342fmull 0(%ebp)
343faddp %st(0),%st(6)
344fsubl crypto_scalarmult_curve25519_athlon_alpha128
345fxch %st(1)
346fstpl 24(%ecx)
347fldl 16(%edx)
348fmull 40(%ebp)
349faddp %st(0),%st(3)
350fldl 32(%edx)
351fmull 16(%ebp)
352faddp %st(0),%st(4)
353fadd %st(0),%st(4)
354fsubrp %st(0),%st(1)
355fstpl 32(%ecx)
356fldl 24(%edx)
357fmull 32(%ebp)
358faddp %st(0),%st(1)
359fldl 40(%edx)
360fmull 8(%ebp)
361faddp %st(0),%st(2)
362fldl crypto_scalarmult_curve25519_athlon_alpha153
363fadd %st(3),%st(0)
364fldl 32(%edx)
365fmull 24(%ebp)
366faddp %st(0),%st(2)
367fldl 48(%edx)
368fmull 0(%ebp)
369faddp %st(0),%st(3)
370fsubl crypto_scalarmult_curve25519_athlon_alpha153
371fldl 40(%edx)
372fmull 16(%ebp)
373faddp %st(0),%st(2)
374fadd %st(0),%st(2)
375fsubrp %st(0),%st(3)
376fxch %st(2)
377fstpl 40(%ecx)
378fldl 48(%edx)
379fmull 8(%ebp)
380faddp %st(0),%st(2)
381fldl crypto_scalarmult_curve25519_athlon_alpha179
382fadd %st(1),%st(0)
383fldl 56(%edx)
384fmull 0(%ebp)
385faddp %st(0),%st(3)
386fsubl crypto_scalarmult_curve25519_athlon_alpha179
387fldl 64(%ecx)
388fldl 72(%ecx)
389fxch %st(2)
390fadd %st(0),%st(4)
391fsubrp %st(0),%st(3)
392fldl crypto_scalarmult_curve25519_athlon_alpha204
393fadd %st(4),%st(0)
394fsubl crypto_scalarmult_curve25519_athlon_alpha204
395fadd %st(0),%st(1)
396fsubrp %st(0),%st(4)
397fldl crypto_scalarmult_curve25519_athlon_alpha230
398fadd %st(1),%st(0)
399fsubl crypto_scalarmult_curve25519_athlon_alpha230
400fsubr %st(0),%st(1)
401faddp %st(0),%st(2)
402fxch %st(2)
403fstpl 48(%ecx)
404fxch %st(2)
405fstpl 56(%ecx)
406fstpl 64(%ecx)
407fstpl 72(%ecx)
408movl 0(%esp),%ebp
409add %eax,%esp
410ret
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/smult.c b/nacl/crypto_scalarmult/curve25519/athlon/smult.c
new file mode 100644
index 00000000..157f1e6c
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/smult.c
@@ -0,0 +1,91 @@
1#include "crypto_scalarmult.h"
2
3#define mult crypto_scalarmult_curve25519_athlon_mult
4#define square crypto_scalarmult_curve25519_athlon_square
5
6void crypto_scalarmult_curve25519_athlon_recip(double out[10],const double z[10])
7{
8 double z2[10];
9 double z9[10];
10 double z11[10];
11 double z2_5_0[10];
12 double z2_10_0[10];
13 double z2_20_0[10];
14 double z2_50_0[10];
15 double z2_100_0[10];
16 double t0[10];
17 double t1[10];
18 int i;
19
20 /* 2 */ square(z2,z);
21 /* 4 */ square(t1,z2);
22 /* 8 */ square(t0,t1);
23 /* 9 */ mult(z9,t0,z);
24 /* 11 */ mult(z11,z9,z2);
25 /* 22 */ square(t0,z11);
26 /* 2^5 - 2^0 = 31 */ mult(z2_5_0,t0,z9);
27
28 /* 2^6 - 2^1 */ square(t0,z2_5_0);
29 /* 2^7 - 2^2 */ square(t1,t0);
30 /* 2^8 - 2^3 */ square(t0,t1);
31 /* 2^9 - 2^4 */ square(t1,t0);
32 /* 2^10 - 2^5 */ square(t0,t1);
33 /* 2^10 - 2^0 */ mult(z2_10_0,t0,z2_5_0);
34
35 /* 2^11 - 2^1 */ square(t0,z2_10_0);
36 /* 2^12 - 2^2 */ square(t1,t0);
37 /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t0,t1); square(t1,t0); }
38 /* 2^20 - 2^0 */ mult(z2_20_0,t1,z2_10_0);
39
40 /* 2^21 - 2^1 */ square(t0,z2_20_0);
41 /* 2^22 - 2^2 */ square(t1,t0);
42 /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { square(t0,t1); square(t1,t0); }
43 /* 2^40 - 2^0 */ mult(t0,t1,z2_20_0);
44
45 /* 2^41 - 2^1 */ square(t1,t0);
46 /* 2^42 - 2^2 */ square(t0,t1);
47 /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t1,t0); square(t0,t1); }
48 /* 2^50 - 2^0 */ mult(z2_50_0,t0,z2_10_0);
49
50 /* 2^51 - 2^1 */ square(t0,z2_50_0);
51 /* 2^52 - 2^2 */ square(t1,t0);
52 /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); }
53 /* 2^100 - 2^0 */ mult(z2_100_0,t1,z2_50_0);
54
55 /* 2^101 - 2^1 */ square(t1,z2_100_0);
56 /* 2^102 - 2^2 */ square(t0,t1);
57 /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { square(t1,t0); square(t0,t1); }
58 /* 2^200 - 2^0 */ mult(t1,t0,z2_100_0);
59
60 /* 2^201 - 2^1 */ square(t0,t1);
61 /* 2^202 - 2^2 */ square(t1,t0);
62 /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); }
63 /* 2^250 - 2^0 */ mult(t0,t1,z2_50_0);
64
65 /* 2^251 - 2^1 */ square(t1,t0);
66 /* 2^252 - 2^2 */ square(t0,t1);
67 /* 2^253 - 2^3 */ square(t1,t0);
68 /* 2^254 - 2^4 */ square(t0,t1);
69 /* 2^255 - 2^5 */ square(t1,t0);
70 /* 2^255 - 21 */ mult(out,t1,z11);
71}
72
73int crypto_scalarmult(unsigned char *q,
74 const unsigned char *n,
75 const unsigned char *p)
76{
77 double work[30];
78 unsigned char e[32];
79 int i;
80 for (i = 0;i < 32;++i) e[i] = n[i];
81 e[0] &= 248;
82 e[31] &= 127;
83 e[31] |= 64;
84 crypto_scalarmult_curve25519_athlon_init();
85 crypto_scalarmult_curve25519_athlon_todouble(work,p);
86 crypto_scalarmult_curve25519_athlon_mainloop(work,e);
87 crypto_scalarmult_curve25519_athlon_recip(work + 10,work + 10);
88 mult(work + 20,work,work + 10);
89 crypto_scalarmult_curve25519_athlon_fromdouble(q,work + 20);
90 return 0;
91}
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/square.s b/nacl/crypto_scalarmult/curve25519/athlon/square.s
new file mode 100644
index 00000000..754def78
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/square.s
@@ -0,0 +1,298 @@
1.text
2.p2align 5
3.globl _crypto_scalarmult_curve25519_athlon_square
4.globl crypto_scalarmult_curve25519_athlon_square
5_crypto_scalarmult_curve25519_athlon_square:
6crypto_scalarmult_curve25519_athlon_square:
7mov %esp,%eax
8and $31,%eax
9add $64,%eax
10sub %eax,%esp
11movl 8(%esp,%eax),%edx
12movl 4(%esp,%eax),%ecx
13fldl 72(%edx)
14fmul %st(0),%st(0)
15fldl 0(%edx)
16fadd %st(0),%st(0)
17fldl 8(%edx)
18fadd %st(0),%st(0)
19fldl 16(%edx)
20fadd %st(0),%st(0)
21fldl 56(%edx)
22fxch %st(4)
23fmull crypto_scalarmult_curve25519_athlon_scale
24fldl 72(%edx)
25fmul %st(4),%st(0)
26fldl 64(%edx)
27fmul %st(4),%st(0)
28faddp %st(0),%st(1)
29fxch %st(4)
30fstl 0(%esp)
31fxch %st(3)
32fstl 8(%esp)
33fxch %st(3)
34fmull 64(%edx)
35faddp %st(0),%st(1)
36fldl 48(%edx)
37fxch %st(5)
38fmul %st(0),%st(3)
39fxch %st(3)
40faddp %st(0),%st(1)
41fxch %st(2)
42fadd %st(0),%st(0)
43fldl 56(%edx)
44fmul %st(2),%st(0)
45faddp %st(0),%st(4)
46fxch %st(1)
47fstl 16(%esp)
48fldl 40(%edx)
49fxch %st(5)
50fmul %st(0),%st(1)
51fxch %st(1)
52faddp %st(0),%st(3)
53fadd %st(0),%st(0)
54fstpl 48(%esp)
55fldl 24(%edx)
56fadd %st(0),%st(0)
57fstl 24(%esp)
58fldl 48(%edx)
59fmul %st(1),%st(0)
60faddp %st(0),%st(4)
61fmul %st(4),%st(0)
62faddp %st(0),%st(2)
63fxch %st(3)
64fadd %st(0),%st(0)
65fstpl 40(%esp)
66fldl 32(%edx)
67fmul %st(0),%st(0)
68faddp %st(0),%st(1)
69fldl crypto_scalarmult_curve25519_athlon_alpha230
70fadd %st(1),%st(0)
71fsubl crypto_scalarmult_curve25519_athlon_alpha230
72fsubr %st(0),%st(1)
73fldl 8(%esp)
74fldl 72(%edx)
75fmul %st(0),%st(1)
76fldl 16(%esp)
77fmul %st(0),%st(1)
78fldl 64(%edx)
79fmul %st(0),%st(1)
80fxch %st(1)
81faddp %st(0),%st(3)
82fldl 24(%esp)
83fmul %st(0),%st(1)
84fxch %st(1)
85faddp %st(0),%st(2)
86fldl 32(%edx)
87fadd %st(0),%st(0)
88fstl 32(%esp)
89fmull 40(%edx)
90faddp %st(0),%st(6)
91fxch %st(3)
92faddp %st(0),%st(5)
93fldl crypto_scalarmult_curve25519_athlon_alpha255
94fadd %st(5),%st(0)
95fsubl crypto_scalarmult_curve25519_athlon_alpha255
96fsubr %st(0),%st(5)
97fldl 56(%edx)
98fmul %st(0),%st(4)
99fxch %st(4)
100faddp %st(0),%st(3)
101fldl 32(%esp)
102fmul %st(0),%st(4)
103fxch %st(4)
104faddp %st(0),%st(2)
105fldl 48(%edx)
106fmul %st(0),%st(4)
107fxch %st(4)
108faddp %st(0),%st(3)
109fxch %st(3)
110fmull 40(%esp)
111faddp %st(0),%st(1)
112fxch %st(3)
113fstpl 64(%ecx)
114fldl 40(%edx)
115fmul %st(0),%st(0)
116faddp %st(0),%st(1)
117fxch %st(2)
118fmull crypto_scalarmult_curve25519_athlon_scale
119fxch %st(3)
120fstpl 72(%ecx)
121faddp %st(0),%st(1)
122fmull crypto_scalarmult_curve25519_athlon_scale
123fldl 24(%esp)
124fmull 72(%edx)
125fldl 0(%edx)
126fmul %st(0),%st(0)
127faddp %st(0),%st(2)
128fldl 32(%esp)
129fmull 64(%edx)
130faddp %st(0),%st(1)
131fldl 0(%esp)
132fmull 8(%edx)
133faddp %st(0),%st(3)
134fldl 40(%esp)
135fmull 56(%edx)
136faddp %st(0),%st(1)
137fldl crypto_scalarmult_curve25519_athlon_alpha26
138fadd %st(2),%st(0)
139fsubl crypto_scalarmult_curve25519_athlon_alpha26
140fsubr %st(0),%st(2)
141faddp %st(0),%st(3)
142fldl crypto_scalarmult_curve25519_athlon_alpha51
143fadd %st(3),%st(0)
144fsubl crypto_scalarmult_curve25519_athlon_alpha51
145fsubr %st(0),%st(3)
146fldl 48(%edx)
147fmul %st(0),%st(0)
148faddp %st(0),%st(2)
149fxch %st(1)
150fmull crypto_scalarmult_curve25519_athlon_scale
151fldl 0(%esp)
152fmull 16(%edx)
153faddp %st(0),%st(1)
154fldl 8(%edx)
155fmul %st(0),%st(0)
156faddp %st(0),%st(1)
157faddp %st(0),%st(1)
158fldl crypto_scalarmult_curve25519_athlon_alpha77
159fadd %st(1),%st(0)
160fsubl crypto_scalarmult_curve25519_athlon_alpha77
161fsubr %st(0),%st(1)
162fxch %st(2)
163fstpl 0(%ecx)
164fldl 32(%esp)
165fmull 72(%edx)
166fldl 40(%esp)
167fmull 64(%edx)
168faddp %st(0),%st(1)
169fldl 48(%esp)
170fmull 56(%edx)
171faddp %st(0),%st(1)
172fmull crypto_scalarmult_curve25519_athlon_scale
173fldl 0(%esp)
174fmull 24(%edx)
175faddp %st(0),%st(1)
176fldl 8(%esp)
177fmull 16(%edx)
178faddp %st(0),%st(1)
179faddp %st(0),%st(2)
180fldl crypto_scalarmult_curve25519_athlon_alpha102
181fadd %st(2),%st(0)
182fsubl crypto_scalarmult_curve25519_athlon_alpha102
183fsubr %st(0),%st(2)
184fxch %st(3)
185fstpl 8(%ecx)
186fldl 40(%esp)
187fmull 72(%edx)
188fldl 48(%esp)
189fmull 64(%edx)
190faddp %st(0),%st(1)
191fldl 56(%edx)
192fmul %st(0),%st(0)
193faddp %st(0),%st(1)
194fmull crypto_scalarmult_curve25519_athlon_scale
195fldl 0(%esp)
196fmull 32(%edx)
197faddp %st(0),%st(1)
198fldl 8(%esp)
199fmull 24(%edx)
200faddp %st(0),%st(1)
201fldl 16(%edx)
202fmul %st(0),%st(0)
203faddp %st(0),%st(1)
204faddp %st(0),%st(3)
205fldl crypto_scalarmult_curve25519_athlon_alpha128
206fadd %st(3),%st(0)
207fsubl crypto_scalarmult_curve25519_athlon_alpha128
208fsubr %st(0),%st(3)
209fxch %st(1)
210fstpl 16(%ecx)
211fldl 48(%esp)
212fldl 72(%edx)
213fmul %st(0),%st(1)
214fmul %st(5),%st(0)
215fxch %st(5)
216fmull 64(%edx)
217faddp %st(0),%st(1)
218fmull crypto_scalarmult_curve25519_athlon_scale
219fldl 0(%esp)
220fmull 40(%edx)
221faddp %st(0),%st(1)
222fldl 8(%esp)
223fmull 32(%edx)
224faddp %st(0),%st(1)
225fldl 16(%esp)
226fmull 24(%edx)
227faddp %st(0),%st(1)
228faddp %st(0),%st(1)
229fldl crypto_scalarmult_curve25519_athlon_alpha153
230fadd %st(1),%st(0)
231fsubl crypto_scalarmult_curve25519_athlon_alpha153
232fsubr %st(0),%st(1)
233fxch %st(2)
234fstpl 24(%ecx)
235fldl 64(%edx)
236fmul %st(0),%st(0)
237faddp %st(0),%st(4)
238fxch %st(3)
239fmull crypto_scalarmult_curve25519_athlon_scale
240fldl 0(%esp)
241fmull 48(%edx)
242faddp %st(0),%st(1)
243fldl 8(%esp)
244fmull 40(%edx)
245faddp %st(0),%st(1)
246fldl 16(%esp)
247fmull 32(%edx)
248faddp %st(0),%st(1)
249fldl 24(%edx)
250fmul %st(0),%st(0)
251faddp %st(0),%st(1)
252faddp %st(0),%st(1)
253fldl crypto_scalarmult_curve25519_athlon_alpha179
254fadd %st(1),%st(0)
255fsubl crypto_scalarmult_curve25519_athlon_alpha179
256fsubr %st(0),%st(1)
257fldl 64(%edx)
258fadd %st(0),%st(0)
259fmull 72(%edx)
260fmull crypto_scalarmult_curve25519_athlon_scale
261fldl 0(%esp)
262fmull 56(%edx)
263faddp %st(0),%st(1)
264fldl 8(%esp)
265fmull 48(%edx)
266faddp %st(0),%st(1)
267fldl 16(%esp)
268fmull 40(%edx)
269faddp %st(0),%st(1)
270fldl 24(%esp)
271fmull 32(%edx)
272faddp %st(0),%st(1)
273faddp %st(0),%st(1)
274fldl crypto_scalarmult_curve25519_athlon_alpha204
275fadd %st(1),%st(0)
276fsubl crypto_scalarmult_curve25519_athlon_alpha204
277fsubr %st(0),%st(1)
278fldl 64(%ecx)
279faddp %st(0),%st(1)
280fldl crypto_scalarmult_curve25519_athlon_alpha230
281fadd %st(1),%st(0)
282fldl 72(%ecx)
283fxch %st(1)
284fsubl crypto_scalarmult_curve25519_athlon_alpha230
285fsubr %st(0),%st(2)
286faddp %st(0),%st(1)
287fxch %st(4)
288fstpl 32(%ecx)
289fxch %st(4)
290fstpl 40(%ecx)
291fxch %st(1)
292fstpl 48(%ecx)
293fstpl 56(%ecx)
294fxch %st(1)
295fstpl 64(%ecx)
296fstpl 72(%ecx)
297add %eax,%esp
298ret
diff --git a/nacl/crypto_scalarmult/curve25519/athlon/todouble.s b/nacl/crypto_scalarmult/curve25519/athlon/todouble.s
new file mode 100644
index 00000000..c37aa447
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/athlon/todouble.s
@@ -0,0 +1,144 @@
1.text
2.p2align 5
3.globl _crypto_scalarmult_curve25519_athlon_todouble
4.globl crypto_scalarmult_curve25519_athlon_todouble
5_crypto_scalarmult_curve25519_athlon_todouble:
6crypto_scalarmult_curve25519_athlon_todouble:
7mov %esp,%eax
8and $31,%eax
9add $96,%eax
10sub %eax,%esp
11movl 8(%esp,%eax),%ecx
12movl 0(%ecx),%edx
13movl $0x43300000,4(%esp)
14movl %edx,0(%esp)
15movl 4(%ecx),%edx
16and $0xffffff,%edx
17movl $0x45300000,12(%esp)
18movl %edx,8(%esp)
19movl 7(%ecx),%edx
20and $0xffffff,%edx
21movl $0x46b00000,20(%esp)
22movl %edx,16(%esp)
23movl 10(%ecx),%edx
24and $0xffffff,%edx
25movl $0x48300000,28(%esp)
26movl %edx,24(%esp)
27movl 13(%ecx),%edx
28and $0xffffff,%edx
29movl $0x49b00000,36(%esp)
30movl %edx,32(%esp)
31movl 16(%ecx),%edx
32movl $0x4b300000,44(%esp)
33movl %edx,40(%esp)
34movl 20(%ecx),%edx
35and $0xffffff,%edx
36movl $0x4d300000,52(%esp)
37movl %edx,48(%esp)
38movl 23(%ecx),%edx
39and $0xffffff,%edx
40movl $0x4eb00000,60(%esp)
41movl %edx,56(%esp)
42movl 26(%ecx),%edx
43and $0xffffff,%edx
44movl $0x50300000,68(%esp)
45movl %edx,64(%esp)
46movl 28(%ecx),%ecx
47shr $8,%ecx
48and $0x7fffff,%ecx
49movl $0x51b00000,76(%esp)
50movl %ecx,72(%esp)
51movl 4(%esp,%eax),%ecx
52fldl 72(%esp)
53fsubl crypto_scalarmult_curve25519_athlon_in9offset
54fldl crypto_scalarmult_curve25519_athlon_alpha255
55fadd %st(1),%st(0)
56fsubl crypto_scalarmult_curve25519_athlon_alpha255
57fsubr %st(0),%st(1)
58fldl 0(%esp)
59fsubl crypto_scalarmult_curve25519_athlon_in0offset
60fxch %st(1)
61fmull crypto_scalarmult_curve25519_athlon_scale
62faddp %st(0),%st(1)
63fldl crypto_scalarmult_curve25519_athlon_alpha26
64fadd %st(1),%st(0)
65fsubl crypto_scalarmult_curve25519_athlon_alpha26
66fsubr %st(0),%st(1)
67fxch %st(1)
68fstpl 0(%ecx)
69fldl 8(%esp)
70fsubl crypto_scalarmult_curve25519_athlon_in1offset
71faddp %st(0),%st(1)
72fldl crypto_scalarmult_curve25519_athlon_alpha51
73fadd %st(1),%st(0)
74fsubl crypto_scalarmult_curve25519_athlon_alpha51
75fsubr %st(0),%st(1)
76fxch %st(1)
77fstpl 8(%ecx)
78fldl 16(%esp)
79fsubl crypto_scalarmult_curve25519_athlon_in2offset
80faddp %st(0),%st(1)
81fldl crypto_scalarmult_curve25519_athlon_alpha77
82fadd %st(1),%st(0)
83fsubl crypto_scalarmult_curve25519_athlon_alpha77
84fsubr %st(0),%st(1)
85fxch %st(1)
86fstpl 16(%ecx)
87fldl 24(%esp)
88fsubl crypto_scalarmult_curve25519_athlon_in3offset
89faddp %st(0),%st(1)
90fldl crypto_scalarmult_curve25519_athlon_alpha102
91fadd %st(1),%st(0)
92fsubl crypto_scalarmult_curve25519_athlon_alpha102
93fsubr %st(0),%st(1)
94fxch %st(1)
95fstpl 24(%ecx)
96fldl 32(%esp)
97fsubl crypto_scalarmult_curve25519_athlon_in4offset
98faddp %st(0),%st(1)
99fldl crypto_scalarmult_curve25519_athlon_alpha128
100fadd %st(1),%st(0)
101fsubl crypto_scalarmult_curve25519_athlon_alpha128
102fsubr %st(0),%st(1)
103fxch %st(1)
104fstpl 32(%ecx)
105fldl 40(%esp)
106fsubl crypto_scalarmult_curve25519_athlon_in5offset
107faddp %st(0),%st(1)
108fldl crypto_scalarmult_curve25519_athlon_alpha153
109fadd %st(1),%st(0)
110fsubl crypto_scalarmult_curve25519_athlon_alpha153
111fsubr %st(0),%st(1)
112fxch %st(1)
113fstpl 40(%ecx)
114fldl 48(%esp)
115fsubl crypto_scalarmult_curve25519_athlon_in6offset
116faddp %st(0),%st(1)
117fldl crypto_scalarmult_curve25519_athlon_alpha179
118fadd %st(1),%st(0)
119fsubl crypto_scalarmult_curve25519_athlon_alpha179
120fsubr %st(0),%st(1)
121fxch %st(1)
122fstpl 48(%ecx)
123fldl 56(%esp)
124fsubl crypto_scalarmult_curve25519_athlon_in7offset
125faddp %st(0),%st(1)
126fldl crypto_scalarmult_curve25519_athlon_alpha204
127fadd %st(1),%st(0)
128fsubl crypto_scalarmult_curve25519_athlon_alpha204
129fsubr %st(0),%st(1)
130fxch %st(1)
131fstpl 56(%ecx)
132fldl 64(%esp)
133fsubl crypto_scalarmult_curve25519_athlon_in8offset
134faddp %st(0),%st(1)
135fldl crypto_scalarmult_curve25519_athlon_alpha230
136fadd %st(1),%st(0)
137fsubl crypto_scalarmult_curve25519_athlon_alpha230
138fsubr %st(0),%st(1)
139fxch %st(1)
140fstpl 64(%ecx)
141faddp %st(0),%st(1)
142fstpl 72(%ecx)
143add %eax,%esp
144ret
diff --git a/nacl/crypto_scalarmult/curve25519/checksum b/nacl/crypto_scalarmult/curve25519/checksum
new file mode 100644
index 00000000..ce2d395b
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/checksum
@@ -0,0 +1 @@
dacdae4a0f12353dfc66757f2fd1fff538fe6616115dace9afb8016a55be2a52
diff --git a/nacl/crypto_scalarmult/curve25519/donna_c64/api.h b/nacl/crypto_scalarmult/curve25519/donna_c64/api.h
new file mode 100644
index 00000000..60339596
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/donna_c64/api.h
@@ -0,0 +1,2 @@
1#define CRYPTO_BYTES 32
2#define CRYPTO_SCALARBYTES 32
diff --git a/nacl/crypto_scalarmult/curve25519/donna_c64/base.c b/nacl/crypto_scalarmult/curve25519/donna_c64/base.c
new file mode 100644
index 00000000..f33419e8
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/donna_c64/base.c
@@ -0,0 +1,8 @@
1#include "crypto_scalarmult.h"
2
3static const unsigned char basepoint[32] = {9};
4
5int crypto_scalarmult_base(unsigned char *q,const unsigned char *n)
6{
7 return crypto_scalarmult(q, n, basepoint);
8}
diff --git a/nacl/crypto_scalarmult/curve25519/donna_c64/implementors b/nacl/crypto_scalarmult/curve25519/donna_c64/implementors
new file mode 100644
index 00000000..0ce43280
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/donna_c64/implementors
@@ -0,0 +1 @@
Adam Langley (Google)
diff --git a/nacl/crypto_scalarmult/curve25519/donna_c64/smult.c b/nacl/crypto_scalarmult/curve25519/donna_c64/smult.c
new file mode 100644
index 00000000..6d26956b
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/donna_c64/smult.c
@@ -0,0 +1,477 @@
1/* Copyright 2008, Google Inc.
2 * All rights reserved.
3 *
4 * Code released into the public domain.
5 *
6 * curve25519-donna: Curve25519 elliptic curve, public key function
7 *
8 * http://code.google.com/p/curve25519-donna/
9 *
10 * Adam Langley <agl@imperialviolet.org>
11 *
12 * Derived from public domain C code by Daniel J. Bernstein <djb@cr.yp.to>
13 *
14 * More information about curve25519 can be found here
15 * http://cr.yp.to/ecdh.html
16 *
17 * djb's sample implementation of curve25519 is written in a special assembly
18 * language called qhasm and uses the floating point registers.
19 *
20 * This is, almost, a clean room reimplementation from the curve25519 paper. It
21 * uses many of the tricks described therein. Only the crecip function is taken
22 * from the sample implementation.
23 */
24
25#include <string.h>
26#include <stdint.h>
27#include "crypto_scalarmult.h"
28
29typedef uint8_t u8;
30typedef uint64_t felem;
31// This is a special gcc mode for 128-bit integers. It's implemented on 64-bit
32// platforms only as far as I know.
33typedef unsigned uint128_t __attribute__((mode(TI)));
34
35/* Sum two numbers: output += in */
36static void fsum(felem *output, const felem *in) {
37 unsigned i;
38 for (i = 0; i < 5; ++i) output[i] += in[i];
39}
40
41/* Find the difference of two numbers: output = in - output
42 * (note the order of the arguments!)
43 */
44static void fdifference_backwards(felem *ioutput, const felem *iin) {
45 static const int64_t twotothe51 = (1l << 51);
46 const int64_t *in = (const int64_t *) iin;
47 int64_t *out = (int64_t *) ioutput;
48
49 out[0] = in[0] - out[0];
50 out[1] = in[1] - out[1];
51 out[2] = in[2] - out[2];
52 out[3] = in[3] - out[3];
53 out[4] = in[4] - out[4];
54
55 // An arithmetic shift right of 63 places turns a positive number to 0 and a
56 // negative number to all 1's. This gives us a bitmask that lets us avoid
57 // side-channel prone branches.
58 int64_t t;
59
60#define NEGCHAIN(a,b) \
61 t = out[a] >> 63; \
62 out[a] += twotothe51 & t; \
63 out[b] -= 1 & t;
64
65#define NEGCHAIN19(a,b) \
66 t = out[a] >> 63; \
67 out[a] += twotothe51 & t; \
68 out[b] -= 19 & t;
69
70 NEGCHAIN(0, 1);
71 NEGCHAIN(1, 2);
72 NEGCHAIN(2, 3);
73 NEGCHAIN(3, 4);
74 NEGCHAIN19(4, 0);
75 NEGCHAIN(0, 1);
76 NEGCHAIN(1, 2);
77 NEGCHAIN(2, 3);
78 NEGCHAIN(3, 4);
79}
80
81/* Multiply a number by a scalar: output = in * scalar */
82static void fscalar_product(felem *output, const felem *in, const felem scalar) {
83 uint128_t a;
84
85 a = ((uint128_t) in[0]) * scalar;
86 output[0] = a & 0x7ffffffffffff;
87
88 a = ((uint128_t) in[1]) * scalar + (a >> 51);
89 output[1] = a & 0x7ffffffffffff;
90
91 a = ((uint128_t) in[2]) * scalar + (a >> 51);
92 output[2] = a & 0x7ffffffffffff;
93
94 a = ((uint128_t) in[3]) * scalar + (a >> 51);
95 output[3] = a & 0x7ffffffffffff;
96
97 a = ((uint128_t) in[4]) * scalar + (a >> 51);
98 output[4] = a & 0x7ffffffffffff;
99
100 output[0] += (a >> 51) * 19;
101}
102
103/* Multiply two numbers: output = in2 * in
104 *
105 * output must be distinct to both inputs. The inputs are reduced coefficient
106 * form, the output is not.
107 */
108static void fmul(felem *output, const felem *in2, const felem *in) {
109 uint128_t t[9];
110
111 t[0] = ((uint128_t) in[0]) * in2[0];
112 t[1] = ((uint128_t) in[0]) * in2[1] +
113 ((uint128_t) in[1]) * in2[0];
114 t[2] = ((uint128_t) in[0]) * in2[2] +
115 ((uint128_t) in[2]) * in2[0] +
116 ((uint128_t) in[1]) * in2[1];
117 t[3] = ((uint128_t) in[0]) * in2[3] +
118 ((uint128_t) in[3]) * in2[0] +
119 ((uint128_t) in[1]) * in2[2] +
120 ((uint128_t) in[2]) * in2[1];
121 t[4] = ((uint128_t) in[0]) * in2[4] +
122 ((uint128_t) in[4]) * in2[0] +
123 ((uint128_t) in[3]) * in2[1] +
124 ((uint128_t) in[1]) * in2[3] +
125 ((uint128_t) in[2]) * in2[2];
126 t[5] = ((uint128_t) in[4]) * in2[1] +
127 ((uint128_t) in[1]) * in2[4] +
128 ((uint128_t) in[2]) * in2[3] +
129 ((uint128_t) in[3]) * in2[2];
130 t[6] = ((uint128_t) in[4]) * in2[2] +
131 ((uint128_t) in[2]) * in2[4] +
132 ((uint128_t) in[3]) * in2[3];
133 t[7] = ((uint128_t) in[3]) * in2[4] +
134 ((uint128_t) in[4]) * in2[3];
135 t[8] = ((uint128_t) in[4]) * in2[4];
136
137 t[0] += t[5] * 19;
138 t[1] += t[6] * 19;
139 t[2] += t[7] * 19;
140 t[3] += t[8] * 19;
141
142 t[1] += t[0] >> 51;
143 t[0] &= 0x7ffffffffffff;
144 t[2] += t[1] >> 51;
145 t[1] &= 0x7ffffffffffff;
146 t[3] += t[2] >> 51;
147 t[2] &= 0x7ffffffffffff;
148 t[4] += t[3] >> 51;
149 t[3] &= 0x7ffffffffffff;
150 t[0] += 19 * (t[4] >> 51);
151 t[4] &= 0x7ffffffffffff;
152 t[1] += t[0] >> 51;
153 t[0] &= 0x7ffffffffffff;
154 t[2] += t[1] >> 51;
155 t[1] &= 0x7ffffffffffff;
156
157 output[0] = t[0];
158 output[1] = t[1];
159 output[2] = t[2];
160 output[3] = t[3];
161 output[4] = t[4];
162}
163
164static void
165fsquare(felem *output, const felem *in) {
166 uint128_t t[9];
167
168 t[0] = ((uint128_t) in[0]) * in[0];
169 t[1] = ((uint128_t) in[0]) * in[1] * 2;
170 t[2] = ((uint128_t) in[0]) * in[2] * 2 +
171 ((uint128_t) in[1]) * in[1];
172 t[3] = ((uint128_t) in[0]) * in[3] * 2 +
173 ((uint128_t) in[1]) * in[2] * 2;
174 t[4] = ((uint128_t) in[0]) * in[4] * 2 +
175 ((uint128_t) in[3]) * in[1] * 2 +
176 ((uint128_t) in[2]) * in[2];
177 t[5] = ((uint128_t) in[4]) * in[1] * 2 +
178 ((uint128_t) in[2]) * in[3] * 2;
179 t[6] = ((uint128_t) in[4]) * in[2] * 2 +
180 ((uint128_t) in[3]) * in[3];
181 t[7] = ((uint128_t) in[3]) * in[4] * 2;
182 t[8] = ((uint128_t) in[4]) * in[4];
183
184 t[0] += t[5] * 19;
185 t[1] += t[6] * 19;
186 t[2] += t[7] * 19;
187 t[3] += t[8] * 19;
188
189 t[1] += t[0] >> 51;
190 t[0] &= 0x7ffffffffffff;
191 t[2] += t[1] >> 51;
192 t[1] &= 0x7ffffffffffff;
193 t[3] += t[2] >> 51;
194 t[2] &= 0x7ffffffffffff;
195 t[4] += t[3] >> 51;
196 t[3] &= 0x7ffffffffffff;
197 t[0] += 19 * (t[4] >> 51);
198 t[4] &= 0x7ffffffffffff;
199 t[1] += t[0] >> 51;
200 t[0] &= 0x7ffffffffffff;
201
202 output[0] = t[0];
203 output[1] = t[1];
204 output[2] = t[2];
205 output[3] = t[3];
206 output[4] = t[4];
207}
208
209/* Take a little-endian, 32-byte number and expand it into polynomial form */
210static void
211fexpand(felem *output, const u8 *in) {
212 output[0] = *((const uint64_t *)(in)) & 0x7ffffffffffff;
213 output[1] = (*((const uint64_t *)(in+6)) >> 3) & 0x7ffffffffffff;
214 output[2] = (*((const uint64_t *)(in+12)) >> 6) & 0x7ffffffffffff;
215 output[3] = (*((const uint64_t *)(in+19)) >> 1) & 0x7ffffffffffff;
216 output[4] = (*((const uint64_t *)(in+25)) >> 4) & 0x7ffffffffffff;
217}
218
219/* Take a fully reduced polynomial form number and contract it into a
220 * little-endian, 32-byte array
221 */
222static void
223fcontract(u8 *output, const felem *input) {
224 uint128_t t[5];
225
226 t[0] = input[0];
227 t[1] = input[1];
228 t[2] = input[2];
229 t[3] = input[3];
230 t[4] = input[4];
231
232 t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
233 t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
234 t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
235 t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
236 t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
237
238 t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
239 t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
240 t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
241 t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
242 t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
243
244 /* now t is between 0 and 2^255-1, properly carried. */
245 /* case 1: between 0 and 2^255-20. case 2: between 2^255-19 and 2^255-1. */
246
247 t[0] += 19;
248
249 t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
250 t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
251 t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
252 t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
253 t[0] += 19 * (t[4] >> 51); t[4] &= 0x7ffffffffffff;
254
255 /* now between 19 and 2^255-1 in both cases, and offset by 19. */
256
257 t[0] += 0x8000000000000 - 19;
258 t[1] += 0x8000000000000 - 1;
259 t[2] += 0x8000000000000 - 1;
260 t[3] += 0x8000000000000 - 1;
261 t[4] += 0x8000000000000 - 1;
262
263 /* now between 2^255 and 2^256-20, and offset by 2^255. */
264
265 t[1] += t[0] >> 51; t[0] &= 0x7ffffffffffff;
266 t[2] += t[1] >> 51; t[1] &= 0x7ffffffffffff;
267 t[3] += t[2] >> 51; t[2] &= 0x7ffffffffffff;
268 t[4] += t[3] >> 51; t[3] &= 0x7ffffffffffff;
269 t[4] &= 0x7ffffffffffff;
270
271 *((uint64_t *)(output)) = t[0] | (t[1] << 51);
272 *((uint64_t *)(output+8)) = (t[1] >> 13) | (t[2] << 38);
273 *((uint64_t *)(output+16)) = (t[2] >> 26) | (t[3] << 25);
274 *((uint64_t *)(output+24)) = (t[3] >> 39) | (t[4] << 12);
275}
276
277/* Input: Q, Q', Q-Q'
278 * Output: 2Q, Q+Q'
279 *
280 * x2 z3: long form
281 * x3 z3: long form
282 * x z: short form, destroyed
283 * xprime zprime: short form, destroyed
284 * qmqp: short form, preserved
285 */
286static void
287fmonty(felem *x2, felem *z2, /* output 2Q */
288 felem *x3, felem *z3, /* output Q + Q' */
289 felem *x, felem *z, /* input Q */
290 felem *xprime, felem *zprime, /* input Q' */
291 const felem *qmqp /* input Q - Q' */) {
292 felem origx[5], origxprime[5], zzz[5], xx[5], zz[5], xxprime[5],
293 zzprime[5], zzzprime[5];
294
295 memcpy(origx, x, 5 * sizeof(felem));
296 fsum(x, z);
297 fdifference_backwards(z, origx); // does x - z
298
299 memcpy(origxprime, xprime, sizeof(felem) * 5);
300 fsum(xprime, zprime);
301 fdifference_backwards(zprime, origxprime);
302 fmul(xxprime, xprime, z);
303 fmul(zzprime, x, zprime);
304 memcpy(origxprime, xxprime, sizeof(felem) * 5);
305 fsum(xxprime, zzprime);
306 fdifference_backwards(zzprime, origxprime);
307 fsquare(x3, xxprime);
308 fsquare(zzzprime, zzprime);
309 fmul(z3, zzzprime, qmqp);
310
311 fsquare(xx, x);
312 fsquare(zz, z);
313 fmul(x2, xx, zz);
314 fdifference_backwards(zz, xx); // does zz = xx - zz
315 fscalar_product(zzz, zz, 121665);
316 fsum(zzz, xx);
317 fmul(z2, zz, zzz);
318}
319
320// -----------------------------------------------------------------------------
321// Maybe swap the contents of two felem arrays (@a and @b), each @len elements
322// long. Perform the swap iff @swap is non-zero.
323//
324// This function performs the swap without leaking any side-channel
325// information.
326// -----------------------------------------------------------------------------
327static void
328swap_conditional(felem *a, felem *b, unsigned len, felem iswap) {
329 unsigned i;
330 const felem swap = -iswap;
331
332 for (i = 0; i < len; ++i) {
333 const felem x = swap & (a[i] ^ b[i]);
334 a[i] ^= x;
335 b[i] ^= x;
336 }
337}
338
339/* Calculates nQ where Q is the x-coordinate of a point on the curve
340 *
341 * resultx/resultz: the x coordinate of the resulting curve point (short form)
342 * n: a little endian, 32-byte number
343 * q: a point of the curve (short form)
344 */
345static void
346cmult(felem *resultx, felem *resultz, const u8 *n, const felem *q) {
347 felem a[5] = {0}, b[5] = {1}, c[5] = {1}, d[5] = {0};
348 felem *nqpqx = a, *nqpqz = b, *nqx = c, *nqz = d, *t;
349 felem e[5] = {0}, f[5] = {1}, g[5] = {0}, h[5] = {1};
350 felem *nqpqx2 = e, *nqpqz2 = f, *nqx2 = g, *nqz2 = h;
351
352 unsigned i, j;
353
354 memcpy(nqpqx, q, sizeof(felem) * 5);
355
356 for (i = 0; i < 32; ++i) {
357 u8 byte = n[31 - i];
358 for (j = 0; j < 8; ++j) {
359 const felem bit = byte >> 7;
360
361 swap_conditional(nqx, nqpqx, 5, bit);
362 swap_conditional(nqz, nqpqz, 5, bit);
363 fmonty(nqx2, nqz2,
364 nqpqx2, nqpqz2,
365 nqx, nqz,
366 nqpqx, nqpqz,
367 q);
368 swap_conditional(nqx2, nqpqx2, 5, bit);
369 swap_conditional(nqz2, nqpqz2, 5, bit);
370
371 t = nqx;
372 nqx = nqx2;
373 nqx2 = t;
374 t = nqz;
375 nqz = nqz2;
376 nqz2 = t;
377 t = nqpqx;
378 nqpqx = nqpqx2;
379 nqpqx2 = t;
380 t = nqpqz;
381 nqpqz = nqpqz2;
382 nqpqz2 = t;
383
384 byte <<= 1;
385 }
386 }
387
388 memcpy(resultx, nqx, sizeof(felem) * 5);
389 memcpy(resultz, nqz, sizeof(felem) * 5);
390}
391
392// -----------------------------------------------------------------------------
393// Shamelessly copied from djb's code
394// -----------------------------------------------------------------------------
395static void
396crecip(felem *out, const felem *z) {
397 felem z2[5];
398 felem z9[5];
399 felem z11[5];
400 felem z2_5_0[5];
401 felem z2_10_0[5];
402 felem z2_20_0[5];
403 felem z2_50_0[5];
404 felem z2_100_0[5];
405 felem t0[5];
406 felem t1[5];
407 int i;
408
409 /* 2 */ fsquare(z2,z);
410 /* 4 */ fsquare(t1,z2);
411 /* 8 */ fsquare(t0,t1);
412 /* 9 */ fmul(z9,t0,z);
413 /* 11 */ fmul(z11,z9,z2);
414 /* 22 */ fsquare(t0,z11);
415 /* 2^5 - 2^0 = 31 */ fmul(z2_5_0,t0,z9);
416
417 /* 2^6 - 2^1 */ fsquare(t0,z2_5_0);
418 /* 2^7 - 2^2 */ fsquare(t1,t0);
419 /* 2^8 - 2^3 */ fsquare(t0,t1);
420 /* 2^9 - 2^4 */ fsquare(t1,t0);
421 /* 2^10 - 2^5 */ fsquare(t0,t1);
422 /* 2^10 - 2^0 */ fmul(z2_10_0,t0,z2_5_0);
423
424 /* 2^11 - 2^1 */ fsquare(t0,z2_10_0);
425 /* 2^12 - 2^2 */ fsquare(t1,t0);
426 /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
427 /* 2^20 - 2^0 */ fmul(z2_20_0,t1,z2_10_0);
428
429 /* 2^21 - 2^1 */ fsquare(t0,z2_20_0);
430 /* 2^22 - 2^2 */ fsquare(t1,t0);
431 /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
432 /* 2^40 - 2^0 */ fmul(t0,t1,z2_20_0);
433
434 /* 2^41 - 2^1 */ fsquare(t1,t0);
435 /* 2^42 - 2^2 */ fsquare(t0,t1);
436 /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { fsquare(t1,t0); fsquare(t0,t1); }
437 /* 2^50 - 2^0 */ fmul(z2_50_0,t0,z2_10_0);
438
439 /* 2^51 - 2^1 */ fsquare(t0,z2_50_0);
440 /* 2^52 - 2^2 */ fsquare(t1,t0);
441 /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
442 /* 2^100 - 2^0 */ fmul(z2_100_0,t1,z2_50_0);
443
444 /* 2^101 - 2^1 */ fsquare(t1,z2_100_0);
445 /* 2^102 - 2^2 */ fsquare(t0,t1);
446 /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { fsquare(t1,t0); fsquare(t0,t1); }
447 /* 2^200 - 2^0 */ fmul(t1,t0,z2_100_0);
448
449 /* 2^201 - 2^1 */ fsquare(t0,t1);
450 /* 2^202 - 2^2 */ fsquare(t1,t0);
451 /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { fsquare(t0,t1); fsquare(t1,t0); }
452 /* 2^250 - 2^0 */ fmul(t0,t1,z2_50_0);
453
454 /* 2^251 - 2^1 */ fsquare(t1,t0);
455 /* 2^252 - 2^2 */ fsquare(t0,t1);
456 /* 2^253 - 2^3 */ fsquare(t1,t0);
457 /* 2^254 - 2^4 */ fsquare(t0,t1);
458 /* 2^255 - 2^5 */ fsquare(t1,t0);
459 /* 2^255 - 21 */ fmul(out,t1,z11);
460}
461
462int
463crypto_scalarmult(u8 *mypublic, const u8 *secret, const u8 *basepoint) {
464 felem bp[5], x[5], z[5], zmone[5];
465 unsigned char e[32];
466 int i;
467 for (i = 0;i < 32;++i) e[i] = secret[i];
468 e[0] &= 248;
469 e[31] &= 127;
470 e[31] |= 64;
471 fexpand(bp, basepoint);
472 cmult(x, z, e, bp);
473 crecip(zmone, z);
474 fmul(z, x, zmone);
475 fcontract(mypublic, z);
476 return 0;
477}
diff --git a/nacl/crypto_scalarmult/curve25519/ref/api.h b/nacl/crypto_scalarmult/curve25519/ref/api.h
new file mode 100644
index 00000000..60339596
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/ref/api.h
@@ -0,0 +1,2 @@
1#define CRYPTO_BYTES 32
2#define CRYPTO_SCALARBYTES 32
diff --git a/nacl/crypto_scalarmult/curve25519/ref/base.c b/nacl/crypto_scalarmult/curve25519/ref/base.c
new file mode 100644
index 00000000..ac2d7eb4
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/ref/base.c
@@ -0,0 +1,16 @@
1/*
2version 20081011
3Matthew Dempsky
4Public domain.
5Derived from public domain code by D. J. Bernstein.
6*/
7
8#include "crypto_scalarmult.h"
9
10const unsigned char base[32] = {9};
11
12int crypto_scalarmult_base(unsigned char *q,
13 const unsigned char *n)
14{
15 return crypto_scalarmult(q,n,base);
16}
diff --git a/nacl/crypto_scalarmult/curve25519/ref/implementors b/nacl/crypto_scalarmult/curve25519/ref/implementors
new file mode 100644
index 00000000..aa551790
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/ref/implementors
@@ -0,0 +1 @@
Matthew Dempsky (Mochi Media)
diff --git a/nacl/crypto_scalarmult/curve25519/ref/smult.c b/nacl/crypto_scalarmult/curve25519/ref/smult.c
new file mode 100644
index 00000000..6a479558
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/ref/smult.c
@@ -0,0 +1,265 @@
1/*
2version 20081011
3Matthew Dempsky
4Public domain.
5Derived from public domain code by D. J. Bernstein.
6*/
7
8#include "crypto_scalarmult.h"
9
10static void add(unsigned int out[32],const unsigned int a[32],const unsigned int b[32])
11{
12 unsigned int j;
13 unsigned int u;
14 u = 0;
15 for (j = 0;j < 31;++j) { u += a[j] + b[j]; out[j] = u & 255; u >>= 8; }
16 u += a[31] + b[31]; out[31] = u;
17}
18
19static void sub(unsigned int out[32],const unsigned int a[32],const unsigned int b[32])
20{
21 unsigned int j;
22 unsigned int u;
23 u = 218;
24 for (j = 0;j < 31;++j) {
25 u += a[j] + 65280 - b[j];
26 out[j] = u & 255;
27 u >>= 8;
28 }
29 u += a[31] - b[31];
30 out[31] = u;
31}
32
33static void squeeze(unsigned int a[32])
34{
35 unsigned int j;
36 unsigned int u;
37 u = 0;
38 for (j = 0;j < 31;++j) { u += a[j]; a[j] = u & 255; u >>= 8; }
39 u += a[31]; a[31] = u & 127;
40 u = 19 * (u >> 7);
41 for (j = 0;j < 31;++j) { u += a[j]; a[j] = u & 255; u >>= 8; }
42 u += a[31]; a[31] = u;
43}
44
45static const unsigned int minusp[32] = {
46 19, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 128
47} ;
48
49static void freeze(unsigned int a[32])
50{
51 unsigned int aorig[32];
52 unsigned int j;
53 unsigned int negative;
54
55 for (j = 0;j < 32;++j) aorig[j] = a[j];
56 add(a,a,minusp);
57 negative = -((a[31] >> 7) & 1);
58 for (j = 0;j < 32;++j) a[j] ^= negative & (aorig[j] ^ a[j]);
59}
60
61static void mult(unsigned int out[32],const unsigned int a[32],const unsigned int b[32])
62{
63 unsigned int i;
64 unsigned int j;
65 unsigned int u;
66
67 for (i = 0;i < 32;++i) {
68 u = 0;
69 for (j = 0;j <= i;++j) u += a[j] * b[i - j];
70 for (j = i + 1;j < 32;++j) u += 38 * a[j] * b[i + 32 - j];
71 out[i] = u;
72 }
73 squeeze(out);
74}
75
76static void mult121665(unsigned int out[32],const unsigned int a[32])
77{
78 unsigned int j;
79 unsigned int u;
80
81 u = 0;
82 for (j = 0;j < 31;++j) { u += 121665 * a[j]; out[j] = u & 255; u >>= 8; }
83 u += 121665 * a[31]; out[31] = u & 127;
84 u = 19 * (u >> 7);
85 for (j = 0;j < 31;++j) { u += out[j]; out[j] = u & 255; u >>= 8; }
86 u += out[j]; out[j] = u;
87}
88
89static void square(unsigned int out[32],const unsigned int a[32])
90{
91 unsigned int i;
92 unsigned int j;
93 unsigned int u;
94
95 for (i = 0;i < 32;++i) {
96 u = 0;
97 for (j = 0;j < i - j;++j) u += a[j] * a[i - j];
98 for (j = i + 1;j < i + 32 - j;++j) u += 38 * a[j] * a[i + 32 - j];
99 u *= 2;
100 if ((i & 1) == 0) {
101 u += a[i / 2] * a[i / 2];
102 u += 38 * a[i / 2 + 16] * a[i / 2 + 16];
103 }
104 out[i] = u;
105 }
106 squeeze(out);
107}
108
109static void select(unsigned int p[64],unsigned int q[64],const unsigned int r[64],const unsigned int s[64],unsigned int b)
110{
111 unsigned int j;
112 unsigned int t;
113 unsigned int bminus1;
114
115 bminus1 = b - 1;
116 for (j = 0;j < 64;++j) {
117 t = bminus1 & (r[j] ^ s[j]);
118 p[j] = s[j] ^ t;
119 q[j] = r[j] ^ t;
120 }
121}
122
123static void mainloop(unsigned int work[64],const unsigned char e[32])
124{
125 unsigned int xzm1[64];
126 unsigned int xzm[64];
127 unsigned int xzmb[64];
128 unsigned int xzm1b[64];
129 unsigned int xznb[64];
130 unsigned int xzn1b[64];
131 unsigned int a0[64];
132 unsigned int a1[64];
133 unsigned int b0[64];
134 unsigned int b1[64];
135 unsigned int c1[64];
136 unsigned int r[32];
137 unsigned int s[32];
138 unsigned int t[32];
139 unsigned int u[32];
140 unsigned int i;
141 unsigned int j;
142 unsigned int b;
143 int pos;
144
145 for (j = 0;j < 32;++j) xzm1[j] = work[j];
146 xzm1[32] = 1;
147 for (j = 33;j < 64;++j) xzm1[j] = 0;
148
149 xzm[0] = 1;
150 for (j = 1;j < 64;++j) xzm[j] = 0;
151
152 for (pos = 254;pos >= 0;--pos) {
153 b = e[pos / 8] >> (pos & 7);
154 b &= 1;
155 select(xzmb,xzm1b,xzm,xzm1,b);
156 add(a0,xzmb,xzmb + 32);
157 sub(a0 + 32,xzmb,xzmb + 32);
158 add(a1,xzm1b,xzm1b + 32);
159 sub(a1 + 32,xzm1b,xzm1b + 32);
160 square(b0,a0);
161 square(b0 + 32,a0 + 32);
162 mult(b1,a1,a0 + 32);
163 mult(b1 + 32,a1 + 32,a0);
164 add(c1,b1,b1 + 32);
165 sub(c1 + 32,b1,b1 + 32);
166 square(r,c1 + 32);
167 sub(s,b0,b0 + 32);
168 mult121665(t,s);
169 add(u,t,b0);
170 mult(xznb,b0,b0 + 32);
171 mult(xznb + 32,s,u);
172 square(xzn1b,c1);
173 mult(xzn1b + 32,r,work);
174 select(xzm,xzm1,xznb,xzn1b,b);
175 }
176
177 for (j = 0;j < 64;++j) work[j] = xzm[j];
178}
179
180static void recip(unsigned int out[32],const unsigned int z[32])
181{
182 unsigned int z2[32];
183 unsigned int z9[32];
184 unsigned int z11[32];
185 unsigned int z2_5_0[32];
186 unsigned int z2_10_0[32];
187 unsigned int z2_20_0[32];
188 unsigned int z2_50_0[32];
189 unsigned int z2_100_0[32];
190 unsigned int t0[32];
191 unsigned int t1[32];
192 int i;
193
194 /* 2 */ square(z2,z);
195 /* 4 */ square(t1,z2);
196 /* 8 */ square(t0,t1);
197 /* 9 */ mult(z9,t0,z);
198 /* 11 */ mult(z11,z9,z2);
199 /* 22 */ square(t0,z11);
200 /* 2^5 - 2^0 = 31 */ mult(z2_5_0,t0,z9);
201
202 /* 2^6 - 2^1 */ square(t0,z2_5_0);
203 /* 2^7 - 2^2 */ square(t1,t0);
204 /* 2^8 - 2^3 */ square(t0,t1);
205 /* 2^9 - 2^4 */ square(t1,t0);
206 /* 2^10 - 2^5 */ square(t0,t1);
207 /* 2^10 - 2^0 */ mult(z2_10_0,t0,z2_5_0);
208
209 /* 2^11 - 2^1 */ square(t0,z2_10_0);
210 /* 2^12 - 2^2 */ square(t1,t0);
211 /* 2^20 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t0,t1); square(t1,t0); }
212 /* 2^20 - 2^0 */ mult(z2_20_0,t1,z2_10_0);
213
214 /* 2^21 - 2^1 */ square(t0,z2_20_0);
215 /* 2^22 - 2^2 */ square(t1,t0);
216 /* 2^40 - 2^20 */ for (i = 2;i < 20;i += 2) { square(t0,t1); square(t1,t0); }
217 /* 2^40 - 2^0 */ mult(t0,t1,z2_20_0);
218
219 /* 2^41 - 2^1 */ square(t1,t0);
220 /* 2^42 - 2^2 */ square(t0,t1);
221 /* 2^50 - 2^10 */ for (i = 2;i < 10;i += 2) { square(t1,t0); square(t0,t1); }
222 /* 2^50 - 2^0 */ mult(z2_50_0,t0,z2_10_0);
223
224 /* 2^51 - 2^1 */ square(t0,z2_50_0);
225 /* 2^52 - 2^2 */ square(t1,t0);
226 /* 2^100 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); }
227 /* 2^100 - 2^0 */ mult(z2_100_0,t1,z2_50_0);
228
229 /* 2^101 - 2^1 */ square(t1,z2_100_0);
230 /* 2^102 - 2^2 */ square(t0,t1);
231 /* 2^200 - 2^100 */ for (i = 2;i < 100;i += 2) { square(t1,t0); square(t0,t1); }
232 /* 2^200 - 2^0 */ mult(t1,t0,z2_100_0);
233
234 /* 2^201 - 2^1 */ square(t0,t1);
235 /* 2^202 - 2^2 */ square(t1,t0);
236 /* 2^250 - 2^50 */ for (i = 2;i < 50;i += 2) { square(t0,t1); square(t1,t0); }
237 /* 2^250 - 2^0 */ mult(t0,t1,z2_50_0);
238
239 /* 2^251 - 2^1 */ square(t1,t0);
240 /* 2^252 - 2^2 */ square(t0,t1);
241 /* 2^253 - 2^3 */ square(t1,t0);
242 /* 2^254 - 2^4 */ square(t0,t1);
243 /* 2^255 - 2^5 */ square(t1,t0);
244 /* 2^255 - 21 */ mult(out,t1,z11);
245}
246
247int crypto_scalarmult(unsigned char *q,
248 const unsigned char *n,
249 const unsigned char *p)
250{
251 unsigned int work[96];
252 unsigned char e[32];
253 unsigned int i;
254 for (i = 0;i < 32;++i) e[i] = n[i];
255 e[0] &= 248;
256 e[31] &= 127;
257 e[31] |= 64;
258 for (i = 0;i < 32;++i) work[i] = p[i];
259 mainloop(work,e);
260 recip(work + 32,work + 32);
261 mult(work + 64,work,work + 32);
262 freeze(work + 64);
263 for (i = 0;i < 32;++i) q[i] = work[64 + i];
264 return 0;
265}
diff --git a/nacl/crypto_scalarmult/curve25519/used b/nacl/crypto_scalarmult/curve25519/used
new file mode 100644
index 00000000..e69de29b
--- /dev/null
+++ b/nacl/crypto_scalarmult/curve25519/used
diff --git a/nacl/crypto_scalarmult/measure.c b/nacl/crypto_scalarmult/measure.c
new file mode 100644
index 00000000..0c7265d5
--- /dev/null
+++ b/nacl/crypto_scalarmult/measure.c
@@ -0,0 +1,61 @@
1#include <stdlib.h>
2#include "randombytes.h"
3#include "cpucycles.h"
4#include "crypto_scalarmult.h"
5
6extern void printentry(long long,const char *,long long *,long long);
7extern unsigned char *alignedcalloc(unsigned long long);
8extern const char *primitiveimplementation;
9extern const char *implementationversion;
10extern const char *sizenames[];
11extern const long long sizes[];
12extern void allocate(void);
13extern void measure(void);
14
15const char *primitiveimplementation = crypto_scalarmult_IMPLEMENTATION;
16const char *implementationversion = crypto_scalarmult_VERSION;
17const char *sizenames[] = { "outputbytes", "scalarbytes", 0 };
18const long long sizes[] = { crypto_scalarmult_BYTES, crypto_scalarmult_SCALARBYTES };
19
20static unsigned char *m;
21static unsigned char *n;
22static unsigned char *p;
23static unsigned char *q;
24
25void preallocate(void)
26{
27}
28
29void allocate(void)
30{
31 m = alignedcalloc(crypto_scalarmult_SCALARBYTES);
32 n = alignedcalloc(crypto_scalarmult_SCALARBYTES);
33 p = alignedcalloc(crypto_scalarmult_BYTES);
34 q = alignedcalloc(crypto_scalarmult_BYTES);
35}
36
37#define TIMINGS 63
38static long long cycles[TIMINGS + 1];
39
40void measure(void)
41{
42 int i;
43 int loop;
44
45 for (loop = 0;loop < LOOPS;++loop) {
46 randombytes(m,crypto_scalarmult_SCALARBYTES);
47 randombytes(n,crypto_scalarmult_SCALARBYTES);
48 for (i = 0;i <= TIMINGS;++i) {
49 cycles[i] = cpucycles();
50 crypto_scalarmult_base(p,m);
51 }
52 for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i];
53 printentry(-1,"base_cycles",cycles,TIMINGS);
54 for (i = 0;i <= TIMINGS;++i) {
55 cycles[i] = cpucycles();
56 crypto_scalarmult(q,n,p);
57 }
58 for (i = 0;i < TIMINGS;++i) cycles[i] = cycles[i + 1] - cycles[i];
59 printentry(-1,"cycles",cycles,TIMINGS);
60 }
61}
diff --git a/nacl/crypto_scalarmult/try.c b/nacl/crypto_scalarmult/try.c
new file mode 100644
index 00000000..560ce493
--- /dev/null
+++ b/nacl/crypto_scalarmult/try.c
@@ -0,0 +1,126 @@
1/*
2 * crypto_scalarmult/try.c version 20090118
3 * D. J. Bernstein
4 * Public domain.
5 */
6
7#include <stdlib.h>
8#include "crypto_scalarmult.h"
9
10extern unsigned char *alignedcalloc(unsigned long long);
11
12const char *primitiveimplementation = crypto_scalarmult_IMPLEMENTATION;
13
14#define mlen crypto_scalarmult_SCALARBYTES
15#define nlen crypto_scalarmult_SCALARBYTES
16#define plen crypto_scalarmult_BYTES
17#define qlen crypto_scalarmult_BYTES
18#define rlen crypto_scalarmult_BYTES
19
20static unsigned char *m;
21static unsigned char *n;
22static unsigned char *p;
23static unsigned char *q;
24static unsigned char *r;
25
26static unsigned char *m2;
27static unsigned char *n2;
28static unsigned char *p2;
29static unsigned char *q2;
30static unsigned char *r2;
31
32void preallocate(void)
33{
34}
35
36void allocate(void)
37{
38 m = alignedcalloc(mlen);
39 n = alignedcalloc(nlen);
40 p = alignedcalloc(plen);
41 q = alignedcalloc(qlen);
42 r = alignedcalloc(rlen);
43 m2 = alignedcalloc(mlen + crypto_scalarmult_BYTES);
44 n2 = alignedcalloc(nlen + crypto_scalarmult_BYTES);
45 p2 = alignedcalloc(plen + crypto_scalarmult_BYTES);
46 q2 = alignedcalloc(qlen + crypto_scalarmult_BYTES);
47 r2 = alignedcalloc(rlen + crypto_scalarmult_BYTES);
48}
49
50void predoit(void)
51{
52}
53
54void doit(void)
55{
56 crypto_scalarmult(q,n,p);
57 crypto_scalarmult_base(r,n);
58}
59
60char checksum[crypto_scalarmult_BYTES * 2 + 1];
61
62const char *checksum_compute(void)
63{
64 long long i;
65 long long j;
66 long long tests;
67
68 for (i = 0;i < mlen;++i) m[i] = i;
69 for (i = 0;i < nlen;++i) n[i] = i + 1;
70 for (i = 0;i < plen;++i) p[i] = i + 2;
71 for (i = 0;i < qlen;++i) q[i] = i + 3;
72 for (i = 0;i < rlen;++i) r[i] = i + 4;
73
74 for (i = -16;i < 0;++i) p[i] = random();
75 for (i = -16;i < 0;++i) n[i] = random();
76 for (i = plen;i < plen + 16;++i) p[i] = random();
77 for (i = nlen;i < nlen + 16;++i) n[i] = random();
78 for (i = -16;i < plen + 16;++i) p2[i] = p[i];
79 for (i = -16;i < nlen + 16;++i) n2[i] = n[i];
80
81 if (crypto_scalarmult_base(p,n) != 0) return "crypto_scalarmult_base returns nonzero";
82
83 for (i = -16;i < nlen + 16;++i) if (n2[i] != n[i]) return "crypto_scalarmult_base overwrites input";
84 for (i = -16;i < 0;++i) if (p2[i] != p[i]) return "crypto_scalarmult_base writes before output";
85 for (i = plen;i < plen + 16;++i) if (p2[i] != p[i]) return "crypto_scalarmult_base writes after output";
86
87 for (tests = 0;tests < 100;++tests) {
88 for (i = -16;i < 0;++i) q[i] = random();
89 for (i = -16;i < 0;++i) p[i] = random();
90 for (i = -16;i < 0;++i) m[i] = random();
91 for (i = qlen;i < qlen + 16;++i) q[i] = random();
92 for (i = plen;i < plen + 16;++i) p[i] = random();
93 for (i = mlen;i < mlen + 16;++i) m[i] = random();
94 for (i = -16;i < qlen + 16;++i) q2[i] = q[i];
95 for (i = -16;i < plen + 16;++i) p2[i] = p[i];
96 for (i = -16;i < mlen + 16;++i) m2[i] = m[i];
97
98 if (crypto_scalarmult(q,m,p) != 0) return "crypto_scalarmult returns nonzero";
99
100 for (i = -16;i < mlen + 16;++i) if (m2[i] != m[i]) return "crypto_scalarmult overwrites n input";
101 for (i = -16;i < plen + 16;++i) if (p2[i] != p[i]) return "crypto_scalarmult overwrites p input";
102 for (i = -16;i < 0;++i) if (q2[i] != q[i]) return "crypto_scalarmult writes before output";
103 for (i = qlen;i < qlen + 16;++i) if (q2[i] != q[i]) return "crypto_scalarmult writes after output";
104
105 if (crypto_scalarmult(m2,m2,p) != 0) return "crypto_scalarmult returns nonzero";
106 for (i = 0;i < qlen;++i) if (q[i] != m2[i]) return "crypto_scalarmult does not handle n overlap";
107 for (i = 0;i < qlen;++i) m2[i] = m[i];
108
109 if (crypto_scalarmult(p2,m2,p2) != 0) return "crypto_scalarmult returns nonzero";
110 for (i = 0;i < qlen;++i) if (q[i] != p2[i]) return "crypto_scalarmult does not handle p overlap";
111
112 if (crypto_scalarmult(r,n,q) != 0) return "crypto_scalarmult returns nonzero";
113 if (crypto_scalarmult(q,n,p) != 0) return "crypto_scalarmult returns nonzero";
114 if (crypto_scalarmult(p,m,q) != 0) return "crypto_scalarmult returns nonzero";
115 for (j = 0;j < plen;++j) if (p[j] != r[j]) return "crypto_scalarmult not associative";
116 for (j = 0;j < mlen;++j) m[j] ^= q[j % qlen];
117 for (j = 0;j < nlen;++j) n[j] ^= p[j % plen];
118 }
119
120 for (i = 0;i < crypto_scalarmult_BYTES;++i) {
121 checksum[2 * i] = "0123456789abcdef"[15 & (p[i] >> 4)];
122 checksum[2 * i + 1] = "0123456789abcdef"[15 & p[i]];
123 }
124 checksum[2 * i] = 0;
125 return 0;
126}
diff --git a/nacl/crypto_scalarmult/wrapper-base.cpp b/nacl/crypto_scalarmult/wrapper-base.cpp
new file mode 100644
index 00000000..f71ce19a
--- /dev/null
+++ b/nacl/crypto_scalarmult/wrapper-base.cpp
@@ -0,0 +1,11 @@
1#include <string>
2using std::string;
3#include "crypto_scalarmult.h"
4
5string crypto_scalarmult_base(const string &n)
6{
7 unsigned char q[crypto_scalarmult_BYTES];
8 if (n.size() != crypto_scalarmult_SCALARBYTES) throw "incorrect scalar length";
9 crypto_scalarmult_base(q,(const unsigned char *) n.c_str());
10 return string((char *) q,sizeof q);
11}
diff --git a/nacl/crypto_scalarmult/wrapper-mult.cpp b/nacl/crypto_scalarmult/wrapper-mult.cpp
new file mode 100644
index 00000000..fc693cf0
--- /dev/null
+++ b/nacl/crypto_scalarmult/wrapper-mult.cpp
@@ -0,0 +1,12 @@
1#include <string>
2using std::string;
3#include "crypto_scalarmult.h"
4
5string crypto_scalarmult(const string &n,const string &p)
6{
7 unsigned char q[crypto_scalarmult_BYTES];
8 if (n.size() != crypto_scalarmult_SCALARBYTES) throw "incorrect scalar length";
9 if (p.size() != crypto_scalarmult_BYTES) throw "incorrect element length";
10 crypto_scalarmult(q,(const unsigned char *) n.c_str(),(const unsigned char *) p.c_str());
11 return string((char *) q,sizeof q);
12}