-rw-r--r-- 1312 lib25519-20220726/crypto_dh/x25519/amd64-avx2-ns9l-maa5/fe25519_invert.c raw
#include "fe25519.h"
void fe25519_invert(fe25519_5l *r, const fe25519_5l *x)
{
fe25519_5l z2;
fe25519_5l z9;
fe25519_5l z11;
fe25519_5l z2_5_0;
fe25519_5l z2_10_0;
fe25519_5l z2_20_0;
fe25519_5l z2_50_0;
fe25519_5l z2_100_0;
fe25519_5l t;
/* 2 */ fe25519_square(&z2,x);
/* 4 */ fe25519_square(&t,&z2);
/* 8 */ fe25519_square(&t,&t);
/* 9 */ fe25519_mul(&z9,&t,x);
/* 11 */ fe25519_mul(&z11,&z9,&z2);
/* 22 */ fe25519_square(&t,&z11);
/* 2^5 - 2^0 = 31 */ fe25519_mul(&z2_5_0,&t,&z9);
/* 2^10 - 2^5 */ fe25519_nsquare(&t,&z2_5_0,5);
/* 2^10 - 2^0 */ fe25519_mul(&z2_10_0,&t,&z2_5_0);
/* 2^20 - 2^10 */ fe25519_nsquare(&t,&z2_10_0,10);
/* 2^20 - 2^0 */ fe25519_mul(&z2_20_0,&t,&z2_10_0);
/* 2^40 - 2^20 */ fe25519_nsquare(&t,&z2_20_0,20);
/* 2^40 - 2^0 */ fe25519_mul(&t,&t,&z2_20_0);
/* 2^50 - 2^10 */ fe25519_nsquare(&t,&t,10);
/* 2^50 - 2^0 */ fe25519_mul(&z2_50_0,&t,&z2_10_0);
/* 2^100 - 2^50 */ fe25519_nsquare(&t,&z2_50_0,50);
/* 2^100 - 2^0 */ fe25519_mul(&z2_100_0,&t,&z2_50_0);
/* 2^200 - 2^100 */ fe25519_nsquare(&t,&z2_100_0,100);
/* 2^200 - 2^0 */ fe25519_mul(&t,&t,&z2_100_0);
/* 2^250 - 2^50 */ fe25519_nsquare(&t,&t,50);
/* 2^250 - 2^0 */ fe25519_mul(&t,&t,&z2_50_0);
/* 2^255 - 2^5 */ fe25519_nsquare(&t,&t,5);
/* 2^255 - 21 */ fe25519_mul(r,&t,&z11);
}