ring 0.8.0

Safe, fast, small crypto using Rust.
Documentation
#if defined(__x86_64__)
.text	
.extern	GFp_ia32cap_P
.hidden GFp_ia32cap_P


.align	64
.Lord:
.quad	0xf3b9cac2fc632551, 0xbce6faada7179e84, 0xffffffffffffffff, 0xffffffff00000000
.LordK:
.quad	0xccd1c8aaee00bc4f






.globl	GFp_p256_scalar_mul_mont
.hidden GFp_p256_scalar_mul_mont
.type	GFp_p256_scalar_mul_mont,@function
.align	32
GFp_p256_scalar_mul_mont:
	pushq	%rbp
	pushq	%rbx
	pushq	%r12
	pushq	%r13

	movq	%rdx,%rbx

	movq	0(%rbx),%rcx
	movq	0(%rsi),%rax
	mulq	%rcx
	movq	%rax,%r8
	movq	%rdx,%r9

	movq	8(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r9
	adcq	$0,%rdx
	movq	%rdx,%r10

	movq	16(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r10
	adcq	$0,%rdx
	movq	%rdx,%r11

	movq	24(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%r12
	xorq	%r13,%r13


	movq	%r8,%rax
	mulq	.LordK(%rip)
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r8
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r9
	adcq	$0,%rdx
	addq	%rax,%r9

	movq	%rcx,%rbp
	adcq	%rdx,%r10
	adcq	$0,%rbp
	subq	%rcx,%r10
	sbbq	$0,%rbp

	movq	24+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r11
	adcq	$0,%rdx
	addq	%rax,%r11
	adcq	%rdx,%r12
	adcq	$0,%r13


	movq	8(%rbx),%rcx

	movq	0(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r9
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r10
	adcq	$0,%rdx
	addq	%rax,%r10
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	16(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r11
	adcq	$0,%rdx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	24(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r12
	adcq	$0,%rdx
	addq	%rax,%r12
	adcq	%rdx,%r13
	adcq	$0,%r8

	movq	%r9,%rax
	mulq	.LordK(%rip)
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r9
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r10
	adcq	$0,%rdx
	addq	%rax,%r10

	movq	%rcx,%rbp
	adcq	%rdx,%r11
	adcq	$0,%rbp
	subq	%rcx,%r11
	sbbq	$0,%rbp

	movq	24+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r12
	adcq	$0,%rdx
	addq	%rax,%r12
	adcq	%rdx,%r13
	adcq	$0,%r8

	movq	16(%rbx),%rcx

	movq	0(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r10
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r11
	adcq	$0,%rdx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	16(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r12
	adcq	$0,%rdx
	addq	%rax,%r12
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	24(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r13
	adcq	$0,%rdx
	addq	%rax,%r13
	adcq	%rdx,%r8
	adcq	$0,%r9

	movq	%r10,%rax
	mulq	.LordK(%rip)
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r10
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r11
	adcq	$0,%rdx
	addq	%rax,%r11

	movq	%rcx,%rbp
	adcq	%rdx,%r12
	adcq	$0,%rbp
	subq	%rcx,%r12
	sbbq	$0,%rbp

	movq	24+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r13
	adcq	$0,%rdx
	addq	%rax,%r13
	adcq	%rdx,%r8
	adcq	$0,%r9

	movq	24(%rbx),%rcx

	movq	0(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r12
	adcq	$0,%rdx
	addq	%rax,%r12
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	16(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r13
	adcq	$0,%rdx
	addq	%rax,%r13
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	24(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r8
	adcq	$0,%rdx
	addq	%rax,%r8
	adcq	%rdx,%r9
	adcq	$0,%r10

	movq	%r11,%rax
	mulq	.LordK(%rip)
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r12
	adcq	$0,%rdx
	addq	%rax,%r12

	movq	%rcx,%rbp
	adcq	%rdx,%r13
	adcq	$0,%rbp
	subq	%rcx,%r13
	sbbq	$0,%rbp

	movq	24+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r8
	adcq	$0,%rdx
	addq	%rax,%r8
	adcq	%rdx,%r9
	adcq	$0,%r10


	movq	%r12,%rsi
	movq	%r13,%r11
	movq	%r8,%rcx
	movq	%r9,%rbp

	subq	0+.Lord(%rip),%r12
	sbbq	8+.Lord(%rip),%r13
	sbbq	16+.Lord(%rip),%r8
	sbbq	24+.Lord(%rip),%r9
	sbbq	$0,%r10

	cmovcq	%rsi,%r12
	cmovcq	%r11,%r13
	cmovcq	%rcx,%r8
	cmovcq	%rbp,%r9

	movq	%r12,0(%rdi)
	movq	%r13,8(%rdi)
	movq	%r8,16(%rdi)
	movq	%r9,24(%rdi)

	popq	%r13
	popq	%r12
	popq	%rbx
	popq	%rbp
	.byte	0xf3,0xc3
.size	GFp_p256_scalar_mul_mont,.-GFp_p256_scalar_mul_mont





.globl	GFp_p256_scalar_sqr_rep_mont
.hidden GFp_p256_scalar_sqr_rep_mont
.type	GFp_p256_scalar_sqr_rep_mont,@function
.align	32
GFp_p256_scalar_sqr_rep_mont:

	pushq	%rbp
	pushq	%rbx
	pushq	%r12
	pushq	%r13
	pushq	%r14
	pushq	%r15

	movq	.LordK(%rip),%r15

	movq	%rdx,%r14

.Lord_sqr_loop:

	movq	0(%rsi),%rcx

	movq	8(%rsi),%rax
	mulq	%rcx
	movq	%rax,%r9
	movq	%rdx,%r10

	movq	16(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r10
	adcq	$0,%rdx
	movq	%rdx,%r11

	movq	24(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%r12

	movq	8(%rsi),%rcx

	movq	16(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	24(%rsi),%rax
	mulq	%rcx
	addq	%rbp,%r12
	adcq	$0,%rdx
	addq	%rax,%r12
	adcq	$0,%rdx
	movq	%rdx,%r13

	movq	16(%rsi),%rcx

	movq	24(%rsi),%rax
	mulq	%rcx
	addq	%rax,%r13
	adcq	$0,%rdx
	movq	%rdx,%rbx
	xorq	%rbp,%rbp

	addq	%r9,%r9
	adcq	%r10,%r10
	adcq	%r11,%r11
	adcq	%r12,%r12
	adcq	%r13,%r13
	adcq	%rbx,%rbx
	adcq	$0,%rbp

	movq	0(%rsi),%rax
	mulq	%rax
	movq	%rax,%r8
	movq	%rdx,%rcx

	movq	8(%rsi),%rax
	mulq	%rax
	addq	%rcx,%r9
	adcq	%rax,%r10
	adcq	$0,%rdx
	movq	%rdx,%rcx

	movq	16(%rsi),%rax
	mulq	%rax
	addq	%rcx,%r11
	adcq	%rax,%r12
	adcq	$0,%rdx
	movq	%rdx,%rcx

	movq	24(%rsi),%rax
	mulq	%rax
	addq	%rcx,%r13
	adcq	%rax,%rbx
	adcq	%rdx,%rbp
	movq	%rbp,%rsi


	movq	%r8,%rax
	mulq	%r15
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r8
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r9
	adcq	$0,%rdx
	addq	%rax,%r9

	movq	%rcx,%rbp
	adcq	%rdx,%r10
	adcq	$0,%rbp
	subq	%rcx,%r10
	sbbq	$0,%rbp

	movq	%rcx,%rax
	movq	%rcx,%rdx
	movq	%rcx,%r8
	shlq	$32,%rax
	shrq	$32,%rdx

	addq	%rbp,%r11
	adcq	$0,%r8
	subq	%rax,%r11
	sbbq	%rdx,%r8


	movq	%r9,%rax
	mulq	%r15
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r9
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r10
	adcq	$0,%rdx
	addq	%rax,%r10

	movq	%rcx,%rbp
	adcq	%rdx,%r11
	adcq	$0,%rbp
	subq	%rcx,%r11
	sbbq	$0,%rbp

	movq	%rcx,%rax
	movq	%rcx,%rdx
	movq	%rcx,%r9
	shlq	$32,%rax
	shrq	$32,%rdx

	addq	%rbp,%r8
	adcq	$0,%r9
	subq	%rax,%r8
	sbbq	%rdx,%r9


	movq	%r10,%rax
	mulq	%r15
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r10
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r11
	adcq	$0,%rdx
	addq	%rax,%r11

	movq	%rcx,%rbp
	adcq	%rdx,%r8
	adcq	$0,%rbp
	subq	%rcx,%r8
	sbbq	$0,%rbp

	movq	%rcx,%rax
	movq	%rcx,%rdx
	movq	%rcx,%r10
	shlq	$32,%rax
	shrq	$32,%rdx

	addq	%rbp,%r9
	adcq	$0,%r10
	subq	%rax,%r9
	sbbq	%rdx,%r10


	movq	%r11,%rax
	mulq	%r15
	movq	%rax,%rcx

	movq	0+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rax,%r11
	adcq	$0,%rdx
	movq	%rdx,%rbp

	movq	8+.Lord(%rip),%rax
	mulq	%rcx
	addq	%rbp,%r8
	adcq	$0,%rdx
	addq	%rax,%r8

	movq	%rcx,%rbp
	adcq	%rdx,%r9
	adcq	$0,%rbp
	subq	%rcx,%r9
	sbbq	$0,%rbp

	movq	%rcx,%rax
	movq	%rcx,%r11
	shlq	$32,%rax
	shrq	$32,%rcx

	addq	%rbp,%r10
	adcq	$0,%r11
	subq	%rax,%r10
	sbbq	%rcx,%r11
	xorq	%rcx,%rcx

	addq	%r12,%r8
	adcq	%r13,%r9
	adcq	%rbx,%r10
	adcq	%rsi,%r11
	adcq	$0,%rcx

	movq	%r8,%r12
	movq	%r9,%r13
	movq	%r10,%rbx
	movq	%r11,%rbp

	subq	0+.Lord(%rip),%r8
	sbbq	8+.Lord(%rip),%r9
	sbbq	16+.Lord(%rip),%r10
	sbbq	24+.Lord(%rip),%r11
	sbbq	$0,%rcx

	cmovcq	%r12,%r8
	cmovcq	%r13,%r9
	cmovcq	%rbx,%r10
	cmovcq	%rbp,%r11

	movq	%r8,0(%rdi)
	movq	%r9,8(%rdi)
	movq	%r10,16(%rdi)
	movq	%r11,24(%rdi)
	movq	%rdi,%rsi
	decq	%r14
	jne	.Lord_sqr_loop

	popq	%r15
	popq	%r14
	popq	%r13
	popq	%r12
	popq	%rbx
	popq	%rbp
	.byte	0xf3,0xc3
.size	GFp_p256_scalar_sqr_rep_mont,.-GFp_p256_scalar_sqr_rep_mont
#endif