1 | .text
|
---|
2 |
|
---|
3 |
|
---|
4 |
|
---|
5 | .globl poly1305_init
|
---|
6 | .hidden poly1305_init
|
---|
7 | .globl poly1305_blocks
|
---|
8 | .hidden poly1305_blocks
|
---|
9 | .globl poly1305_emit
|
---|
10 | .hidden poly1305_emit
|
---|
11 |
|
---|
12 | .type poly1305_init,@function
|
---|
13 | .align 32
|
---|
14 | poly1305_init:
|
---|
15 | .cfi_startproc
|
---|
16 | xorq %rax,%rax
|
---|
17 | movq %rax,0(%rdi)
|
---|
18 | movq %rax,8(%rdi)
|
---|
19 | movq %rax,16(%rdi)
|
---|
20 |
|
---|
21 | cmpq $0,%rsi
|
---|
22 | je .Lno_key
|
---|
23 |
|
---|
24 | leaq poly1305_blocks(%rip),%r10
|
---|
25 | leaq poly1305_emit(%rip),%r11
|
---|
26 | movq $0x0ffffffc0fffffff,%rax
|
---|
27 | movq $0x0ffffffc0ffffffc,%rcx
|
---|
28 | andq 0(%rsi),%rax
|
---|
29 | andq 8(%rsi),%rcx
|
---|
30 | movq %rax,24(%rdi)
|
---|
31 | movq %rcx,32(%rdi)
|
---|
32 | movq %r10,0(%rdx)
|
---|
33 | movq %r11,8(%rdx)
|
---|
34 | movl $1,%eax
|
---|
35 | .Lno_key:
|
---|
36 | .byte 0xf3,0xc3
|
---|
37 | .cfi_endproc
|
---|
38 | .size poly1305_init,.-poly1305_init
|
---|
39 |
|
---|
40 | .type poly1305_blocks,@function
|
---|
41 | .align 32
|
---|
42 | poly1305_blocks:
|
---|
43 | .cfi_startproc
|
---|
44 | .Lblocks:
|
---|
45 | shrq $4,%rdx
|
---|
46 | jz .Lno_data
|
---|
47 |
|
---|
48 | pushq %rbx
|
---|
49 | .cfi_adjust_cfa_offset 8
|
---|
50 | .cfi_offset %rbx,-16
|
---|
51 | pushq %rbp
|
---|
52 | .cfi_adjust_cfa_offset 8
|
---|
53 | .cfi_offset %rbp,-24
|
---|
54 | pushq %r12
|
---|
55 | .cfi_adjust_cfa_offset 8
|
---|
56 | .cfi_offset %r12,-32
|
---|
57 | pushq %r13
|
---|
58 | .cfi_adjust_cfa_offset 8
|
---|
59 | .cfi_offset %r13,-40
|
---|
60 | pushq %r14
|
---|
61 | .cfi_adjust_cfa_offset 8
|
---|
62 | .cfi_offset %r14,-48
|
---|
63 | pushq %r15
|
---|
64 | .cfi_adjust_cfa_offset 8
|
---|
65 | .cfi_offset %r15,-56
|
---|
66 | .Lblocks_body:
|
---|
67 |
|
---|
68 | movq %rdx,%r15
|
---|
69 |
|
---|
70 | movq 24(%rdi),%r11
|
---|
71 | movq 32(%rdi),%r13
|
---|
72 |
|
---|
73 | movq 0(%rdi),%r14
|
---|
74 | movq 8(%rdi),%rbx
|
---|
75 | movq 16(%rdi),%rbp
|
---|
76 |
|
---|
77 | movq %r13,%r12
|
---|
78 | shrq $2,%r13
|
---|
79 | movq %r12,%rax
|
---|
80 | addq %r12,%r13
|
---|
81 | jmp .Loop
|
---|
82 |
|
---|
83 | .align 32
|
---|
84 | .Loop:
|
---|
85 | addq 0(%rsi),%r14
|
---|
86 | adcq 8(%rsi),%rbx
|
---|
87 | leaq 16(%rsi),%rsi
|
---|
88 | adcq %rcx,%rbp
|
---|
89 | mulq %r14
|
---|
90 | movq %rax,%r9
|
---|
91 | movq %r11,%rax
|
---|
92 | movq %rdx,%r10
|
---|
93 |
|
---|
94 | mulq %r14
|
---|
95 | movq %rax,%r14
|
---|
96 | movq %r11,%rax
|
---|
97 | movq %rdx,%r8
|
---|
98 |
|
---|
99 | mulq %rbx
|
---|
100 | addq %rax,%r9
|
---|
101 | movq %r13,%rax
|
---|
102 | adcq %rdx,%r10
|
---|
103 |
|
---|
104 | mulq %rbx
|
---|
105 | movq %rbp,%rbx
|
---|
106 | addq %rax,%r14
|
---|
107 | adcq %rdx,%r8
|
---|
108 |
|
---|
109 | imulq %r13,%rbx
|
---|
110 | addq %rbx,%r9
|
---|
111 | movq %r8,%rbx
|
---|
112 | adcq $0,%r10
|
---|
113 |
|
---|
114 | imulq %r11,%rbp
|
---|
115 | addq %r9,%rbx
|
---|
116 | movq $-4,%rax
|
---|
117 | adcq %rbp,%r10
|
---|
118 |
|
---|
119 | andq %r10,%rax
|
---|
120 | movq %r10,%rbp
|
---|
121 | shrq $2,%r10
|
---|
122 | andq $3,%rbp
|
---|
123 | addq %r10,%rax
|
---|
124 | addq %rax,%r14
|
---|
125 | adcq $0,%rbx
|
---|
126 | adcq $0,%rbp
|
---|
127 | movq %r12,%rax
|
---|
128 | decq %r15
|
---|
129 | jnz .Loop
|
---|
130 |
|
---|
131 | movq %r14,0(%rdi)
|
---|
132 | movq %rbx,8(%rdi)
|
---|
133 | movq %rbp,16(%rdi)
|
---|
134 |
|
---|
135 | movq 0(%rsp),%r15
|
---|
136 | .cfi_restore %r15
|
---|
137 | movq 8(%rsp),%r14
|
---|
138 | .cfi_restore %r14
|
---|
139 | movq 16(%rsp),%r13
|
---|
140 | .cfi_restore %r13
|
---|
141 | movq 24(%rsp),%r12
|
---|
142 | .cfi_restore %r12
|
---|
143 | movq 32(%rsp),%rbp
|
---|
144 | .cfi_restore %rbp
|
---|
145 | movq 40(%rsp),%rbx
|
---|
146 | .cfi_restore %rbx
|
---|
147 | leaq 48(%rsp),%rsp
|
---|
148 | .cfi_adjust_cfa_offset -48
|
---|
149 | .Lno_data:
|
---|
150 | .Lblocks_epilogue:
|
---|
151 | .byte 0xf3,0xc3
|
---|
152 | .cfi_endproc
|
---|
153 | .size poly1305_blocks,.-poly1305_blocks
|
---|
154 |
|
---|
155 | .type poly1305_emit,@function
|
---|
156 | .align 32
|
---|
157 | poly1305_emit:
|
---|
158 | .cfi_startproc
|
---|
159 | .Lemit:
|
---|
160 | movq 0(%rdi),%r8
|
---|
161 | movq 8(%rdi),%r9
|
---|
162 | movq 16(%rdi),%r10
|
---|
163 |
|
---|
164 | movq %r8,%rax
|
---|
165 | addq $5,%r8
|
---|
166 | movq %r9,%rcx
|
---|
167 | adcq $0,%r9
|
---|
168 | adcq $0,%r10
|
---|
169 | shrq $2,%r10
|
---|
170 | cmovnzq %r8,%rax
|
---|
171 | cmovnzq %r9,%rcx
|
---|
172 |
|
---|
173 | addq 0(%rdx),%rax
|
---|
174 | adcq 8(%rdx),%rcx
|
---|
175 | movq %rax,0(%rsi)
|
---|
176 | movq %rcx,8(%rsi)
|
---|
177 |
|
---|
178 | .byte 0xf3,0xc3
|
---|
179 | .cfi_endproc
|
---|
180 | .size poly1305_emit,.-poly1305_emit
|
---|
181 | .byte 80,111,108,121,49,51,48,53,32,102,111,114,32,120,56,54,95,54,52,44,32,67,82,89,80,84,79,71,65,77,83,32,98,121,32,60,97,112,112,114,111,64,111,112,101,110,115,115,108,46,111,114,103,62,0
|
---|
182 | .align 16
|
---|
183 | .globl xor128_encrypt_n_pad
|
---|
184 | .type xor128_encrypt_n_pad,@function
|
---|
185 | .align 16
|
---|
186 | xor128_encrypt_n_pad:
|
---|
187 | .cfi_startproc
|
---|
188 | subq %rdx,%rsi
|
---|
189 | subq %rdx,%rdi
|
---|
190 | movq %rcx,%r10
|
---|
191 | shrq $4,%rcx
|
---|
192 | jz .Ltail_enc
|
---|
193 | nop
|
---|
194 | .Loop_enc_xmm:
|
---|
195 | movdqu (%rsi,%rdx,1),%xmm0
|
---|
196 | pxor (%rdx),%xmm0
|
---|
197 | movdqu %xmm0,(%rdi,%rdx,1)
|
---|
198 | movdqa %xmm0,(%rdx)
|
---|
199 | leaq 16(%rdx),%rdx
|
---|
200 | decq %rcx
|
---|
201 | jnz .Loop_enc_xmm
|
---|
202 |
|
---|
203 | andq $15,%r10
|
---|
204 | jz .Ldone_enc
|
---|
205 |
|
---|
206 | .Ltail_enc:
|
---|
207 | movq $16,%rcx
|
---|
208 | subq %r10,%rcx
|
---|
209 | xorl %eax,%eax
|
---|
210 | .Loop_enc_byte:
|
---|
211 | movb (%rsi,%rdx,1),%al
|
---|
212 | xorb (%rdx),%al
|
---|
213 | movb %al,(%rdi,%rdx,1)
|
---|
214 | movb %al,(%rdx)
|
---|
215 | leaq 1(%rdx),%rdx
|
---|
216 | decq %r10
|
---|
217 | jnz .Loop_enc_byte
|
---|
218 |
|
---|
219 | xorl %eax,%eax
|
---|
220 | .Loop_enc_pad:
|
---|
221 | movb %al,(%rdx)
|
---|
222 | leaq 1(%rdx),%rdx
|
---|
223 | decq %rcx
|
---|
224 | jnz .Loop_enc_pad
|
---|
225 |
|
---|
226 | .Ldone_enc:
|
---|
227 | movq %rdx,%rax
|
---|
228 | .byte 0xf3,0xc3
|
---|
229 | .cfi_endproc
|
---|
230 | .size xor128_encrypt_n_pad,.-xor128_encrypt_n_pad
|
---|
231 |
|
---|
232 | .globl xor128_decrypt_n_pad
|
---|
233 | .type xor128_decrypt_n_pad,@function
|
---|
234 | .align 16
|
---|
235 | xor128_decrypt_n_pad:
|
---|
236 | .cfi_startproc
|
---|
237 | subq %rdx,%rsi
|
---|
238 | subq %rdx,%rdi
|
---|
239 | movq %rcx,%r10
|
---|
240 | shrq $4,%rcx
|
---|
241 | jz .Ltail_dec
|
---|
242 | nop
|
---|
243 | .Loop_dec_xmm:
|
---|
244 | movdqu (%rsi,%rdx,1),%xmm0
|
---|
245 | movdqa (%rdx),%xmm1
|
---|
246 | pxor %xmm0,%xmm1
|
---|
247 | movdqu %xmm1,(%rdi,%rdx,1)
|
---|
248 | movdqa %xmm0,(%rdx)
|
---|
249 | leaq 16(%rdx),%rdx
|
---|
250 | decq %rcx
|
---|
251 | jnz .Loop_dec_xmm
|
---|
252 |
|
---|
253 | pxor %xmm1,%xmm1
|
---|
254 | andq $15,%r10
|
---|
255 | jz .Ldone_dec
|
---|
256 |
|
---|
257 | .Ltail_dec:
|
---|
258 | movq $16,%rcx
|
---|
259 | subq %r10,%rcx
|
---|
260 | xorl %eax,%eax
|
---|
261 | xorq %r11,%r11
|
---|
262 | .Loop_dec_byte:
|
---|
263 | movb (%rsi,%rdx,1),%r11b
|
---|
264 | movb (%rdx),%al
|
---|
265 | xorb %r11b,%al
|
---|
266 | movb %al,(%rdi,%rdx,1)
|
---|
267 | movb %r11b,(%rdx)
|
---|
268 | leaq 1(%rdx),%rdx
|
---|
269 | decq %r10
|
---|
270 | jnz .Loop_dec_byte
|
---|
271 |
|
---|
272 | xorl %eax,%eax
|
---|
273 | .Loop_dec_pad:
|
---|
274 | movb %al,(%rdx)
|
---|
275 | leaq 1(%rdx),%rdx
|
---|
276 | decq %rcx
|
---|
277 | jnz .Loop_dec_pad
|
---|
278 |
|
---|
279 | .Ldone_dec:
|
---|
280 | movq %rdx,%rax
|
---|
281 | .byte 0xf3,0xc3
|
---|
282 | .cfi_endproc
|
---|
283 | .size xor128_decrypt_n_pad,.-xor128_decrypt_n_pad
|
---|
284 | .section ".note.gnu.property", "a"
|
---|
285 | .p2align 3
|
---|
286 | .long 1f - 0f
|
---|
287 | .long 4f - 1f
|
---|
288 | .long 5
|
---|
289 | 0:
|
---|
290 | # "GNU" encoded with .byte, since .asciz isn't supported
|
---|
291 | # on Solaris.
|
---|
292 | .byte 0x47
|
---|
293 | .byte 0x4e
|
---|
294 | .byte 0x55
|
---|
295 | .byte 0
|
---|
296 | 1:
|
---|
297 | .p2align 3
|
---|
298 | .long 0xc0000002
|
---|
299 | .long 3f - 2f
|
---|
300 | 2:
|
---|
301 | .long 3
|
---|
302 | 3:
|
---|
303 | .p2align 3
|
---|
304 | 4:
|
---|