diff options
Diffstat (limited to 'src/crypto/cipher/salsa20')
-rw-r--r-- | src/crypto/cipher/salsa20/xmm/salsa20_amd64_xmm6.s | 111 | ||||
-rw-r--r-- | src/crypto/cipher/salsa20/xmm/salsa20_x86_xmm5.s | 101 | ||||
-rw-r--r-- | src/crypto/cipher/salsa20/xmm/salsa20_xmm.c | 13 |
3 files changed, 10 insertions, 215 deletions
diff --git a/src/crypto/cipher/salsa20/xmm/salsa20_amd64_xmm6.s b/src/crypto/cipher/salsa20/xmm/salsa20_amd64_xmm6.s index ce75445..b85b4f9 100644 --- a/src/crypto/cipher/salsa20/xmm/salsa20_amd64_xmm6.s +++ b/src/crypto/cipher/salsa20/xmm/salsa20_amd64_xmm6.s @@ -333,116 +333,13 @@ # qhasm: stack64 bytes_backup -# qhasm: enter crypto_stream_salsa20_amd64_xmm6 -.text -.p2align 5 -.globl _crypto_stream_salsa20_amd64_xmm6 -.globl crypto_stream_salsa20_amd64_xmm6 -_crypto_stream_salsa20_amd64_xmm6: -crypto_stream_salsa20_amd64_xmm6: -mov %rsp,%r11 -and $31,%r11 -add $480,%r11 -sub %r11,%rsp - -# qhasm: r11_stack = r11_caller -# asm 1: movq <r11_caller=int64#9,>r11_stack=stack64#1 -# asm 2: movq <r11_caller=%r11,>r11_stack=352(%rsp) -movq %r11,352(%rsp) - -# qhasm: r12_stack = r12_caller -# asm 1: movq <r12_caller=int64#10,>r12_stack=stack64#2 -# asm 2: movq <r12_caller=%r12,>r12_stack=360(%rsp) -movq %r12,360(%rsp) - -# qhasm: r13_stack = r13_caller -# asm 1: movq <r13_caller=int64#11,>r13_stack=stack64#3 -# asm 2: movq <r13_caller=%r13,>r13_stack=368(%rsp) -movq %r13,368(%rsp) - -# qhasm: r14_stack = r14_caller -# asm 1: movq <r14_caller=int64#12,>r14_stack=stack64#4 -# asm 2: movq <r14_caller=%r14,>r14_stack=376(%rsp) -movq %r14,376(%rsp) - -# qhasm: r15_stack = r15_caller -# asm 1: movq <r15_caller=int64#13,>r15_stack=stack64#5 -# asm 2: movq <r15_caller=%r15,>r15_stack=384(%rsp) -movq %r15,384(%rsp) - -# qhasm: rbx_stack = rbx_caller -# asm 1: movq <rbx_caller=int64#14,>rbx_stack=stack64#6 -# asm 2: movq <rbx_caller=%rbx,>rbx_stack=392(%rsp) -movq %rbx,392(%rsp) - -# qhasm: rbp_stack = rbp_caller -# asm 1: movq <rbp_caller=int64#15,>rbp_stack=stack64#7 -# asm 2: movq <rbp_caller=%rbp,>rbp_stack=400(%rsp) -movq %rbp,400(%rsp) - -# qhasm: bytes = arg2 -# asm 1: mov <arg2=int64#2,>bytes=int64#6 -# asm 2: mov <arg2=%rsi,>bytes=%r9 -mov %rsi,%r9 - -# qhasm: out = arg1 -# asm 1: mov <arg1=int64#1,>out=int64#1 -# asm 2: mov <arg1=%rdi,>out=%rdi -mov %rdi,%rdi - -# qhasm: m = out -# asm 1: mov <out=int64#1,>m=int64#2 -# asm 2: mov <out=%rdi,>m=%rsi -mov %rdi,%rsi - -# qhasm: iv = arg3 -# asm 1: mov <arg3=int64#3,>iv=int64#3 -# asm 2: mov <arg3=%rdx,>iv=%rdx -mov %rdx,%rdx - -# qhasm: k = arg4 -# asm 1: mov <arg4=int64#4,>k=int64#8 -# asm 2: mov <arg4=%rcx,>k=%r10 -mov %rcx,%r10 - -# qhasm: unsigned>? bytes - 0 -# asm 1: cmp $0,<bytes=int64#6 -# asm 2: cmp $0,<bytes=%r9 -cmp $0,%r9 -# comment:fp stack unchanged by jump - -# qhasm: goto done if !unsigned> -jbe ._done - -# qhasm: a = 0 -# asm 1: mov $0,>a=int64#7 -# asm 2: mov $0,>a=%rax -mov $0,%rax - -# qhasm: i = bytes -# asm 1: mov <bytes=int64#6,>i=int64#4 -# asm 2: mov <bytes=%r9,>i=%rcx -mov %r9,%rcx - -# qhasm: while (i) { *out++ = a; --i } -rep stosb - -# qhasm: out -= bytes -# asm 1: sub <bytes=int64#6,<out=int64#1 -# asm 2: sub <bytes=%r9,<out=%rdi -sub %r9,%rdi -# comment:fp stack unchanged by jump - -# qhasm: goto start -jmp ._start - # qhasm: enter crypto_stream_salsa20_amd64_xmm6_xor .text .p2align 5 -.globl _crypto_stream_salsa20_amd64_xmm6_xor -.globl crypto_stream_salsa20_amd64_xmm6_xor -_crypto_stream_salsa20_amd64_xmm6_xor: -crypto_stream_salsa20_amd64_xmm6_xor: +.globl _fastd_salsa20_xmm_xor +.globl fastd_salsa20_xmm_xor +_fastd_salsa20_xmm_xor: +fastd_salsa20_xmm_xor: mov %rsp,%r11 and $31,%r11 add $480,%r11 diff --git a/src/crypto/cipher/salsa20/xmm/salsa20_x86_xmm5.s b/src/crypto/cipher/salsa20/xmm/salsa20_x86_xmm5.s index 408f201..73dcdf6 100644 --- a/src/crypto/cipher/salsa20/xmm/salsa20_x86_xmm5.s +++ b/src/crypto/cipher/salsa20/xmm/salsa20_x86_xmm5.s @@ -285,106 +285,13 @@ # qhasm: stack32 ctarget -# qhasm: enter crypto_stream_salsa20_x86_xmm5 -.text -.p2align 5 -.globl _crypto_stream_salsa20_x86_xmm5 -.globl crypto_stream_salsa20_x86_xmm5 -_crypto_stream_salsa20_x86_xmm5: -crypto_stream_salsa20_x86_xmm5: -mov %esp,%eax -and $31,%eax -add $704,%eax -sub %eax,%esp - -# qhasm: eax_stack = eax -# asm 1: movl <eax=int32#1,>eax_stack=stack32#1 -# asm 2: movl <eax=%eax,>eax_stack=0(%esp) -movl %eax,0(%esp) - -# qhasm: ebx_stack = ebx -# asm 1: movl <ebx=int32#4,>ebx_stack=stack32#2 -# asm 2: movl <ebx=%ebx,>ebx_stack=4(%esp) -movl %ebx,4(%esp) - -# qhasm: esi_stack = esi -# asm 1: movl <esi=int32#5,>esi_stack=stack32#3 -# asm 2: movl <esi=%esi,>esi_stack=8(%esp) -movl %esi,8(%esp) - -# qhasm: edi_stack = edi -# asm 1: movl <edi=int32#6,>edi_stack=stack32#4 -# asm 2: movl <edi=%edi,>edi_stack=12(%esp) -movl %edi,12(%esp) - -# qhasm: ebp_stack = ebp -# asm 1: movl <ebp=int32#7,>ebp_stack=stack32#5 -# asm 2: movl <ebp=%ebp,>ebp_stack=16(%esp) -movl %ebp,16(%esp) - -# qhasm: bytes = arg2 -# asm 1: movl <arg2=stack32#-2,>bytes=int32#3 -# asm 2: movl <arg2=8(%esp,%eax),>bytes=%edx -movl 8(%esp,%eax),%edx - -# qhasm: out = arg1 -# asm 1: movl <arg1=stack32#-1,>out=int32#6 -# asm 2: movl <arg1=4(%esp,%eax),>out=%edi -movl 4(%esp,%eax),%edi - -# qhasm: m = out -# asm 1: mov <out=int32#6,>m=int32#5 -# asm 2: mov <out=%edi,>m=%esi -mov %edi,%esi - -# qhasm: iv = arg4 -# asm 1: movl <arg4=stack32#-4,>iv=int32#4 -# asm 2: movl <arg4=16(%esp,%eax),>iv=%ebx -movl 16(%esp,%eax),%ebx - -# qhasm: k = arg5 -# asm 1: movl <arg5=stack32#-5,>k=int32#7 -# asm 2: movl <arg5=20(%esp,%eax),>k=%ebp -movl 20(%esp,%eax),%ebp - -# qhasm: unsigned>? bytes - 0 -# asm 1: cmp $0,<bytes=int32#3 -# asm 2: cmp $0,<bytes=%edx -cmp $0,%edx -# comment:fp stack unchanged by jump - -# qhasm: goto done if !unsigned> -jbe ._done - -# qhasm: a = 0 -# asm 1: mov $0,>a=int32#1 -# asm 2: mov $0,>a=%eax -mov $0,%eax - -# qhasm: i = bytes -# asm 1: mov <bytes=int32#3,>i=int32#2 -# asm 2: mov <bytes=%edx,>i=%ecx -mov %edx,%ecx - -# qhasm: while (i) { *out++ = a; --i } -rep stosb - -# qhasm: out -= bytes -# asm 1: subl <bytes=int32#3,<out=int32#6 -# asm 2: subl <bytes=%edx,<out=%edi -subl %edx,%edi -# comment:fp stack unchanged by jump - -# qhasm: goto start -jmp ._start - # qhasm: enter crypto_stream_salsa20_x86_xmm5_xor .text .p2align 5 -.globl _crypto_stream_salsa20_x86_xmm5_xor -.globl crypto_stream_salsa20_x86_xmm5_xor -_crypto_stream_salsa20_x86_xmm5_xor: -crypto_stream_salsa20_x86_xmm5_xor: +.globl _fastd_salsa20_xmm_xor +.globl fastd_salsa20_xmm_xor +_fastd_salsa20_xmm_xor: +fastd_salsa20_xmm_xor: mov %esp,%eax and $31,%eax add $704,%eax diff --git a/src/crypto/cipher/salsa20/xmm/salsa20_xmm.c b/src/crypto/cipher/salsa20/xmm/salsa20_xmm.c index 2025c98..1c8c721 100644 --- a/src/crypto/cipher/salsa20/xmm/salsa20_xmm.c +++ b/src/crypto/cipher/salsa20/xmm/salsa20_xmm.c @@ -42,17 +42,8 @@ #define KEYBYTES 32 -#ifdef __x86_64__ -#define crypto_stream_salsa20_xor crypto_stream_salsa20_amd64_xmm6_xor -#endif - -#ifdef __i386__ -#define crypto_stream_salsa20_xor crypto_stream_salsa20_x86_xmm5_xor -#endif - - /** The actual Salsa20 assembly implementation */ -int crypto_stream_salsa20_xor(unsigned char *c, const unsigned char *m, unsigned long long mlen, const unsigned char *n, const unsigned char *k); +int fastd_salsa20_xmm_xor(unsigned char *c, const unsigned char *m, unsigned long long mlen, const unsigned char *n, const unsigned char *k); /** The cipher state */ @@ -76,7 +67,7 @@ static fastd_cipher_state_t * salsa20_init(const uint8_t *key) { /** XORs data with the Salsa20 cipher stream */ static bool salsa20_crypt(const fastd_cipher_state_t *state, fastd_block128_t *out, const fastd_block128_t *in, size_t len, const uint8_t *iv) { - crypto_stream_salsa20_xor(out->b, in->b, len, iv, state->key); + fastd_salsa20_xmm_xor(out->b, in->b, len, iv, state->key); return true; } |