-rw-r--r-- 259092 lib25519-20240928/command/lib25519-test_nP_montgomery25519.c raw
/* ----- nP/montgomery25519, derived from supercop/crypto_nP/try.c */
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdint.h>
#include <lib25519.h>
#include "lib25519_test.h"
#define fail ((ok = 0),printf)
static const char *nP_montgomery25519_checksums[] = {
"b861d66109b42359e5994ed57ae566827c345b65a9d0671700320b82888397ec",
"740924011f3448f65299f61b087f74a6eb9651a4203dfbf621d2bec54e149405",
} ;
static void (*crypto_nP)(unsigned char *,const unsigned char *,const unsigned char *);
#define crypto_nP_SCALARBYTES lib25519_nP_montgomery25519_SCALARBYTES
#define crypto_nP_POINTBYTES lib25519_nP_montgomery25519_POINTBYTES
static void *storage_nP_montgomery25519_q;
static unsigned char *test_nP_montgomery25519_q;
static void *storage_nP_montgomery25519_n;
static unsigned char *test_nP_montgomery25519_n;
static void *storage_nP_montgomery25519_p;
static unsigned char *test_nP_montgomery25519_p;
static void *storage_nP_montgomery25519_q2;
static unsigned char *test_nP_montgomery25519_q2;
static void *storage_nP_montgomery25519_n2;
static unsigned char *test_nP_montgomery25519_n2;
static void *storage_nP_montgomery25519_p2;
static unsigned char *test_nP_montgomery25519_p2;
#define precomputed_nP_montgomery25519_NUM 372
static const unsigned char precomputed_nP_montgomery25519_q_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,0,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_0[] = {22,165,108,86,5,154,20,29,152,42,38,184,15,197,6,22,9,228,189,48,3,19,228,73,57,251,178,27,117,180,121,83};
static const unsigned char precomputed_nP_montgomery25519_p_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,0,0,0};
static const unsigned char precomputed_nP_montgomery25519_q_1[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_1[] = {139,146,167,138,83,58,254,190,251,60,110,156,52,211,217,116,28,175,54,171,72,205,88,250,162,123,91,36,201,104,201,225};
static const unsigned char precomputed_nP_montgomery25519_p_1[] = {1,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_2[] = {129,42,27,226,56,122,209,122,33,165,197,59,204,245,117,180,65,210,211,35,205,129,134,7,75,25,155,208,55,142,9,28};
static const unsigned char precomputed_nP_montgomery25519_n_2[] = {40,99,197,149,12,76,46,216,65,163,184,95,88,169,52,102,10,143,162,20,164,177,134,75,36,187,91,135,65,113,164,111};
static const unsigned char precomputed_nP_montgomery25519_p_2[] = {2,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_3[] = {162,93,163,159,20,188,94,13,51,72,116,75,189,214,110,123,124,9,238,31,79,7,237,111,225,81,4,77,40,149,130,82};
static const unsigned char precomputed_nP_montgomery25519_n_3[] = {249,136,238,59,164,86,241,133,205,15,12,226,199,113,49,1,247,239,150,87,31,12,54,21,210,187,99,46,64,166,182,166};
static const unsigned char precomputed_nP_montgomery25519_p_3[] = {3,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_4[] = {121,223,164,139,202,179,32,228,109,181,229,181,139,0,181,124,140,230,145,47,130,223,137,147,17,118,27,113,92,100,228,98};
static const unsigned char precomputed_nP_montgomery25519_n_4[] = {45,15,68,93,105,161,236,142,132,222,64,65,61,38,44,243,32,161,134,170,84,232,175,213,242,206,236,93,30,166,38,12};
static const unsigned char precomputed_nP_montgomery25519_p_4[] = {4,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_5[] = {239,133,37,52,169,133,200,97,68,65,139,30,226,202,18,162,33,55,136,193,253,245,29,8,169,139,55,159,251,46,166,107};
static const unsigned char precomputed_nP_montgomery25519_n_5[] = {66,162,214,17,77,227,115,67,248,216,210,73,216,96,172,93,126,63,38,233,228,89,232,80,113,127,88,112,85,247,241,224};
static const unsigned char precomputed_nP_montgomery25519_p_5[] = {5,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_6[] = {66,245,111,3,98,139,24,189,155,145,236,234,46,217,98,153,28,247,110,223,14,222,218,185,48,86,154,56,134,240,21,93};
static const unsigned char precomputed_nP_montgomery25519_n_6[] = {176,167,216,65,10,75,148,78,76,151,92,161,168,237,252,14,170,191,18,24,113,151,192,59,92,204,29,110,25,193,162,76};
static const unsigned char precomputed_nP_montgomery25519_p_6[] = {6,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_7[] = {85,216,96,126,239,24,171,238,158,88,201,26,202,187,130,154,241,114,114,95,95,29,6,98,33,120,172,125,108,180,197,114};
static const unsigned char precomputed_nP_montgomery25519_n_7[] = {190,147,100,101,77,151,179,249,20,102,182,218,161,187,38,207,142,126,195,32,205,249,96,90,162,80,63,226,98,120,239,127};
static const unsigned char precomputed_nP_montgomery25519_p_7[] = {7,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_8[] = {247,143,27,107,199,100,117,167,157,168,246,0,110,30,208,91,218,135,95,226,47,159,110,22,230,94,31,219,179,141,240,71};
static const unsigned char precomputed_nP_montgomery25519_n_8[] = {147,215,107,156,104,176,12,226,26,128,179,131,210,202,169,59,227,81,62,36,35,82,151,139,126,209,74,57,26,207,219,102};
static const unsigned char precomputed_nP_montgomery25519_p_8[] = {8,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_9[] = {8,230,182,92,48,214,174,119,128,155,246,232,247,243,230,27,18,49,135,212,35,67,70,253,49,55,189,111,188,19,5,108};
static const unsigned char precomputed_nP_montgomery25519_n_9[] = {132,175,87,38,2,127,24,123,10,20,230,220,70,101,14,168,26,154,32,108,78,93,106,112,2,147,7,146,149,82,157,35};
static const unsigned char precomputed_nP_montgomery25519_p_9[] = {9,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_10[] = {135,110,236,86,44,66,16,135,102,160,234,251,75,169,40,162,23,252,170,56,119,186,208,82,4,133,157,1,170,36,83,77};
static const unsigned char precomputed_nP_montgomery25519_n_10[] = {193,95,146,115,121,195,161,67,226,160,12,126,178,128,86,146,245,113,187,78,36,100,116,199,49,41,122,79,39,152,203,40};
static const unsigned char precomputed_nP_montgomery25519_p_10[] = {10,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_11[] = {177,112,232,197,251,252,99,183,10,138,35,150,194,24,91,208,73,35,104,140,114,246,168,207,34,63,19,124,216,198,168,44};
static const unsigned char precomputed_nP_montgomery25519_n_11[] = {236,45,18,11,37,163,223,201,31,238,132,192,1,225,170,91,70,220,130,111,139,208,93,86,211,22,147,29,9,165,75,251};
static const unsigned char precomputed_nP_montgomery25519_p_11[] = {11,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_12[] = {147,18,46,232,128,232,34,246,212,145,27,134,255,227,150,31,236,60,94,72,20,254,53,138,162,159,253,128,210,223,193,23};
static const unsigned char precomputed_nP_montgomery25519_n_12[] = {214,148,177,62,22,252,2,219,156,203,249,78,135,68,219,13,25,181,42,250,161,197,21,221,181,140,175,242,30,162,164,254};
static const unsigned char precomputed_nP_montgomery25519_p_12[] = {12,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_13[] = {91,38,221,90,220,250,249,107,234,224,251,4,109,192,201,181,132,216,71,254,152,204,74,202,124,239,186,53,86,16,183,55};
static const unsigned char precomputed_nP_montgomery25519_n_13[] = {19,146,48,164,180,234,202,31,98,230,250,183,198,75,6,104,144,119,247,32,46,71,235,138,229,32,112,138,58,243,13,152};
static const unsigned char precomputed_nP_montgomery25519_p_13[] = {13,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_14[] = {141,157,167,22,166,233,3,111,51,116,212,34,62,101,204,129,57,112,28,177,46,211,164,76,149,205,39,197,223,238,176,48};
static const unsigned char precomputed_nP_montgomery25519_n_14[] = {40,60,147,152,199,95,6,38,58,248,50,106,237,28,163,224,234,179,168,129,118,218,213,122,233,59,115,10,208,154,53,139};
static const unsigned char precomputed_nP_montgomery25519_p_14[] = {14,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_15[] = {217,115,32,35,66,144,65,8,25,143,191,82,225,61,129,97,90,4,150,71,57,17,1,231,14,199,229,207,221,174,89,13};
static const unsigned char precomputed_nP_montgomery25519_n_15[] = {2,222,22,131,160,78,116,188,224,216,251,122,243,253,84,123,180,252,82,233,141,218,42,150,213,250,32,17,174,233,198,144};
static const unsigned char precomputed_nP_montgomery25519_p_15[] = {15,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_16[] = {168,30,239,136,43,9,85,111,60,43,82,60,196,16,54,69,36,18,140,202,217,195,39,26,118,7,90,218,115,19,147,79};
static const unsigned char precomputed_nP_montgomery25519_n_16[] = {128,119,130,105,236,245,3,235,114,211,107,56,5,89,175,50,3,46,15,154,32,145,30,229,124,32,44,50,136,214,58,70};
static const unsigned char precomputed_nP_montgomery25519_p_16[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_17[] = {186,206,120,110,192,152,199,91,199,20,152,117,205,170,37,52,176,120,41,54,230,114,120,138,135,222,72,41,155,2,120,95};
static const unsigned char precomputed_nP_montgomery25519_n_17[] = {76,10,122,92,95,60,108,66,87,202,172,123,231,241,121,153,60,13,209,184,200,16,84,74,62,81,89,106,177,149,201,7};
static const unsigned char precomputed_nP_montgomery25519_p_17[] = {17,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_18[] = {8,100,222,18,220,20,218,99,254,188,214,171,119,88,234,228,50,86,45,103,188,156,0,91,129,17,52,149,192,244,246,108};
static const unsigned char precomputed_nP_montgomery25519_n_18[] = {145,52,243,43,154,181,28,84,69,217,127,105,124,26,144,86,194,239,44,38,126,15,220,245,35,24,159,43,124,97,207,182};
static const unsigned char precomputed_nP_montgomery25519_p_18[] = {18,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_19[] = {38,75,14,165,222,53,13,233,72,76,179,164,11,252,190,89,47,54,76,98,36,68,200,205,16,81,242,128,73,117,120,89};
static const unsigned char precomputed_nP_montgomery25519_n_19[] = {146,211,172,10,196,116,198,246,17,89,234,39,110,19,252,7,180,188,59,196,241,55,208,72,179,169,75,88,153,141,37,3};
static const unsigned char precomputed_nP_montgomery25519_p_19[] = {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,0};
static const unsigned char precomputed_nP_montgomery25519_q_20[] = {45,251,59,61,97,219,78,236,93,144,47,91,181,225,215,145,201,10,128,250,30,245,216,88,147,237,63,156,243,103,228,122};
static const unsigned char precomputed_nP_montgomery25519_n_20[] = {212,156,146,156,127,229,232,48,160,29,227,173,107,76,56,36,21,111,10,90,192,138,249,203,182,138,92,200,128,190,180,32};
static const unsigned char precomputed_nP_montgomery25519_p_20[] = {20,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_21[] = {130,247,47,178,248,52,54,192,213,119,42,9,99,242,192,111,160,106,220,145,217,226,58,89,18,9,81,100,252,221,221,46};
static const unsigned char precomputed_nP_montgomery25519_n_21[] = {238,205,118,104,224,32,1,124,103,246,230,131,211,47,8,131,118,55,85,122,152,0,26,90,147,81,190,53,208,236,202,243};
static const unsigned char precomputed_nP_montgomery25519_p_21[] = {21,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_22[] = {110,7,125,207,66,148,213,123,27,131,1,51,171,70,41,235,248,209,1,139,29,117,199,115,19,229,10,124,38,119,167,95};
static const unsigned char precomputed_nP_montgomery25519_n_22[] = {184,255,235,31,96,215,85,15,110,246,97,134,39,210,12,132,239,67,247,243,236,62,204,71,15,198,95,132,56,102,223,48};
static const unsigned char precomputed_nP_montgomery25519_p_22[] = {22,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_23[] = {121,232,151,106,249,132,75,30,73,205,71,105,61,158,181,131,150,161,64,69,138,140,30,8,40,61,72,109,102,207,107,46};
static const unsigned char precomputed_nP_montgomery25519_n_23[] = {176,21,36,69,234,239,12,133,189,95,127,247,243,129,176,233,252,210,8,4,62,179,45,71,132,151,131,142,107,226,149,82};
static const unsigned char precomputed_nP_montgomery25519_p_23[] = {23,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_24[] = {189,197,102,194,52,207,156,183,67,27,246,1,63,74,157,164,178,75,166,128,84,36,11,214,239,86,170,86,145,66,109,117};
static const unsigned char precomputed_nP_montgomery25519_n_24[] = {197,131,147,67,59,184,171,62,161,63,145,185,219,190,36,179,208,35,161,239,97,250,147,78,155,122,131,84,222,20,255,57};
static const unsigned char precomputed_nP_montgomery25519_p_24[] = {24,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_25[] = {198,237,17,59,13,46,43,8,99,121,23,190,202,234,240,252,155,193,97,152,217,159,15,251,82,54,246,226,180,134,32,123};
static const unsigned char precomputed_nP_montgomery25519_n_25[] = {220,255,225,12,119,108,43,211,239,127,106,206,117,125,148,215,84,165,157,177,185,39,226,94,196,90,235,111,149,251,106,228};
static const unsigned char precomputed_nP_montgomery25519_p_25[] = {25,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_26[] = {171,226,12,187,31,76,168,13,76,46,35,191,62,137,48,2,209,188,191,149,42,154,3,16,133,1,173,136,97,149,120,43};
static const unsigned char precomputed_nP_montgomery25519_n_26[] = {1,28,90,119,160,181,243,45,18,11,199,48,127,45,242,31,193,80,42,66,154,199,187,183,101,84,43,245,158,152,45,188};
static const unsigned char precomputed_nP_montgomery25519_p_26[] = {26,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_27[] = {161,223,243,227,234,158,42,211,46,211,205,39,166,23,202,203,26,65,220,32,37,204,145,199,242,178,16,111,221,227,215,116};
static const unsigned char precomputed_nP_montgomery25519_n_27[] = {128,211,202,5,133,44,165,24,11,106,41,213,148,126,225,3,196,79,227,38,11,161,243,167,11,73,135,245,143,32,105,241};
static const unsigned char precomputed_nP_montgomery25519_p_27[] = {27,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_28[] = {227,16,183,177,15,162,157,55,149,46,188,120,29,196,13,218,249,145,106,62,56,120,249,64,11,212,158,254,153,222,134,102};
static const unsigned char precomputed_nP_montgomery25519_n_28[] = {105,78,213,136,250,153,54,196,78,209,104,98,206,228,99,111,100,117,226,107,188,69,131,53,250,81,161,57,154,75,186,86};
static const unsigned char precomputed_nP_montgomery25519_p_28[] = {28,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_29[] = {123,3,226,18,231,250,54,63,5,20,66,86,154,30,243,71,196,222,234,139,221,232,16,130,78,97,139,198,176,238,220,27};
static const unsigned char precomputed_nP_montgomery25519_n_29[] = {103,233,237,136,26,9,199,182,184,122,105,253,11,251,200,159,239,173,81,83,253,65,193,123,246,147,153,39,103,241,131,206};
static const unsigned char precomputed_nP_montgomery25519_p_29[] = {29,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_30[] = {15,216,90,115,25,121,207,41,112,66,176,118,79,176,85,9,162,102,135,200,230,98,135,24,229,37,74,23,87,146,107,75};
static const unsigned char precomputed_nP_montgomery25519_n_30[] = {88,208,32,95,60,24,182,214,242,35,2,43,181,126,241,232,103,169,202,71,248,100,223,15,81,170,105,233,181,20,139,143};
static const unsigned char precomputed_nP_montgomery25519_p_30[] = {30,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_31[] = {167,69,92,82,21,33,118,83,239,21,209,140,157,76,171,158,207,12,119,240,246,209,154,135,0,78,7,81,200,101,186,99};
static const unsigned char precomputed_nP_montgomery25519_n_31[] = {251,163,38,67,159,49,110,10,31,29,115,131,183,15,141,31,33,127,239,142,94,23,75,0,189,146,169,229,4,13,46,20};
static const unsigned char precomputed_nP_montgomery25519_p_31[] = {31,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_32[] = {8,139,160,142,177,217,68,114,183,108,120,157,4,55,210,197,122,181,154,109,149,1,44,118,166,30,19,188,14,141,44,35};
static const unsigned char precomputed_nP_montgomery25519_n_32[] = {99,8,10,186,138,69,61,254,102,60,148,169,218,139,116,20,156,161,166,38,77,146,150,224,159,120,161,205,114,242,117,201};
static const unsigned char precomputed_nP_montgomery25519_p_32[] = {111,18,243,62,180,93,101,187,23,73,13,39,192,139,194,106,10,72,242,42,183,238,122,107,144,57,141,20,210,163,142,0};
static const unsigned char precomputed_nP_montgomery25519_q_33[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_33[] = {173,229,74,44,190,251,221,217,123,144,158,53,116,65,212,153,140,78,191,166,177,29,200,208,116,177,250,141,151,172,255,18};
static const unsigned char precomputed_nP_montgomery25519_p_33[] = {224,235,122,124,59,65,184,174,22,86,227,250,241,159,196,106,218,9,141,235,156,50,177,253,134,98,5,22,95,73,184,0};
static const unsigned char precomputed_nP_montgomery25519_q_34[] = {81,212,247,2,165,203,138,13,12,188,47,181,141,146,236,57,186,2,196,20,129,165,17,228,157,55,212,222,126,114,58,74};
static const unsigned char precomputed_nP_montgomery25519_n_34[] = {86,113,216,237,144,237,27,77,43,86,221,218,78,165,92,68,2,121,158,174,144,41,197,225,133,57,198,150,193,205,31,80};
static const unsigned char precomputed_nP_montgomery25519_p_34[] = {245,196,70,99,114,97,152,96,91,20,31,160,88,52,151,161,94,92,11,177,23,242,92,137,253,43,147,168,159,120,99,3};
static const unsigned char precomputed_nP_montgomery25519_q_35[] = {228,228,179,142,119,218,163,179,18,100,15,16,219,88,146,63,140,252,124,190,66,108,232,165,55,163,242,240,143,207,151,79};
static const unsigned char precomputed_nP_montgomery25519_n_35[] = {253,78,2,197,246,2,80,67,175,244,59,34,195,228,158,234,134,91,114,225,55,146,120,105,181,188,229,205,129,46,176,76};
static const unsigned char precomputed_nP_montgomery25519_p_35[] = {38,232,149,143,194,178,39,176,69,195,244,137,242,239,152,240,213,223,172,5,211,198,51,57,177,56,2,136,109,83,252,5};
static const unsigned char precomputed_nP_montgomery25519_q_36[] = {205,232,203,120,115,196,192,76,184,227,29,204,114,160,206,2,164,87,199,142,87,173,42,249,6,168,123,162,43,50,233,87};
static const unsigned char precomputed_nP_montgomery25519_n_36[] = {100,157,37,78,181,39,219,183,230,127,78,28,20,217,129,180,250,127,193,234,24,210,28,32,124,140,0,239,47,98,237,54};
static const unsigned char precomputed_nP_montgomery25519_p_36[] = {180,140,35,108,225,133,69,227,5,99,158,116,180,144,160,84,162,70,208,203,161,213,101,113,83,32,64,115,124,202,72,8};
static const unsigned char precomputed_nP_montgomery25519_q_37[] = {116,162,107,174,184,107,105,141,168,164,21,209,119,243,166,176,21,209,28,31,65,131,190,203,128,255,94,131,55,69,185,35};
static const unsigned char precomputed_nP_montgomery25519_n_37[] = {118,77,87,240,2,224,102,178,26,241,208,238,205,43,49,10,248,202,177,174,221,204,149,132,117,236,242,182,0,197,71,99};
static const unsigned char precomputed_nP_montgomery25519_p_37[] = {95,70,199,15,156,222,195,114,220,234,120,29,41,57,178,200,195,111,57,87,200,244,18,3,131,83,38,147,255,157,82,11};
static const unsigned char precomputed_nP_montgomery25519_q_38[] = {20,96,92,201,136,69,10,113,254,74,165,39,25,79,82,23,55,110,87,2,223,203,70,39,10,151,217,38,130,228,110,35};
static const unsigned char precomputed_nP_montgomery25519_n_38[] = {65,15,32,20,53,133,12,74,45,16,232,61,190,241,108,142,219,107,165,43,166,77,224,0,143,238,111,108,78,188,83,189};
static const unsigned char precomputed_nP_montgomery25519_p_38[] = {100,78,166,101,186,16,33,249,148,243,238,215,228,226,85,199,101,181,163,20,243,90,100,96,195,116,97,35,31,153,67,17};
static const unsigned char precomputed_nP_montgomery25519_q_39[] = {18,244,59,81,248,218,145,225,18,224,235,185,206,228,171,123,58,219,224,244,155,107,209,155,205,67,188,62,88,237,239,40};
static const unsigned char precomputed_nP_montgomery25519_n_39[] = {148,190,255,45,219,178,118,248,201,115,191,247,159,237,100,82,206,92,216,227,195,56,214,22,93,175,182,124,241,116,21,197};
static const unsigned char precomputed_nP_montgomery25519_p_39[] = {216,45,32,54,238,248,211,160,133,246,29,225,4,154,119,36,23,185,121,58,169,66,254,145,201,141,179,170,190,62,54,18};
static const unsigned char precomputed_nP_montgomery25519_q_40[] = {143,89,69,222,179,212,88,144,197,252,13,219,244,149,71,33,78,245,157,244,93,18,109,20,156,74,71,239,48,201,0,36};
static const unsigned char precomputed_nP_montgomery25519_n_40[] = {195,90,245,191,118,127,212,249,167,243,171,178,54,241,180,206,227,159,217,21,10,140,196,140,68,80,151,15,68,176,89,190};
static const unsigned char precomputed_nP_montgomery25519_p_40[] = {36,64,6,108,6,62,53,35,126,236,93,246,67,94,0,106,66,15,83,213,254,31,127,68,93,156,238,47,127,221,92,20};
static const unsigned char precomputed_nP_montgomery25519_q_41[] = {242,17,147,144,73,76,20,33,70,38,176,162,163,20,110,251,153,126,98,180,47,185,101,227,13,31,169,7,65,168,217,33};
static const unsigned char precomputed_nP_montgomery25519_n_41[] = {187,110,3,156,243,58,23,69,63,43,126,198,25,232,244,117,90,198,194,216,156,226,210,73,183,27,14,37,47,227,115,7};
static const unsigned char precomputed_nP_montgomery25519_p_41[] = {148,214,197,89,82,44,90,188,128,24,185,102,86,13,225,157,32,231,77,115,186,232,140,218,184,193,239,49,124,231,169,21};
static const unsigned char precomputed_nP_montgomery25519_q_42[] = {15,110,14,218,109,97,208,5,119,1,172,107,129,13,15,212,190,36,103,67,142,60,73,93,73,192,62,251,214,1,248,33};
static const unsigned char precomputed_nP_montgomery25519_n_42[] = {83,201,187,156,49,162,122,98,244,64,232,65,97,99,249,20,112,35,197,48,214,75,215,12,58,113,197,148,113,214,183,52};
static const unsigned char precomputed_nP_montgomery25519_p_42[] = {68,129,160,218,218,241,248,204,45,63,176,224,36,15,218,40,118,107,85,223,166,31,199,0,47,181,170,156,116,254,39,22};
static const unsigned char precomputed_nP_montgomery25519_q_43[] = {56,21,5,209,153,28,67,172,37,109,174,13,123,39,248,41,6,32,97,215,136,83,40,105,144,155,46,38,66,191,92,111};
static const unsigned char precomputed_nP_montgomery25519_n_43[] = {216,225,212,157,91,85,59,235,154,67,45,114,168,180,42,127,197,112,107,19,206,209,121,58,84,128,9,85,201,218,145,12};
static const unsigned char precomputed_nP_montgomery25519_p_43[] = {207,108,156,64,182,29,155,51,168,111,164,225,193,194,145,89,21,77,220,193,35,3,222,175,89,78,123,87,130,50,248,22};
static const unsigned char precomputed_nP_montgomery25519_q_44[] = {124,34,221,39,200,223,110,235,114,121,23,183,13,139,29,105,164,48,137,253,75,215,206,50,99,236,183,40,157,114,126,8};
static const unsigned char precomputed_nP_montgomery25519_n_44[] = {213,147,100,238,218,244,221,153,119,214,125,130,158,51,183,19,100,226,158,224,124,214,84,217,214,5,100,138,151,82,47,113};
static const unsigned char precomputed_nP_montgomery25519_p_44[] = {137,80,205,184,163,118,77,202,204,124,57,5,93,109,93,13,226,255,107,99,47,121,243,196,104,138,162,229,83,2,98,26};
static const unsigned char precomputed_nP_montgomery25519_q_45[] = {209,78,224,191,218,3,170,4,33,85,112,53,175,85,212,14,190,108,45,17,159,66,4,171,44,222,255,213,156,13,224,24};
static const unsigned char precomputed_nP_montgomery25519_n_45[] = {162,66,132,16,45,177,133,232,174,4,192,131,107,32,178,62,173,98,230,51,26,75,146,57,50,234,195,185,78,252,166,122};
static const unsigned char precomputed_nP_montgomery25519_p_45[] = {34,240,10,243,6,229,25,22,251,207,81,236,92,210,208,177,233,177,0,228,234,100,198,50,208,115,10,189,11,213,7,32};
static const unsigned char precomputed_nP_montgomery25519_q_46[] = {65,230,67,147,81,29,193,205,106,166,158,26,136,203,16,178,103,85,161,96,102,107,105,133,105,84,64,40,68,43,195,91};
static const unsigned char precomputed_nP_montgomery25519_n_46[] = {108,47,222,232,210,191,39,56,170,87,9,43,52,219,179,129,140,92,177,75,218,9,219,168,101,130,70,60,50,158,31,182};
static const unsigned char precomputed_nP_montgomery25519_p_46[] = {55,42,50,167,103,43,115,186,153,214,232,93,85,246,127,28,39,87,49,26,34,202,133,77,222,157,109,253,151,211,235,32};
static const unsigned char precomputed_nP_montgomery25519_q_47[] = {32,163,168,139,99,25,127,116,102,44,81,149,235,117,39,200,88,48,216,100,104,104,82,71,66,252,153,234,179,66,237,60};
static const unsigned char precomputed_nP_montgomery25519_n_47[] = {46,81,149,149,39,21,251,100,137,131,130,206,145,167,225,73,16,83,211,60,37,120,156,59,54,63,12,239,157,17,84,250};
static const unsigned char precomputed_nP_montgomery25519_p_47[] = {35,194,4,145,228,170,52,36,136,247,152,246,231,250,199,161,157,68,105,95,235,110,137,99,98,244,73,208,83,37,109,35};
static const unsigned char precomputed_nP_montgomery25519_q_48[] = {140,24,30,176,134,8,31,231,89,88,140,197,126,181,244,132,204,147,137,5,26,207,233,155,233,228,209,90,38,40,202,118};
static const unsigned char precomputed_nP_montgomery25519_n_48[] = {73,75,142,5,29,149,53,179,200,42,206,120,189,172,169,234,155,245,32,16,189,242,246,199,228,216,79,193,21,149,73,11};
static const unsigned char precomputed_nP_montgomery25519_p_48[] = {106,173,113,9,210,120,250,178,209,255,187,62,17,65,238,231,37,96,212,220,76,123,244,227,72,68,22,201,239,234,252,35};
static const unsigned char precomputed_nP_montgomery25519_q_49[] = {33,8,41,21,196,57,27,11,142,108,106,99,167,6,192,237,255,230,224,36,117,7,242,70,226,111,243,213,61,23,15,53};
static const unsigned char precomputed_nP_montgomery25519_n_49[] = {77,142,218,116,40,190,158,142,14,25,103,22,220,112,238,115,106,208,60,113,132,11,139,211,134,73,184,101,247,197,94,92};
static const unsigned char precomputed_nP_montgomery25519_p_49[] = {69,46,183,255,198,153,158,240,122,231,14,3,68,224,88,41,255,150,5,100,114,25,47,223,131,156,7,132,91,115,13,36};
static const unsigned char precomputed_nP_montgomery25519_q_50[] = {40,105,249,168,34,223,38,206,115,50,194,65,164,57,143,11,92,115,159,142,217,0,132,251,237,153,184,34,195,196,37,112};
static const unsigned char precomputed_nP_montgomery25519_n_50[] = {30,227,78,104,84,81,163,164,213,29,187,243,170,68,117,193,9,81,235,137,157,206,4,218,77,29,188,210,29,124,49,251};
static const unsigned char precomputed_nP_montgomery25519_p_50[] = {148,73,188,146,204,183,204,19,83,160,11,237,141,97,161,237,152,98,49,50,41,86,14,129,143,0,92,46,72,233,49,38};
static const unsigned char precomputed_nP_montgomery25519_q_51[] = {148,246,73,15,184,154,236,223,224,226,251,31,64,159,206,121,178,247,22,39,70,164,110,173,199,108,204,202,3,77,219,5};
static const unsigned char precomputed_nP_montgomery25519_n_51[] = {142,225,151,172,17,225,127,68,154,120,49,210,16,84,196,235,13,86,29,77,208,152,52,147,1,64,149,163,99,12,19,231};
static const unsigned char precomputed_nP_montgomery25519_p_51[] = {165,184,205,223,247,7,80,140,96,73,134,57,123,193,114,229,182,148,182,23,189,138,186,90,244,253,92,62,29,75,227,38};
static const unsigned char precomputed_nP_montgomery25519_q_52[] = {227,182,214,47,131,182,21,112,64,150,229,231,76,159,115,101,254,178,24,4,238,128,253,76,19,54,242,153,40,8,96,107};
static const unsigned char precomputed_nP_montgomery25519_n_52[] = {212,34,94,235,200,193,0,184,101,187,23,99,253,170,8,165,176,93,221,119,178,52,105,186,227,109,125,247,157,129,161,28};
static const unsigned char precomputed_nP_montgomery25519_p_52[] = {108,20,31,116,94,141,126,45,163,85,126,44,19,190,238,243,224,86,12,212,102,52,127,109,241,32,139,167,37,52,87,39};
static const unsigned char precomputed_nP_montgomery25519_q_53[] = {234,96,13,185,171,29,139,232,201,74,241,138,212,122,221,43,20,207,254,56,35,85,151,69,164,53,40,138,8,222,33,20};
static const unsigned char precomputed_nP_montgomery25519_n_53[] = {66,185,1,82,139,99,252,182,220,250,204,91,12,232,235,41,29,21,190,254,183,189,74,31,4,12,67,189,37,68,172,221};
static const unsigned char precomputed_nP_montgomery25519_p_53[] = {26,98,96,48,105,236,129,197,157,34,71,126,66,69,87,108,146,182,197,41,180,14,89,76,92,46,119,230,190,58,177,46};
static const unsigned char precomputed_nP_montgomery25519_q_54[] = {228,112,130,63,107,81,23,249,186,10,22,86,99,174,198,10,157,41,6,67,30,228,13,31,83,154,42,32,230,159,64,116};
static const unsigned char precomputed_nP_montgomery25519_n_54[] = {29,139,208,144,158,44,163,1,154,204,136,129,249,124,170,119,165,192,236,183,170,69,227,92,93,168,183,102,236,70,132,35};
static const unsigned char precomputed_nP_montgomery25519_p_54[] = {56,103,119,158,120,22,48,230,208,156,54,119,226,189,178,33,160,83,156,57,66,229,19,16,110,194,27,195,36,104,230,50};
static const unsigned char precomputed_nP_montgomery25519_q_55[] = {255,129,18,169,7,117,207,247,14,22,204,204,150,149,241,109,184,234,176,191,204,226,59,95,60,137,13,206,30,84,86,58};
static const unsigned char precomputed_nP_montgomery25519_n_55[] = {201,38,160,195,92,79,81,7,153,46,160,11,225,87,6,177,229,123,232,181,40,91,68,106,252,81,130,223,73,157,105,86};
static const unsigned char precomputed_nP_montgomery25519_p_55[] = {148,163,155,168,115,30,231,224,48,18,225,45,29,95,43,203,221,69,199,158,140,41,162,221,127,99,184,43,182,49,191,52};
static const unsigned char precomputed_nP_montgomery25519_q_56[] = {216,58,60,48,207,147,39,42,240,212,174,51,254,97,191,197,184,179,199,46,208,162,235,199,58,84,206,231,135,146,53,3};
static const unsigned char precomputed_nP_montgomery25519_n_56[] = {197,251,119,136,36,212,2,98,147,53,96,203,69,110,178,248,42,129,249,180,77,223,221,240,247,101,119,199,240,147,174,59};
static const unsigned char precomputed_nP_montgomery25519_p_56[] = {33,110,138,129,221,49,212,141,87,34,182,133,210,124,174,124,181,138,116,52,154,117,0,194,143,57,157,171,95,142,131,54};
static const unsigned char precomputed_nP_montgomery25519_q_57[] = {166,240,57,159,250,12,176,99,21,179,66,164,251,8,22,151,94,185,246,184,60,34,80,126,163,254,145,138,250,217,239,55};
static const unsigned char precomputed_nP_montgomery25519_n_57[] = {117,58,35,111,63,75,58,219,24,188,41,38,213,60,56,25,107,40,249,28,25,194,92,106,2,201,194,172,55,240,143,88};
static const unsigned char precomputed_nP_montgomery25519_p_57[] = {16,14,168,202,146,235,104,175,47,76,126,143,2,68,12,74,128,54,65,154,82,43,146,59,129,187,98,222,21,120,161,57};
static const unsigned char precomputed_nP_montgomery25519_q_58[] = {58,144,221,68,149,243,211,220,123,4,9,128,144,125,157,1,216,48,133,89,2,18,245,83,40,245,77,176,207,170,188,126};
static const unsigned char precomputed_nP_montgomery25519_n_58[] = {76,75,16,137,188,138,139,186,248,43,22,143,182,126,58,197,103,73,165,66,85,12,234,199,46,110,80,174,76,163,47,59};
static const unsigned char precomputed_nP_montgomery25519_p_58[] = {77,80,233,58,202,29,49,53,159,3,213,231,47,143,129,165,208,30,47,197,42,119,210,132,72,188,68,202,24,143,20,61};
static const unsigned char precomputed_nP_montgomery25519_q_59[] = {49,255,250,144,86,100,223,59,248,213,193,15,175,5,233,5,93,3,178,104,161,187,55,226,138,69,127,23,37,210,251,30};
static const unsigned char precomputed_nP_montgomery25519_n_59[] = {53,245,55,25,59,19,52,104,12,190,154,155,254,60,211,10,173,59,255,119,78,185,214,240,80,140,246,173,40,214,178,31};
static const unsigned char precomputed_nP_montgomery25519_p_59[] = {247,9,183,167,211,71,178,197,159,211,252,106,164,133,217,230,19,245,215,29,92,240,192,129,163,60,151,149,102,219,251,61};
static const unsigned char precomputed_nP_montgomery25519_q_60[] = {152,251,21,58,4,206,92,66,175,109,126,19,17,4,136,153,160,151,177,196,251,14,160,205,121,23,97,7,196,38,40,91};
static const unsigned char precomputed_nP_montgomery25519_n_60[] = {95,123,103,87,5,178,10,135,206,161,95,233,75,102,103,198,205,232,37,55,209,52,254,26,201,114,42,28,28,52,229,250};
static const unsigned char precomputed_nP_montgomery25519_p_60[] = {21,85,14,139,190,149,43,205,86,195,25,195,234,193,198,172,181,215,183,28,239,61,27,154,113,244,161,237,94,192,145,62};
static const unsigned char precomputed_nP_montgomery25519_q_61[] = {97,215,117,83,136,126,243,115,111,73,20,197,165,85,65,129,118,57,81,198,161,170,79,46,219,7,174,251,203,113,79,67};
static const unsigned char precomputed_nP_montgomery25519_n_61[] = {212,103,173,234,110,130,170,202,238,170,113,83,237,70,174,165,128,137,208,112,166,62,58,119,136,16,92,2,42,246,113,235};
static const unsigned char precomputed_nP_montgomery25519_p_61[] = {2,179,55,63,101,158,203,81,211,253,4,244,143,91,239,184,216,246,222,242,51,162,197,100,105,151,85,160,120,245,221,63};
static const unsigned char precomputed_nP_montgomery25519_q_62[] = {167,219,221,104,83,243,49,44,209,154,240,113,203,222,164,106,101,186,231,195,242,96,115,182,109,1,17,204,66,19,22,106};
static const unsigned char precomputed_nP_montgomery25519_n_62[] = {37,37,206,228,45,61,199,89,10,17,7,249,133,9,82,105,39,44,59,174,252,120,185,49,25,36,174,51,102,101,30,42};
static const unsigned char precomputed_nP_montgomery25519_p_62[] = {144,35,226,102,111,234,137,9,121,153,51,58,8,51,155,153,57,79,246,105,200,26,149,246,46,35,137,143,149,5,19,66};
static const unsigned char precomputed_nP_montgomery25519_q_63[] = {36,55,236,229,245,79,207,49,203,20,232,169,77,191,14,108,115,63,173,247,108,115,162,142,117,229,217,72,26,175,68,106};
static const unsigned char precomputed_nP_montgomery25519_n_63[] = {23,50,2,94,118,21,204,94,239,46,9,3,10,238,121,200,247,28,126,236,204,216,61,30,175,166,142,170,88,128,44,182};
static const unsigned char precomputed_nP_montgomery25519_p_63[] = {39,183,227,89,201,132,189,69,4,190,233,93,209,47,210,121,112,180,254,123,62,210,123,36,178,222,2,150,99,8,35,66};
static const unsigned char precomputed_nP_montgomery25519_q_64[] = {146,149,77,134,215,1,44,221,5,86,144,64,62,218,24,92,66,95,109,169,110,156,123,103,200,136,175,181,79,206,77,30};
static const unsigned char precomputed_nP_montgomery25519_n_64[] = {213,168,128,89,134,56,190,212,254,149,134,166,70,229,99,211,215,36,27,134,65,78,24,151,38,28,67,38,44,67,165,213};
static const unsigned char precomputed_nP_montgomery25519_p_64[] = {56,176,43,249,168,49,164,59,122,166,156,67,205,1,29,102,123,29,160,44,247,99,10,241,124,103,109,238,186,72,8,75};
static const unsigned char precomputed_nP_montgomery25519_q_65[] = {140,226,113,176,170,125,185,72,144,99,240,177,95,243,32,51,68,104,183,169,16,133,225,52,210,200,4,218,182,105,37,104};
static const unsigned char precomputed_nP_montgomery25519_n_65[] = {179,97,78,242,114,30,10,144,56,149,221,128,190,241,18,143,147,199,4,189,121,234,72,175,18,209,41,0,95,222,34,58};
static const unsigned char precomputed_nP_montgomery25519_p_65[] = {178,235,248,67,138,16,63,246,250,175,128,244,254,92,235,203,151,120,251,136,184,163,190,14,217,41,101,253,24,24,44,78};
static const unsigned char precomputed_nP_montgomery25519_q_66[] = {63,4,23,253,35,192,48,242,97,105,156,93,94,131,136,135,234,220,44,198,162,110,76,234,4,24,99,125,56,100,216,63};
static const unsigned char precomputed_nP_montgomery25519_n_66[] = {13,74,52,214,90,233,227,224,221,209,189,31,98,134,79,12,20,205,239,229,202,59,161,241,208,66,161,8,230,48,104,231};
static const unsigned char precomputed_nP_montgomery25519_p_66[] = {144,156,227,220,61,222,81,95,42,91,74,29,61,104,162,134,169,177,250,227,191,48,4,92,102,178,221,36,47,191,11,80};
static const unsigned char precomputed_nP_montgomery25519_q_67[] = {237,127,188,222,241,16,254,146,84,195,223,127,96,31,31,85,67,186,200,162,130,186,146,173,211,182,140,232,125,203,222,2};
static const unsigned char precomputed_nP_montgomery25519_n_67[] = {199,15,246,104,121,68,176,114,148,63,133,234,196,214,43,48,37,221,32,76,238,144,186,125,120,124,75,164,245,223,232,123};
static const unsigned char precomputed_nP_montgomery25519_p_67[] = {91,92,141,74,120,143,102,65,177,14,15,243,89,123,207,69,62,223,25,195,152,71,40,96,65,238,58,41,216,213,97,82};
static const unsigned char precomputed_nP_montgomery25519_q_68[] = {181,222,209,109,182,226,150,229,99,94,129,129,202,251,88,218,173,54,120,32,159,13,194,200,151,39,193,64,72,6,44,24};
static const unsigned char precomputed_nP_montgomery25519_n_68[] = {242,0,246,18,121,63,165,228,66,126,192,196,235,199,37,199,3,168,187,101,2,146,35,226,198,233,122,105,81,139,29,82};
static const unsigned char precomputed_nP_montgomery25519_p_68[] = {43,198,245,39,220,128,136,246,170,207,98,217,133,116,138,163,11,32,198,18,109,169,214,121,50,33,201,242,219,142,111,82};
static const unsigned char precomputed_nP_montgomery25519_q_69[] = {2,53,245,62,112,133,194,113,152,186,76,56,71,101,59,255,229,204,223,23,8,98,41,236,15,141,174,84,176,31,225,105};
static const unsigned char precomputed_nP_montgomery25519_n_69[] = {172,34,177,175,150,29,34,180,200,84,157,182,242,243,43,39,147,247,92,183,210,61,20,129,117,211,27,208,5,235,153,176};
static const unsigned char precomputed_nP_montgomery25519_p_69[] = {10,177,130,220,69,165,144,38,157,90,143,67,154,190,167,190,50,19,237,121,170,125,249,96,216,189,175,54,84,188,180,82};
static const unsigned char precomputed_nP_montgomery25519_q_70[] = {176,85,166,39,118,113,247,129,215,210,93,45,236,83,4,34,146,19,90,66,49,85,204,206,232,3,26,141,96,101,112,4};
static const unsigned char precomputed_nP_montgomery25519_n_70[] = {159,227,167,216,244,16,147,38,173,141,121,182,83,21,236,80,132,102,92,154,166,71,149,127,117,125,4,24,33,63,142,189};
static const unsigned char precomputed_nP_montgomery25519_p_70[] = {94,229,114,115,221,228,181,199,119,253,17,139,10,59,149,2,202,196,187,230,76,134,89,44,251,24,230,195,37,229,246,85};
static const unsigned char precomputed_nP_montgomery25519_q_71[] = {133,56,209,64,169,248,218,8,156,22,108,249,93,19,19,20,10,202,251,221,92,152,21,138,66,150,67,179,210,116,53,91};
static const unsigned char precomputed_nP_montgomery25519_n_71[] = {175,143,152,210,222,255,216,27,191,206,9,31,49,72,30,207,225,250,90,47,96,110,131,145,55,57,113,118,107,27,83,107};
static const unsigned char precomputed_nP_montgomery25519_p_71[] = {12,123,117,152,26,247,24,62,172,166,28,83,83,247,213,200,159,238,221,115,67,36,1,103,17,111,231,9,73,16,197,86};
static const unsigned char precomputed_nP_montgomery25519_q_72[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_72[] = {107,186,160,142,195,202,118,52,209,113,10,53,105,99,156,228,1,98,117,197,252,194,43,191,179,77,159,99,106,32,14,129};
static const unsigned char precomputed_nP_montgomery25519_p_72[] = {95,156,149,188,163,80,140,36,177,208,177,85,156,131,239,91,4,68,92,196,88,28,142,134,216,34,78,221,208,159,17,87};
static const unsigned char precomputed_nP_montgomery25519_q_73[] = {168,88,184,124,168,95,193,139,180,122,21,83,7,167,242,61,142,140,57,104,68,191,153,220,184,6,164,114,78,208,43,3};
static const unsigned char precomputed_nP_montgomery25519_n_73[] = {237,61,58,130,13,85,224,251,35,94,212,78,203,235,201,20,34,129,69,102,214,79,138,98,123,157,67,82,14,64,80,174};
static const unsigned char precomputed_nP_montgomery25519_p_73[] = {22,233,173,34,218,187,183,195,246,174,184,130,178,202,229,97,80,232,75,20,49,182,202,180,87,80,28,232,150,21,32,87};
static const unsigned char precomputed_nP_montgomery25519_q_74[] = {27,140,184,246,181,174,139,12,170,14,22,32,229,243,80,102,110,113,2,211,170,28,63,207,246,75,190,124,83,154,186,59};
static const unsigned char precomputed_nP_montgomery25519_n_74[] = {182,75,243,148,4,128,244,221,155,58,207,252,40,150,126,7,167,21,179,216,143,122,136,187,36,11,217,148,104,183,162,160};
static const unsigned char precomputed_nP_montgomery25519_p_74[] = {26,84,171,174,223,46,251,179,68,112,12,140,25,120,168,230,49,157,85,92,120,86,93,64,218,91,204,5,82,50,64,87};
static const unsigned char precomputed_nP_montgomery25519_q_75[] = {100,160,131,243,53,186,251,114,8,52,151,27,30,160,13,72,173,210,109,126,132,158,106,196,4,88,22,212,130,242,254,124};
static const unsigned char precomputed_nP_montgomery25519_n_75[] = {243,198,119,37,239,8,52,57,150,12,13,205,198,171,130,161,99,22,239,72,48,151,65,200,41,169,247,63,119,148,130,170};
static const unsigned char precomputed_nP_montgomery25519_p_75[] = {89,147,70,16,191,57,46,101,100,225,112,11,39,133,85,116,187,123,222,118,25,139,220,212,91,148,174,60,170,219,28,88};
static const unsigned char precomputed_nP_montgomery25519_q_76[] = {201,155,12,75,225,4,142,124,244,58,18,139,255,150,172,144,168,104,16,32,44,188,45,70,238,199,97,32,247,139,217,62};
static const unsigned char precomputed_nP_montgomery25519_n_76[] = {59,221,34,203,249,204,78,247,89,11,106,78,176,234,184,64,48,248,19,152,166,49,37,109,200,188,112,187,224,180,92,175};
static const unsigned char precomputed_nP_montgomery25519_p_76[] = {237,126,162,241,233,132,69,64,152,207,154,191,214,121,178,91,45,8,97,215,143,67,183,19,166,189,181,22,103,153,198,88};
static const unsigned char precomputed_nP_montgomery25519_q_77[] = {45,234,189,106,93,41,197,201,25,229,188,27,200,109,20,28,157,91,139,137,162,0,243,82,191,136,58,230,14,123,21,126};
static const unsigned char precomputed_nP_montgomery25519_n_77[] = {196,142,88,86,120,128,248,216,203,143,30,145,212,88,8,226,44,209,237,51,95,0,37,209,222,37,184,14,51,238,143,113};
static const unsigned char precomputed_nP_montgomery25519_p_77[] = {166,71,52,250,165,142,124,133,244,167,47,167,159,231,196,183,228,176,163,220,102,133,113,231,10,178,182,106,107,111,142,89};
static const unsigned char precomputed_nP_montgomery25519_q_78[] = {96,255,146,161,76,7,96,239,148,166,23,180,53,104,37,186,46,128,89,3,171,67,92,201,226,96,241,85,156,155,106,26};
static const unsigned char precomputed_nP_montgomery25519_n_78[] = {246,50,136,243,85,168,3,233,189,68,221,90,81,189,140,213,160,226,230,85,65,61,248,106,74,191,103,228,116,69,59,59};
static const unsigned char precomputed_nP_montgomery25519_p_78[] = {187,24,54,60,85,139,162,25,69,55,173,79,185,91,202,234,176,176,71,225,85,8,207,26,71,123,185,60,233,190,79,90};
static const unsigned char precomputed_nP_montgomery25519_q_79[] = {255,4,221,217,210,234,93,23,172,194,86,106,81,143,125,64,202,114,105,83,19,133,166,47,172,39,142,122,237,86,128,70};
static const unsigned char precomputed_nP_montgomery25519_n_79[] = {72,231,186,167,16,158,213,224,231,195,162,8,119,71,123,14,249,87,11,30,84,163,123,174,230,11,109,83,61,178,182,15};
static const unsigned char precomputed_nP_montgomery25519_p_79[] = {133,133,21,198,3,134,9,12,210,254,123,114,174,238,77,96,254,88,37,64,5,178,199,141,45,0,39,9,184,239,76,94};
static const unsigned char precomputed_nP_montgomery25519_q_80[] = {110,113,117,196,107,121,84,48,49,149,121,164,3,133,75,138,55,101,216,33,156,143,15,96,198,175,237,75,185,14,12,69};
static const unsigned char precomputed_nP_montgomery25519_n_80[] = {196,114,61,3,194,185,195,49,128,208,169,247,44,24,202,182,89,234,161,242,149,34,52,51,148,178,138,2,195,29,56,251};
static const unsigned char precomputed_nP_montgomery25519_p_80[] = {67,255,144,201,115,140,26,118,4,229,216,118,29,235,86,170,110,116,92,125,4,165,62,125,93,218,171,166,14,251,223,95};
static const unsigned char precomputed_nP_montgomery25519_q_81[] = {88,3,144,195,28,174,124,41,102,180,112,240,10,31,224,247,202,153,22,182,105,85,35,154,190,93,45,156,96,6,86,9};
static const unsigned char precomputed_nP_montgomery25519_n_81[] = {232,254,230,246,132,207,176,119,157,251,89,221,134,63,243,78,83,175,53,239,86,105,93,51,88,4,173,177,32,124,144,193};
static const unsigned char precomputed_nP_montgomery25519_p_81[] = {227,121,24,129,106,238,151,39,102,19,51,220,96,154,229,232,131,181,191,15,149,0,235,69,220,12,5,240,198,151,132,96};
static const unsigned char precomputed_nP_montgomery25519_q_82[] = {184,104,230,182,129,76,150,111,49,140,51,165,182,24,57,150,50,121,20,24,229,80,67,104,254,120,83,13,14,124,45,86};
static const unsigned char precomputed_nP_montgomery25519_n_82[] = {31,60,154,239,1,99,22,215,237,93,143,96,188,253,160,127,211,130,94,5,225,196,37,124,3,57,3,71,4,241,231,15};
static const unsigned char precomputed_nP_montgomery25519_p_82[] = {240,22,72,68,27,247,111,127,36,102,253,162,235,57,103,223,77,206,56,9,214,96,69,138,244,14,98,103,63,107,126,98};
static const unsigned char precomputed_nP_montgomery25519_q_83[] = {69,121,86,227,222,239,11,208,33,176,252,85,217,169,174,186,246,248,170,213,13,176,85,81,25,23,34,81,251,61,27,15};
static const unsigned char precomputed_nP_montgomery25519_n_83[] = {232,59,52,197,225,94,168,91,231,73,162,9,196,84,83,9,115,91,228,28,110,247,129,120,199,247,248,114,2,161,167,146};
static const unsigned char precomputed_nP_montgomery25519_p_83[] = {216,133,220,191,70,32,82,157,83,231,220,192,43,155,5,1,175,92,52,144,185,209,117,107,251,155,54,254,111,193,98,99};
static const unsigned char precomputed_nP_montgomery25519_q_84[] = {119,95,0,82,108,75,113,6,44,136,6,36,243,251,32,7,104,182,129,199,63,114,69,233,251,107,213,42,64,188,144,76};
static const unsigned char precomputed_nP_montgomery25519_n_84[] = {66,171,64,207,81,72,227,218,155,228,231,169,174,118,47,75,92,9,36,200,119,200,153,240,214,245,84,125,0,11,90,137};
static const unsigned char precomputed_nP_montgomery25519_p_84[] = {85,180,86,15,22,113,163,114,168,159,20,183,93,182,205,13,113,42,45,139,252,244,3,166,9,43,252,141,81,24,129,103};
static const unsigned char precomputed_nP_montgomery25519_q_85[] = {107,174,134,87,216,186,174,9,66,224,28,33,211,23,25,13,139,44,73,125,110,242,96,106,72,144,93,169,50,27,180,6};
static const unsigned char precomputed_nP_montgomery25519_n_85[] = {251,203,92,151,139,124,57,59,173,109,164,85,93,77,202,88,44,76,10,57,85,66,182,43,163,115,122,239,140,82,226,13};
static const unsigned char precomputed_nP_montgomery25519_p_85[] = {41,161,241,169,209,53,71,139,150,143,73,155,162,199,45,186,77,244,153,141,226,6,54,243,185,180,107,39,148,117,92,106};
static const unsigned char precomputed_nP_montgomery25519_q_86[] = {7,18,149,199,142,15,15,235,24,15,67,212,106,110,177,124,26,214,252,13,89,48,12,66,35,106,43,25,66,132,159,100};
static const unsigned char precomputed_nP_montgomery25519_n_86[] = {37,177,125,17,181,23,36,116,112,172,138,193,110,33,2,198,112,237,96,15,244,166,4,191,129,237,85,244,100,105,65,83};
static const unsigned char precomputed_nP_montgomery25519_p_86[] = {128,23,97,182,37,168,50,230,91,51,94,191,211,109,124,125,74,88,82,154,251,171,187,124,56,245,169,188,106,34,145,107};
static const unsigned char precomputed_nP_montgomery25519_q_87[] = {103,231,168,16,38,143,127,110,16,71,251,28,231,215,228,222,85,87,158,104,130,141,45,189,3,180,179,10,162,46,78,92};
static const unsigned char precomputed_nP_montgomery25519_n_87[] = {160,194,66,170,188,109,55,145,134,247,234,198,159,74,206,216,28,240,81,111,79,54,182,197,178,15,33,34,44,190,194,210};
static const unsigned char precomputed_nP_montgomery25519_p_87[] = {127,15,15,250,255,35,159,42,17,119,215,29,236,176,123,244,254,92,142,79,152,129,191,128,162,120,217,207,55,134,218,108};
static const unsigned char precomputed_nP_montgomery25519_q_88[] = {73,23,176,31,225,42,167,200,73,7,156,3,193,59,105,14,42,173,194,190,183,110,83,43,127,58,195,19,51,229,36,37};
static const unsigned char precomputed_nP_montgomery25519_n_88[] = {88,64,1,35,44,133,219,142,181,211,0,49,193,178,129,99,210,8,68,62,157,47,152,209,255,43,234,157,47,157,220,69};
static const unsigned char precomputed_nP_montgomery25519_p_88[] = {15,154,28,146,107,252,218,170,25,168,127,42,52,44,9,232,19,129,115,18,153,155,113,175,13,84,224,189,164,184,185,109};
static const unsigned char precomputed_nP_montgomery25519_q_89[] = {215,8,201,193,79,168,61,72,101,20,152,251,171,111,150,218,75,51,85,85,148,255,131,141,255,156,17,126,159,6,177,109};
static const unsigned char precomputed_nP_montgomery25519_n_89[] = {198,130,248,4,101,0,28,58,140,67,122,32,79,157,187,169,88,64,24,185,85,96,94,28,162,26,203,99,157,170,13,224};
static const unsigned char precomputed_nP_montgomery25519_p_89[] = {102,152,70,122,156,35,87,188,3,59,236,143,255,220,32,60,180,184,194,174,67,78,155,210,158,158,124,57,123,29,226,111};
static const unsigned char precomputed_nP_montgomery25519_q_90[] = {84,52,11,125,245,132,150,18,72,100,216,10,97,116,194,219,120,17,230,231,77,86,11,115,18,17,117,83,207,244,176,124};
static const unsigned char precomputed_nP_montgomery25519_n_90[] = {138,118,50,4,97,30,223,67,133,227,178,230,148,132,25,72,174,35,177,140,212,86,244,251,114,81,166,39,66,105,57,204};
static const unsigned char precomputed_nP_montgomery25519_p_90[] = {224,127,120,206,90,168,171,155,214,37,59,146,114,174,149,43,10,200,87,58,190,106,83,37,22,129,102,187,150,99,56,112};
static const unsigned char precomputed_nP_montgomery25519_q_91[] = {238,109,71,253,157,191,230,60,96,185,101,2,100,103,60,84,144,93,177,132,112,219,142,64,254,164,8,139,87,191,250,31};
static const unsigned char precomputed_nP_montgomery25519_n_91[] = {69,229,130,138,60,156,82,143,20,25,212,170,17,117,206,159,105,196,250,105,245,227,20,236,205,129,92,190,32,22,203,57};
static const unsigned char precomputed_nP_montgomery25519_p_91[] = {145,46,193,20,199,31,45,117,163,16,240,251,124,50,2,144,229,182,166,220,69,62,50,87,111,130,156,251,207,229,213,117};
static const unsigned char precomputed_nP_montgomery25519_q_92[] = {134,205,13,226,154,77,112,59,108,242,192,203,108,5,89,119,105,54,99,227,158,177,209,151,225,8,176,145,62,72,244,107};
static const unsigned char precomputed_nP_montgomery25519_n_92[] = {143,55,48,87,112,53,12,169,191,131,44,139,63,7,152,58,172,14,127,193,96,112,246,78,28,218,220,172,164,124,33,109};
static const unsigned char precomputed_nP_montgomery25519_p_92[] = {132,5,166,191,250,161,222,193,180,248,102,211,248,213,60,251,68,10,193,132,181,254,109,76,71,80,157,162,230,28,133,121};
static const unsigned char precomputed_nP_montgomery25519_q_93[] = {132,211,21,191,66,248,248,89,73,111,43,217,220,90,21,178,4,219,49,48,22,113,99,190,107,95,35,114,217,59,197,42};
static const unsigned char precomputed_nP_montgomery25519_n_93[] = {233,7,88,169,245,138,136,155,68,93,31,123,215,120,20,114,152,0,25,64,65,69,245,208,239,35,197,64,79,172,241,2};
static const unsigned char precomputed_nP_montgomery25519_p_93[] = {199,23,106,112,61,77,216,79,186,60,11,118,13,16,103,15,42,32,83,250,44,57,204,198,78,199,253,119,146,172,3,122};
static const unsigned char precomputed_nP_montgomery25519_q_94[] = {96,202,115,189,116,193,131,183,206,245,166,211,213,163,181,114,114,156,236,147,196,192,27,239,83,67,106,173,100,236,252,47};
static const unsigned char precomputed_nP_montgomery25519_n_94[] = {61,101,52,96,193,219,34,197,56,228,8,41,247,55,20,132,35,123,168,137,255,18,94,150,60,94,124,47,23,172,16,155};
static const unsigned char precomputed_nP_montgomery25519_p_94[] = {40,159,165,57,215,189,171,104,153,204,112,113,174,10,40,167,37,157,88,148,126,99,85,136,235,128,68,248,197,12,47,122};
static const unsigned char precomputed_nP_montgomery25519_q_95[] = {43,253,2,146,18,249,141,246,239,169,54,244,169,61,16,180,149,39,14,119,135,74,235,68,146,113,195,81,229,38,122,75};
static const unsigned char precomputed_nP_montgomery25519_n_95[] = {202,160,109,22,187,18,114,244,108,11,254,168,103,181,204,123,239,226,125,136,152,139,92,10,115,223,130,70,56,224,173,192};
static const unsigned char precomputed_nP_montgomery25519_p_95[] = {224,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_96[] = {167,175,126,31,208,11,138,29,108,204,241,125,175,14,115,81,219,83,39,19,165,200,222,35,120,16,71,153,151,169,50,104};
static const unsigned char precomputed_nP_montgomery25519_n_96[] = {19,22,170,41,57,196,167,197,237,159,108,72,100,236,202,254,165,39,22,31,150,255,39,145,145,109,234,73,190,112,233,226};
static const unsigned char precomputed_nP_montgomery25519_p_96[] = {225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_97[] = {36,8,58,231,6,163,21,209,25,168,61,203,194,202,156,87,143,205,251,110,150,100,47,16,144,135,57,184,168,5,44,51};
static const unsigned char precomputed_nP_montgomery25519_n_97[] = {250,207,235,85,195,176,210,21,49,226,14,28,243,119,217,108,68,70,135,148,114,230,134,229,39,172,0,0,48,80,97,214};
static const unsigned char precomputed_nP_montgomery25519_p_97[] = {226,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_98[] = {179,73,180,255,248,60,100,186,199,247,245,45,119,213,164,143,28,85,7,91,72,48,154,97,161,216,224,199,234,9,254,79};
static const unsigned char precomputed_nP_montgomery25519_n_98[] = {171,155,199,168,248,84,62,38,61,251,253,20,229,129,247,173,217,81,240,145,14,20,90,23,134,78,232,212,51,34,250,172};
static const unsigned char precomputed_nP_montgomery25519_p_98[] = {227,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_99[] = {155,56,106,143,220,91,199,35,51,40,34,60,68,132,234,215,235,216,224,102,48,147,31,123,65,192,218,123,192,69,204,88};
static const unsigned char precomputed_nP_montgomery25519_n_99[] = {216,66,150,88,66,14,93,184,117,133,100,210,116,16,39,29,158,140,14,79,195,252,81,101,222,179,28,201,66,97,137,95};
static const unsigned char precomputed_nP_montgomery25519_p_99[] = {228,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_100[] = {135,115,33,191,144,231,20,161,98,28,77,82,146,186,0,121,148,163,84,123,175,168,159,183,95,66,121,8,30,105,215,104};
static const unsigned char precomputed_nP_montgomery25519_n_100[] = {126,10,81,72,98,92,102,101,31,240,58,127,17,123,117,166,91,170,166,84,188,34,154,208,46,251,14,87,0,105,114,47};
static const unsigned char precomputed_nP_montgomery25519_p_100[] = {229,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_101[] = {184,152,148,235,8,16,51,133,188,254,11,79,161,191,124,78,106,124,211,231,108,219,92,138,18,188,205,203,223,38,138,118};
static const unsigned char precomputed_nP_montgomery25519_n_101[] = {10,131,96,200,92,222,33,20,40,227,105,197,27,52,94,103,254,50,55,208,121,2,232,214,99,15,32,20,15,43,222,109};
static const unsigned char precomputed_nP_montgomery25519_p_101[] = {230,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_102[] = {98,215,92,179,246,154,125,32,18,145,5,39,203,210,146,30,53,83,227,20,109,186,64,31,179,85,248,148,129,219,43,39};
static const unsigned char precomputed_nP_montgomery25519_n_102[] = {245,128,192,158,84,249,137,57,221,154,202,22,214,133,39,248,114,73,117,202,58,176,43,180,136,84,106,233,196,76,47,60};
static const unsigned char precomputed_nP_montgomery25519_p_102[] = {231,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_103[] = {163,33,2,237,179,15,10,83,254,69,45,136,40,192,117,38,0,213,31,240,83,116,174,100,58,144,175,56,180,187,59,2};
static const unsigned char precomputed_nP_montgomery25519_n_103[] = {86,132,7,229,208,131,24,182,237,39,205,5,254,76,56,75,71,195,212,224,168,179,128,128,199,239,9,175,235,190,218,12};
static const unsigned char precomputed_nP_montgomery25519_p_103[] = {232,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_104[] = {118,105,251,142,173,206,119,201,47,240,166,60,39,156,155,111,147,129,253,132,244,244,191,40,212,235,110,70,241,225,145,42};
static const unsigned char precomputed_nP_montgomery25519_n_104[] = {218,116,75,114,172,230,16,193,163,154,126,185,187,254,154,213,18,237,33,147,209,222,139,84,80,198,201,142,171,183,9,178};
static const unsigned char precomputed_nP_montgomery25519_p_104[] = {233,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_105[] = {218,19,60,95,164,29,193,143,31,60,118,76,181,15,34,25,36,25,107,130,112,1,254,30,88,119,91,143,204,104,68,115};
static const unsigned char precomputed_nP_montgomery25519_n_105[] = {102,244,58,119,155,31,176,155,201,67,186,91,94,48,167,170,255,129,116,151,167,203,173,120,226,156,230,70,180,187,160,129};
static const unsigned char precomputed_nP_montgomery25519_p_105[] = {234,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_106[] = {32,9,88,219,42,178,51,219,92,36,92,6,17,122,205,3,143,164,248,172,108,77,113,31,45,213,215,21,152,78,171,51};
static const unsigned char precomputed_nP_montgomery25519_n_106[] = {48,124,248,1,229,78,90,159,144,127,179,25,138,145,171,159,139,209,42,221,103,134,165,156,190,149,2,186,49,191,106,198};
static const unsigned char precomputed_nP_montgomery25519_p_106[] = {235,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_107[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_107[] = {127,168,222,138,187,89,94,132,67,191,183,6,49,48,33,163,188,38,86,77,26,121,155,25,71,23,137,248,57,15,9,37};
static const unsigned char precomputed_nP_montgomery25519_p_107[] = {236,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_108[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_108[] = {29,96,25,19,112,147,141,120,188,41,78,222,44,150,121,75,69,175,171,106,40,52,87,126,121,16,126,87,23,36,150,140};
static const unsigned char precomputed_nP_montgomery25519_p_108[] = {237,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_109[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_109[] = {107,93,211,155,221,173,12,104,216,40,219,59,4,41,87,244,86,208,62,135,204,236,147,28,221,9,196,79,1,84,193,178};
static const unsigned char precomputed_nP_montgomery25519_p_109[] = {238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_110[] = {119,220,130,248,172,121,136,58,112,22,32,242,0,215,240,240,73,194,107,33,173,48,122,143,203,15,1,98,169,138,17,96};
static const unsigned char precomputed_nP_montgomery25519_n_110[] = {134,208,252,118,56,61,27,237,20,246,149,81,237,237,113,234,136,14,30,201,171,146,132,221,168,115,237,104,160,183,135,222};
static const unsigned char precomputed_nP_montgomery25519_p_110[] = {239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_111[] = {191,96,234,8,162,191,161,169,220,137,105,236,215,170,48,86,253,59,49,95,28,131,143,42,119,57,37,26,0,6,3,74};
static const unsigned char precomputed_nP_montgomery25519_n_111[] = {75,114,85,162,109,230,214,121,39,165,181,96,16,182,162,72,61,8,9,52,189,26,92,30,158,109,130,167,215,80,130,122};
static const unsigned char precomputed_nP_montgomery25519_p_111[] = {240,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_112[] = {79,44,236,112,159,54,150,95,117,110,182,61,177,18,158,99,107,124,142,159,114,211,46,83,130,42,252,119,143,232,229,84};
static const unsigned char precomputed_nP_montgomery25519_n_112[] = {167,187,243,125,206,236,2,177,69,39,27,152,40,227,228,231,28,216,46,12,238,71,36,195,154,40,15,179,66,180,77,245};
static const unsigned char precomputed_nP_montgomery25519_p_112[] = {241,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_113[] = {120,118,158,141,125,24,142,120,47,134,69,41,152,97,48,54,233,93,206,63,177,243,10,239,15,75,5,166,48,220,51,42};
static const unsigned char precomputed_nP_montgomery25519_n_113[] = {244,175,1,128,188,72,149,246,181,16,184,225,132,244,229,128,85,193,26,150,57,165,199,139,193,154,79,158,200,163,180,67};
static const unsigned char precomputed_nP_montgomery25519_p_113[] = {242,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_114[] = {154,52,76,173,8,179,82,209,123,62,55,159,184,42,203,79,85,136,37,33,206,15,34,229,172,130,233,168,80,218,61,45};
static const unsigned char precomputed_nP_montgomery25519_n_114[] = {130,235,58,201,21,190,167,80,54,37,71,222,197,100,193,93,169,199,76,141,191,166,181,1,89,8,197,71,71,185,112,226};
static const unsigned char precomputed_nP_montgomery25519_p_114[] = {243,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_115[] = {73,60,108,146,86,171,58,233,185,238,63,146,73,30,24,34,168,99,126,227,84,5,105,118,225,99,196,231,236,222,30,78};
static const unsigned char precomputed_nP_montgomery25519_n_115[] = {122,58,111,170,110,97,174,165,185,228,229,99,23,86,80,121,81,137,76,171,44,133,24,21,47,189,44,142,110,203,172,228};
static const unsigned char precomputed_nP_montgomery25519_p_115[] = {244,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_116[] = {98,24,253,129,142,215,166,88,61,78,76,204,63,148,128,154,172,46,214,22,232,19,159,246,156,88,25,209,232,64,143,103};
static const unsigned char precomputed_nP_montgomery25519_n_116[] = {138,90,118,69,204,231,142,73,87,186,169,126,23,144,77,150,22,85,129,155,224,213,218,29,206,88,136,173,148,187,212,48};
static const unsigned char precomputed_nP_montgomery25519_p_116[] = {245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_117[] = {57,242,82,233,126,54,168,233,155,25,198,102,114,4,58,53,68,128,90,192,59,130,141,40,215,52,107,196,131,41,65,39};
static const unsigned char precomputed_nP_montgomery25519_n_117[] = {143,5,129,132,16,165,68,26,217,213,183,2,61,160,235,94,97,160,134,98,96,79,204,206,51,31,96,40,42,248,139,74};
static const unsigned char precomputed_nP_montgomery25519_p_117[] = {246,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_118[] = {123,70,222,176,120,109,101,245,75,98,220,83,5,255,243,76,191,226,15,90,209,192,192,236,110,38,48,104,108,237,145,40};
static const unsigned char precomputed_nP_montgomery25519_n_118[] = {92,243,79,38,222,93,146,249,0,77,52,32,178,24,251,60,104,5,10,117,211,94,109,59,250,54,153,231,102,60,234,71};
static const unsigned char precomputed_nP_montgomery25519_p_118[] = {247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_119[] = {55,148,59,52,217,39,224,148,171,189,93,22,23,51,10,19,211,155,65,128,118,2,100,22,172,253,152,235,235,75,32,67};
static const unsigned char precomputed_nP_montgomery25519_n_119[] = {0,69,224,111,143,3,121,60,218,111,61,191,244,207,154,238,43,179,95,164,194,49,71,196,224,76,62,140,76,137,174,79};
static const unsigned char precomputed_nP_montgomery25519_p_119[] = {248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_120[] = {249,135,87,93,181,36,185,185,29,41,248,205,125,88,68,213,249,15,243,25,75,40,228,78,236,220,85,85,118,111,169,86};
static const unsigned char precomputed_nP_montgomery25519_n_120[] = {165,25,173,168,70,166,223,122,78,153,39,69,250,162,177,233,203,26,79,231,92,0,158,9,116,19,14,193,175,27,150,117};
static const unsigned char precomputed_nP_montgomery25519_p_120[] = {249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_121[] = {106,103,2,243,137,56,146,229,122,239,78,38,157,70,155,109,250,148,25,146,155,131,53,130,252,229,155,60,116,196,27,24};
static const unsigned char precomputed_nP_montgomery25519_n_121[] = {251,191,130,168,64,230,88,54,22,53,35,177,3,197,33,239,188,60,216,140,88,186,126,206,1,97,131,2,250,177,194,86};
static const unsigned char precomputed_nP_montgomery25519_p_121[] = {250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_122[] = {56,169,74,148,128,81,129,189,149,193,170,248,98,241,253,84,138,97,74,51,6,228,232,110,164,73,149,25,108,184,144,118};
static const unsigned char precomputed_nP_montgomery25519_n_122[] = {50,82,191,214,169,252,155,195,155,212,255,127,87,214,19,237,14,27,139,171,142,23,34,74,60,136,88,220,116,122,30,67};
static const unsigned char precomputed_nP_montgomery25519_p_122[] = {251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_123[] = {40,200,204,209,91,183,68,11,249,72,60,139,63,177,138,71,245,134,205,27,114,128,202,70,153,135,44,233,35,233,100,28};
static const unsigned char precomputed_nP_montgomery25519_n_123[] = {211,246,247,134,90,237,209,205,238,198,243,113,12,34,103,183,150,113,189,173,254,100,88,246,192,98,123,82,70,180,97,180};
static const unsigned char precomputed_nP_montgomery25519_p_123[] = {252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_124[] = {41,180,99,22,85,111,172,206,203,210,25,146,24,17,12,58,24,38,145,39,250,10,156,182,230,244,68,97,12,26,173,78};
static const unsigned char precomputed_nP_montgomery25519_n_124[] = {11,45,66,197,85,116,154,149,65,54,212,30,20,171,189,126,107,236,184,213,194,189,199,3,122,186,156,36,49,221,75,243};
static const unsigned char precomputed_nP_montgomery25519_p_124[] = {253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_125[] = {239,222,144,88,98,46,18,204,120,214,116,139,233,19,96,178,82,59,103,84,52,232,24,152,111,232,130,39,175,220,254,34};
static const unsigned char precomputed_nP_montgomery25519_n_125[] = {252,28,130,205,43,35,198,203,94,180,183,172,82,160,235,193,237,31,103,189,152,231,44,91,251,64,191,27,75,254,228,13};
static const unsigned char precomputed_nP_montgomery25519_p_125[] = {254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_126[] = {126,137,129,238,107,156,145,31,56,159,155,66,4,83,86,183,9,220,155,48,244,177,187,3,182,38,36,137,95,249,128,25};
static const unsigned char precomputed_nP_montgomery25519_n_126[] = {150,106,51,130,110,109,118,34,37,58,101,225,223,130,237,20,148,88,34,55,189,39,159,170,9,166,166,101,82,155,237,246};
static const unsigned char precomputed_nP_montgomery25519_p_126[] = {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,127};
static const unsigned char precomputed_nP_montgomery25519_q_127[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_127[] = {43,209,137,54,200,206,214,128,133,138,253,245,34,243,159,124,17,121,12,21,147,118,119,165,74,156,74,124,213,9,98,85};
static const unsigned char precomputed_nP_montgomery25519_p_127[] = {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,0,128};
static const unsigned char precomputed_nP_montgomery25519_q_128[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_128[] = {121,226,255,72,156,59,180,108,213,127,172,208,139,35,21,97,37,3,146,121,43,122,6,83,172,242,162,166,229,184,224,33};
static const unsigned char precomputed_nP_montgomery25519_p_128[] = {1,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};
static const unsigned char precomputed_nP_montgomery25519_q_129[] = {33,212,245,239,163,87,64,222,199,45,84,224,94,162,129,34,49,21,39,11,84,129,120,16,201,2,126,109,67,19,48,21};
static const unsigned char precomputed_nP_montgomery25519_n_129[] = {37,245,188,137,193,18,34,79,126,77,72,53,114,255,161,70,96,9,222,4,230,187,65,70,14,30,3,171,235,169,146,107};
static const unsigned char precomputed_nP_montgomery25519_p_129[] = {2,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};
static const unsigned char precomputed_nP_montgomery25519_q_130[] = {136,19,17,112,99,189,63,169,15,116,146,2,181,161,168,201,3,82,207,138,247,146,111,53,253,213,249,195,109,61,62,62};
static const unsigned char precomputed_nP_montgomery25519_n_130[] = {220,118,210,98,144,140,101,108,216,156,242,52,155,146,195,50,23,251,15,92,0,242,114,115,202,176,242,122,2,187,113,48};
static const unsigned char precomputed_nP_montgomery25519_p_130[] = {3,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};
static const unsigned char precomputed_nP_montgomery25519_q_131[] = {214,96,131,178,122,236,247,212,60,83,213,17,200,164,52,19,131,159,193,252,76,52,94,134,135,233,55,169,243,136,23,107};
static const unsigned char precomputed_nP_montgomery25519_n_131[] = {253,149,141,117,207,5,64,150,242,46,102,247,223,91,126,103,57,116,158,116,114,97,178,55,90,175,151,93,117,62,82,113};
static const unsigned char precomputed_nP_montgomery25519_p_131[] = {4,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};
static const unsigned char precomputed_nP_montgomery25519_q_132[] = {31,100,25,145,30,62,144,212,64,219,186,236,38,135,240,173,18,18,210,133,193,58,175,187,132,2,62,79,230,138,149,63};
static const unsigned char precomputed_nP_montgomery25519_n_132[] = {106,22,136,121,130,169,103,161,11,79,65,78,207,152,232,123,241,32,124,101,14,77,170,5,120,175,47,189,82,25,245,59};
static const unsigned char precomputed_nP_montgomery25519_p_132[] = {5,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};
static const unsigned char precomputed_nP_montgomery25519_q_133[] = {146,49,171,76,227,245,47,149,115,6,126,210,49,141,165,156,142,7,128,23,25,254,255,223,153,207,248,237,162,250,198,67};
static const unsigned char precomputed_nP_montgomery25519_n_133[] = {46,91,106,192,105,223,139,150,210,41,132,178,108,215,36,18,140,88,150,236,62,245,186,175,145,96,199,179,208,55,177,25};
static const unsigned char precomputed_nP_montgomery25519_p_133[] = {6,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};
static const unsigned char precomputed_nP_montgomery25519_q_134[] = {115,167,160,190,36,209,72,210,130,232,16,195,227,119,219,213,42,163,16,207,133,16,126,252,97,244,154,83,165,64,192,26};
static const unsigned char precomputed_nP_montgomery25519_n_134[] = {197,250,34,65,211,83,13,97,5,122,131,88,133,115,37,233,133,115,96,127,218,231,122,121,42,85,169,187,2,171,159,59};
static const unsigned char precomputed_nP_montgomery25519_p_134[] = {7,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};
static const unsigned char precomputed_nP_montgomery25519_q_135[] = {152,12,190,190,80,17,187,19,71,36,226,40,125,198,215,94,232,63,42,31,14,100,72,70,107,235,184,199,209,44,150,91};
static const unsigned char precomputed_nP_montgomery25519_n_135[] = {208,150,131,16,28,148,160,13,192,151,253,190,173,231,141,194,53,102,254,194,194,112,120,134,243,84,110,118,115,207,195,120};
static const unsigned char precomputed_nP_montgomery25519_p_135[] = {8,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};
static const unsigned char precomputed_nP_montgomery25519_q_136[] = {145,169,66,194,172,81,198,39,46,210,40,41,254,167,131,100,86,46,217,95,40,211,39,130,222,43,75,12,181,179,175,68};
static const unsigned char precomputed_nP_montgomery25519_n_136[] = {42,70,117,8,76,143,126,151,191,183,111,41,170,242,171,213,73,232,57,158,199,163,13,0,109,71,169,249,154,34,155,123};
static const unsigned char precomputed_nP_montgomery25519_p_136[] = {9,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};
static const unsigned char precomputed_nP_montgomery25519_q_137[] = {133,21,44,67,64,117,20,116,128,232,253,115,65,157,23,187,236,174,41,220,111,27,126,207,11,138,96,96,151,211,168,49};
static const unsigned char precomputed_nP_montgomery25519_n_137[] = {106,196,36,245,76,90,224,99,36,155,245,98,7,214,46,253,219,218,171,59,103,128,70,171,122,91,191,15,48,166,153,158};
static const unsigned char precomputed_nP_montgomery25519_p_137[] = {10,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};
static const unsigned char precomputed_nP_montgomery25519_q_138[] = {6,194,203,81,78,250,69,205,80,64,132,142,179,170,110,65,191,233,102,109,191,240,215,13,109,52,60,12,114,5,33,56};
static const unsigned char precomputed_nP_montgomery25519_n_138[] = {170,215,102,187,235,20,108,177,84,222,40,135,127,131,20,164,228,65,29,220,23,40,59,98,61,249,215,13,202,142,94,189};
static const unsigned char precomputed_nP_montgomery25519_p_138[] = {11,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};
static const unsigned char precomputed_nP_montgomery25519_q_139[] = {245,179,140,16,163,32,44,87,11,245,40,56,66,162,19,245,118,155,111,15,189,36,221,51,162,104,129,154,194,248,202,68};
static const unsigned char precomputed_nP_montgomery25519_n_139[] = {93,207,41,255,72,7,206,47,11,49,51,239,106,43,171,199,138,46,30,223,144,39,144,75,5,67,212,101,140,159,104,219};
static const unsigned char precomputed_nP_montgomery25519_p_139[] = {12,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};
static const unsigned char precomputed_nP_montgomery25519_q_140[] = {244,234,224,253,20,60,198,188,247,143,28,41,20,220,97,2,77,10,78,118,138,153,225,43,248,21,123,242,192,35,238,1};
static const unsigned char precomputed_nP_montgomery25519_n_140[] = {44,175,48,213,87,226,33,200,167,239,38,114,103,117,42,90,228,64,131,219,79,3,234,177,48,0,9,125,56,205,68,79};
static const unsigned char precomputed_nP_montgomery25519_p_140[] = {13,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};
static const unsigned char precomputed_nP_montgomery25519_q_141[] = {31,224,135,97,215,173,1,8,159,103,168,115,190,1,26,137,189,20,155,104,150,122,79,28,21,220,74,33,159,177,72,76};
static const unsigned char precomputed_nP_montgomery25519_n_141[] = {250,114,79,178,120,16,130,147,4,253,171,208,74,42,200,186,236,25,149,137,139,159,200,123,139,203,55,136,171,168,21,138};
static const unsigned char precomputed_nP_montgomery25519_p_141[] = {14,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};
static const unsigned char precomputed_nP_montgomery25519_q_142[] = {215,194,226,30,5,48,102,158,105,8,172,181,127,251,175,126,0,25,101,220,84,10,197,19,105,58,237,49,123,52,190,117};
static const unsigned char precomputed_nP_montgomery25519_n_142[] = {31,239,111,66,250,165,152,62,61,1,47,9,134,219,166,127,174,8,170,206,103,158,99,99,235,95,103,58,250,213,120,252};
static const unsigned char precomputed_nP_montgomery25519_p_142[] = {15,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};
static const unsigned char precomputed_nP_montgomery25519_q_143[] = {131,178,101,184,126,23,38,56,138,103,253,111,188,251,228,91,254,228,187,90,26,225,156,197,66,28,186,57,44,185,250,23};
static const unsigned char precomputed_nP_montgomery25519_n_143[] = {207,180,26,162,204,78,145,211,202,192,124,41,122,233,177,209,8,206,161,10,221,180,103,101,250,82,217,23,179,253,193,149};
static const unsigned char precomputed_nP_montgomery25519_p_143[] = {16,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};
static const unsigned char precomputed_nP_montgomery25519_q_144[] = {154,231,161,126,117,93,158,70,201,65,48,137,36,99,132,30,137,109,243,186,100,20,184,154,138,250,91,2,143,46,33,101};
static const unsigned char precomputed_nP_montgomery25519_n_144[] = {222,88,162,11,91,133,48,186,207,86,217,44,216,141,164,95,29,80,166,16,139,0,83,201,246,29,109,78,238,68,125,157};
static const unsigned char precomputed_nP_montgomery25519_p_144[] = {17,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};
static const unsigned char precomputed_nP_montgomery25519_q_145[] = {231,158,68,235,147,216,171,15,157,107,171,70,180,155,200,39,184,120,149,1,0,152,227,33,46,131,214,172,224,37,32,111};
static const unsigned char precomputed_nP_montgomery25519_n_145[] = {221,101,130,221,166,124,17,245,238,25,219,91,108,177,232,130,230,79,35,99,5,36,16,61,78,125,124,70,149,231,244,69};
static const unsigned char precomputed_nP_montgomery25519_p_145[] = {18,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};
static const unsigned char precomputed_nP_montgomery25519_q_146[] = {253,205,161,63,111,59,7,121,218,246,210,176,175,45,127,224,204,83,38,105,27,136,210,12,116,200,63,111,243,97,6,112};
static const unsigned char precomputed_nP_montgomery25519_n_146[] = {114,119,121,98,175,166,37,124,162,211,162,97,85,10,67,79,143,254,46,16,63,219,181,76,202,121,194,114,32,13,109,169};
static const unsigned char precomputed_nP_montgomery25519_p_146[] = {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};
static const unsigned char precomputed_nP_montgomery25519_q_147[] = {5,46,30,42,98,63,154,70,66,63,49,231,188,171,247,29,219,150,92,232,106,211,78,164,181,2,112,69,113,43,80,32};
static const unsigned char precomputed_nP_montgomery25519_n_147[] = {24,51,236,148,11,64,78,154,213,179,159,4,115,141,182,28,102,173,100,144,166,129,16,215,174,117,165,170,180,196,209,236};
static const unsigned char precomputed_nP_montgomery25519_p_147[] = {20,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};
static const unsigned char precomputed_nP_montgomery25519_q_148[] = {118,89,75,102,164,69,59,231,245,160,186,207,73,82,175,87,192,188,225,244,45,156,230,193,151,62,253,224,122,86,181,24};
static const unsigned char precomputed_nP_montgomery25519_n_148[] = {84,208,129,137,9,251,193,7,81,120,32,66,84,245,156,199,34,180,154,249,92,2,166,86,165,248,77,132,252,142,53,69};
static const unsigned char precomputed_nP_montgomery25519_p_148[] = {21,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};
static const unsigned char precomputed_nP_montgomery25519_q_149[] = {115,208,88,150,38,171,228,174,111,26,37,143,232,112,75,79,110,236,116,118,226,134,16,45,74,163,167,66,94,182,154,7};
static const unsigned char precomputed_nP_montgomery25519_n_149[] = {85,231,154,122,37,75,13,68,171,35,254,137,72,128,41,109,154,241,119,182,82,180,64,165,188,230,147,88,161,154,82,35};
static const unsigned char precomputed_nP_montgomery25519_p_149[] = {22,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};
static const unsigned char precomputed_nP_montgomery25519_q_150[] = {18,210,84,201,51,34,241,76,154,163,14,204,246,5,232,8,21,91,27,156,153,60,43,242,136,87,232,108,180,171,166,74};
static const unsigned char precomputed_nP_montgomery25519_n_150[] = {235,152,251,182,2,242,135,168,32,166,19,246,233,172,27,50,121,44,12,173,182,131,17,187,88,155,43,151,159,53,48,239};
static const unsigned char precomputed_nP_montgomery25519_p_150[] = {23,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};
static const unsigned char precomputed_nP_montgomery25519_q_151[] = {197,233,94,100,214,120,245,139,186,201,108,21,34,160,141,46,28,199,221,166,87,96,122,5,69,213,139,52,244,140,249,113};
static const unsigned char precomputed_nP_montgomery25519_n_151[] = {61,89,240,133,62,242,120,222,117,147,198,216,16,175,16,247,248,60,11,128,6,172,143,37,36,0,216,122,160,69,173,237};
static const unsigned char precomputed_nP_montgomery25519_p_151[] = {24,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};
static const unsigned char precomputed_nP_montgomery25519_q_152[] = {99,251,119,112,231,187,226,19,201,44,152,12,75,37,149,216,238,92,77,90,182,244,215,236,152,248,64,29,159,78,248,62};
static const unsigned char precomputed_nP_montgomery25519_n_152[] = {231,146,78,235,9,155,237,211,193,96,61,198,102,79,190,77,54,114,95,224,213,45,193,36,145,253,126,52,11,186,208,182};
static const unsigned char precomputed_nP_montgomery25519_p_152[] = {25,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};
static const unsigned char precomputed_nP_montgomery25519_q_153[] = {158,138,9,51,170,145,115,189,112,13,48,3,98,41,174,199,232,105,74,126,173,133,160,77,89,232,220,120,220,157,180,65};
static const unsigned char precomputed_nP_montgomery25519_n_153[] = {238,56,67,46,144,112,69,253,133,9,217,170,118,242,86,6,52,125,195,122,41,60,158,201,133,200,209,134,204,181,238,205};
static const unsigned char precomputed_nP_montgomery25519_p_153[] = {26,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};
static const unsigned char precomputed_nP_montgomery25519_q_154[] = {65,16,12,71,178,214,47,201,150,50,12,108,176,230,144,60,126,229,4,105,37,131,67,15,164,227,197,10,127,202,91,86};
static const unsigned char precomputed_nP_montgomery25519_n_154[] = {225,31,186,168,194,238,124,228,39,238,102,175,30,210,63,137,5,69,69,238,72,90,235,71,120,124,68,174,100,168,208,14};
static const unsigned char precomputed_nP_montgomery25519_p_154[] = {27,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};
static const unsigned char precomputed_nP_montgomery25519_q_155[] = {156,161,169,73,10,135,164,15,62,197,29,189,29,233,29,213,248,37,51,240,20,220,225,237,118,6,251,192,160,51,249,13};
static const unsigned char precomputed_nP_montgomery25519_n_155[] = {129,142,251,243,96,133,162,230,82,12,236,18,159,228,13,83,177,127,202,40,226,42,20,212,223,131,93,100,186,166,252,46};
static const unsigned char precomputed_nP_montgomery25519_p_155[] = {28,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};
static const unsigned char precomputed_nP_montgomery25519_q_156[] = {110,150,14,99,68,203,159,4,163,34,159,247,191,49,163,248,31,16,1,99,125,248,15,121,30,38,206,24,168,24,186,68};
static const unsigned char precomputed_nP_montgomery25519_n_156[] = {179,223,101,162,71,212,155,246,157,206,93,80,72,143,130,63,213,149,244,37,215,193,98,58,109,142,63,23,177,0,200,36};
static const unsigned char precomputed_nP_montgomery25519_p_156[] = {29,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};
static const unsigned char precomputed_nP_montgomery25519_q_157[] = {8,189,66,216,234,113,36,241,5,26,29,3,178,167,139,138,18,138,176,138,255,185,236,227,217,63,49,202,131,61,120,24};
static const unsigned char precomputed_nP_montgomery25519_n_157[] = {42,103,110,219,153,124,6,226,248,13,38,209,54,17,138,229,63,108,43,253,67,156,23,218,80,216,42,141,83,202,51,52};
static const unsigned char precomputed_nP_montgomery25519_p_157[] = {30,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};
static const unsigned char precomputed_nP_montgomery25519_q_158[] = {212,158,177,203,244,122,84,74,148,209,29,122,61,231,225,9,252,236,13,189,71,250,166,72,32,254,191,58,116,1,235,118};
static const unsigned char precomputed_nP_montgomery25519_n_158[] = {79,20,219,25,137,225,165,76,146,77,39,38,68,101,196,110,27,120,16,166,225,132,241,144,51,252,47,72,213,55,167,64};
static const unsigned char precomputed_nP_montgomery25519_p_158[] = {31,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};
static const unsigned char precomputed_nP_montgomery25519_q_159[] = {24,51,215,230,138,23,30,88,143,60,86,238,203,211,116,63,245,76,50,7,178,47,174,153,162,153,90,26,244,64,247,126};
static const unsigned char precomputed_nP_montgomery25519_n_159[] = {139,212,131,124,25,171,27,175,3,6,47,161,15,105,79,142,37,119,173,48,58,0,91,57,41,8,131,142,248,37,47,75};
static const unsigned char precomputed_nP_montgomery25519_p_159[] = {205,235,122,124,59,65,184,174,22,86,227,250,241,159,196,106,218,9,141,235,156,50,177,253,134,98,5,22,95,73,184,128};
static const unsigned char precomputed_nP_montgomery25519_q_160[] = {71,231,201,137,60,129,65,100,178,201,65,65,97,209,157,227,242,131,60,84,180,233,58,74,146,24,187,55,230,120,180,110};
static const unsigned char precomputed_nP_montgomery25519_n_160[] = {125,125,27,37,31,143,135,2,194,130,146,95,233,172,2,232,137,39,16,69,209,12,149,214,71,224,189,87,96,39,17,71};
static const unsigned char precomputed_nP_montgomery25519_p_160[] = {40,98,193,190,245,237,7,74,121,123,4,94,59,199,62,176,195,18,156,252,169,18,89,40,237,6,154,127,2,176,94,129};
static const unsigned char precomputed_nP_montgomery25519_q_161[] = {172,70,14,185,30,186,50,208,224,176,120,187,8,3,251,227,44,1,74,205,248,162,76,83,200,48,254,14,251,56,149,66};
static const unsigned char precomputed_nP_montgomery25519_n_161[] = {142,204,93,4,172,58,216,97,62,202,142,173,63,55,164,188,30,124,53,110,251,57,132,219,196,226,243,51,248,253,196,211};
static const unsigned char precomputed_nP_montgomery25519_p_161[] = {181,0,249,162,129,240,19,130,20,185,201,69,162,235,51,51,160,82,204,246,150,73,125,6,149,42,172,102,0,215,65,132};
static const unsigned char precomputed_nP_montgomery25519_q_162[] = {247,146,255,227,153,101,136,0,146,133,35,205,167,85,69,130,198,226,111,184,244,181,248,124,96,112,53,61,56,88,129,74};
static const unsigned char precomputed_nP_montgomery25519_n_162[] = {7,221,73,126,146,254,126,111,117,142,17,31,237,8,0,68,160,154,88,55,112,212,116,44,71,109,134,79,44,120,112,37};
static const unsigned char precomputed_nP_montgomery25519_p_162[] = {62,73,24,66,66,142,216,188,26,26,140,60,231,157,121,133,255,143,145,204,30,172,47,178,111,241,184,140,95,102,197,132};
static const unsigned char precomputed_nP_montgomery25519_q_163[] = {206,78,210,8,102,50,143,143,31,56,203,224,32,190,137,2,149,174,115,118,219,32,131,246,43,49,186,161,111,98,144,46};
static const unsigned char precomputed_nP_montgomery25519_n_163[] = {89,182,12,218,220,230,207,116,32,5,79,25,13,197,126,173,15,180,195,30,11,214,14,6,17,153,44,74,14,173,128,126};
static const unsigned char precomputed_nP_montgomery25519_p_163[] = {19,232,149,143,194,178,39,176,69,195,244,137,242,239,152,240,213,223,172,5,211,198,51,57,177,56,2,136,109,83,252,133};
static const unsigned char precomputed_nP_montgomery25519_q_164[] = {198,154,199,78,110,86,239,200,105,159,84,137,33,219,78,60,63,55,16,37,131,150,75,186,153,157,252,223,107,173,129,105};
static const unsigned char precomputed_nP_montgomery25519_n_164[] = {217,221,54,187,59,23,198,164,60,160,219,64,248,168,85,207,97,19,155,220,128,246,48,137,142,49,224,90,61,44,219,101};
static const unsigned char precomputed_nP_montgomery25519_p_164[] = {125,55,105,100,127,60,72,138,81,84,228,190,83,158,168,146,141,87,127,175,218,74,35,174,189,170,2,180,179,16,1,137};
static const unsigned char precomputed_nP_montgomery25519_q_165[] = {249,150,54,25,81,32,193,186,113,23,74,213,26,222,126,40,36,69,191,63,53,207,74,7,146,7,223,114,136,152,60,1};
static const unsigned char precomputed_nP_montgomery25519_n_165[] = {60,198,119,4,157,93,21,50,218,97,77,98,108,198,219,180,152,246,168,214,106,159,198,239,33,173,152,200,50,159,237,195};
static const unsigned char precomputed_nP_montgomery25519_p_165[] = {129,43,98,81,200,60,211,58,130,133,78,109,209,68,63,72,135,148,109,167,130,138,113,36,70,35,125,182,53,181,83,140};
static const unsigned char precomputed_nP_montgomery25519_q_166[] = {250,24,107,107,6,101,57,112,116,170,102,232,87,148,128,233,176,179,128,225,215,239,98,241,165,238,3,177,50,199,204,1};
static const unsigned char precomputed_nP_montgomery25519_n_166[] = {92,165,88,239,5,221,61,225,13,149,25,23,82,2,96,1,119,0,65,173,221,78,4,206,227,5,131,64,13,203,112,190};
static const unsigned char precomputed_nP_montgomery25519_p_166[] = {112,219,85,141,78,156,71,229,153,137,212,86,246,41,139,137,210,13,246,3,78,206,173,113,225,30,236,100,242,203,91,142};
static const unsigned char precomputed_nP_montgomery25519_q_167[] = {170,208,209,190,88,225,4,146,80,242,232,41,199,19,207,109,186,249,155,73,43,228,161,96,105,32,252,159,150,203,35,3};
static const unsigned char precomputed_nP_montgomery25519_n_167[] = {178,94,69,233,220,50,222,130,166,39,181,69,40,191,116,203,151,218,24,220,132,222,107,236,239,184,160,139,114,252,191,162};
static const unsigned char precomputed_nP_montgomery25519_p_167[] = {231,77,226,40,229,224,72,3,74,203,150,143,218,164,211,149,236,191,232,231,122,157,146,89,72,59,89,49,46,161,128,143};
static const unsigned char precomputed_nP_montgomery25519_q_168[] = {137,26,192,72,140,228,109,25,100,16,99,83,223,159,111,128,121,49,67,57,47,19,70,152,130,193,111,128,175,222,74,109};
static const unsigned char precomputed_nP_montgomery25519_n_168[] = {67,255,22,107,137,168,56,244,159,61,114,162,124,161,245,73,222,225,62,157,114,138,222,7,97,23,219,193,201,28,176,56};
static const unsigned char precomputed_nP_montgomery25519_p_168[] = {133,115,68,47,111,244,70,154,6,222,111,195,182,203,89,217,56,164,165,2,53,122,87,204,87,223,122,234,67,192,154,144};
static const unsigned char precomputed_nP_montgomery25519_q_169[] = {230,192,51,223,88,76,165,65,245,172,169,217,135,30,175,238,107,118,156,229,115,148,251,35,247,181,153,141,64,209,111,48};
static const unsigned char precomputed_nP_montgomery25519_n_169[] = {21,84,254,236,239,46,126,131,224,60,237,210,58,234,219,65,146,237,251,203,220,41,72,103,157,160,236,158,3,232,217,187};
static const unsigned char precomputed_nP_montgomery25519_p_169[] = {223,12,82,97,145,239,48,99,177,83,194,80,181,66,99,23,65,96,19,230,123,192,120,197,142,28,29,234,21,134,160,148};
static const unsigned char precomputed_nP_montgomery25519_q_170[] = {132,85,71,140,81,157,140,27,244,168,251,76,90,21,84,87,47,220,93,183,132,39,90,110,126,195,60,209,172,229,201,62};
static const unsigned char precomputed_nP_montgomery25519_n_170[] = {17,171,138,180,180,226,243,241,22,94,105,224,150,240,171,28,114,160,47,85,212,91,5,38,164,168,199,192,131,226,94,133};
static const unsigned char precomputed_nP_montgomery25519_p_170[] = {248,209,60,152,240,138,191,75,173,194,6,183,199,84,27,79,175,215,246,27,222,29,199,47,232,61,233,117,32,51,140,150};
static const unsigned char precomputed_nP_montgomery25519_q_171[] = {30,225,230,237,233,238,81,121,182,15,229,62,119,131,26,184,91,255,252,212,184,172,61,70,71,129,95,179,166,196,248,54};
static const unsigned char precomputed_nP_montgomery25519_n_171[] = {6,39,247,97,135,82,216,158,152,20,244,9,181,230,238,170,16,172,62,95,173,73,50,245,208,31,251,156,87,215,92,47};
static const unsigned char precomputed_nP_montgomery25519_p_171[] = {219,58,144,115,100,151,51,85,47,103,37,189,190,237,157,116,69,199,145,142,58,96,214,20,32,232,39,197,126,193,49,151};
static const unsigned char precomputed_nP_montgomery25519_q_172[] = {226,192,7,12,247,39,31,31,146,232,156,62,81,27,45,7,26,101,90,209,20,194,119,196,21,128,80,155,216,45,136,36};
static const unsigned char precomputed_nP_montgomery25519_n_172[] = {25,242,127,15,170,249,103,59,20,244,130,221,215,176,77,12,200,251,121,85,238,49,5,133,211,209,74,129,236,119,40,245};
static const unsigned char precomputed_nP_montgomery25519_p_172[] = {95,200,38,56,245,199,134,15,168,128,65,85,197,140,23,11,141,135,124,193,253,118,2,188,6,130,168,239,200,176,14,152};
static const unsigned char precomputed_nP_montgomery25519_q_173[] = {237,55,206,156,153,98,47,4,113,19,141,79,130,147,182,227,67,233,30,11,14,216,24,50,201,173,251,94,125,59,10,23};
static const unsigned char precomputed_nP_montgomery25519_n_173[] = {72,33,171,71,44,102,239,175,64,120,46,56,198,235,52,96,62,96,164,43,133,198,102,111,54,57,59,182,139,177,48,199};
static const unsigned char precomputed_nP_montgomery25519_p_173[] = {170,138,69,101,51,179,185,50,235,207,22,189,77,155,217,80,172,85,92,4,153,152,118,128,93,130,49,239,154,53,165,152};
static const unsigned char precomputed_nP_montgomery25519_q_174[] = {181,49,110,183,58,255,210,62,187,69,3,62,83,113,156,197,242,100,21,35,207,254,182,177,170,140,233,230,156,93,33,25};
static const unsigned char precomputed_nP_montgomery25519_n_174[] = {181,28,192,208,105,213,47,2,4,133,81,88,166,125,243,216,66,163,87,202,118,19,60,94,65,189,56,132,89,231,127,14};
static const unsigned char precomputed_nP_montgomery25519_p_174[] = {174,139,27,98,245,150,194,250,72,239,94,30,130,68,86,121,100,115,184,14,46,231,88,52,64,201,183,229,190,44,174,154};
static const unsigned char precomputed_nP_montgomery25519_q_175[] = {155,73,0,92,215,234,237,137,180,16,181,128,83,187,187,194,169,65,21,107,112,232,230,143,118,49,50,87,125,129,170,102};
static const unsigned char precomputed_nP_montgomery25519_n_175[] = {199,222,5,120,20,88,209,212,97,81,22,238,251,127,179,251,163,181,229,18,135,154,246,23,200,177,133,115,91,247,242,198};
static const unsigned char precomputed_nP_montgomery25519_p_175[] = {43,252,244,51,167,151,107,235,93,92,248,1,29,208,144,19,254,172,17,60,103,54,237,33,7,26,50,245,24,147,154,155};
static const unsigned char precomputed_nP_montgomery25519_q_176[] = {83,174,249,202,179,58,189,144,173,3,137,209,230,75,20,7,24,221,28,81,93,137,8,72,28,93,255,35,19,90,20,123};
static const unsigned char precomputed_nP_montgomery25519_n_176[] = {91,180,105,35,174,87,20,235,92,71,89,77,152,131,114,106,81,139,4,171,161,35,61,125,41,1,135,240,155,128,35,68};
static const unsigned char precomputed_nP_montgomery25519_p_176[] = {36,129,171,217,20,211,14,8,126,132,169,222,235,63,12,118,50,155,57,73,49,89,249,62,24,217,147,143,203,111,156,155};
static const unsigned char precomputed_nP_montgomery25519_q_177[] = {65,62,154,115,224,88,6,117,184,185,242,211,66,135,27,228,207,140,55,113,135,116,214,21,101,100,88,232,37,123,40,23};
static const unsigned char precomputed_nP_montgomery25519_n_177[] = {163,155,152,213,111,119,210,187,202,72,84,68,58,114,229,197,92,7,41,68,56,71,147,109,91,123,234,102,149,237,244,28};
static const unsigned char precomputed_nP_montgomery25519_p_177[] = {205,2,202,59,157,250,84,118,151,165,55,104,243,106,40,149,64,241,251,65,42,56,34,16,234,54,211,253,5,37,252,155};
static const unsigned char precomputed_nP_montgomery25519_q_178[] = {21,183,78,80,200,224,244,217,51,149,162,50,234,63,225,34,110,163,6,104,143,7,14,153,90,173,192,153,92,6,198,30};
static const unsigned char precomputed_nP_montgomery25519_n_178[] = {31,39,168,112,198,233,1,159,99,200,173,70,129,62,5,64,131,128,111,196,62,251,31,79,244,99,219,93,147,157,111,252};
static const unsigned char precomputed_nP_montgomery25519_p_178[] = {59,200,140,46,90,47,67,112,167,35,75,6,224,7,207,227,99,207,251,113,168,1,23,218,226,51,117,255,161,142,153,156};
static const unsigned char precomputed_nP_montgomery25519_q_179[] = {37,4,115,109,112,38,49,17,65,41,208,227,162,7,235,158,167,241,174,152,183,52,193,184,73,164,47,221,169,24,150,56};
static const unsigned char precomputed_nP_montgomery25519_n_179[] = {198,138,197,237,159,88,193,153,162,71,205,235,65,200,206,228,241,64,162,9,214,117,17,219,108,249,215,220,64,177,203,133};
static const unsigned char precomputed_nP_montgomery25519_p_179[] = {92,215,72,182,154,128,219,211,47,140,246,17,244,233,3,54,167,134,151,153,169,146,83,148,29,65,179,15,94,41,232,161};
static const unsigned char precomputed_nP_montgomery25519_q_180[] = {3,76,186,156,73,32,8,184,243,153,152,187,133,201,4,193,22,190,69,70,182,40,172,229,239,188,2,74,226,188,145,126};
static const unsigned char precomputed_nP_montgomery25519_n_180[] = {17,170,83,102,67,207,39,21,223,218,81,224,198,140,140,93,161,165,42,92,44,89,180,253,126,55,124,229,101,60,181,201};
static const unsigned char precomputed_nP_montgomery25519_p_180[] = {123,220,115,8,78,56,160,102,17,73,213,119,146,233,53,244,107,123,154,141,135,28,131,87,69,49,87,209,20,249,56,162};
static const unsigned char precomputed_nP_montgomery25519_q_181[] = {107,34,228,2,211,131,135,174,55,26,22,11,123,154,234,171,193,20,22,138,117,172,170,186,145,69,38,36,18,145,190,49};
static const unsigned char precomputed_nP_montgomery25519_n_181[] = {224,117,38,103,132,218,166,77,3,18,108,50,74,125,235,120,160,25,251,25,99,195,7,219,75,45,19,2,234,159,96,204};
static const unsigned char precomputed_nP_montgomery25519_p_181[] = {86,147,246,133,145,58,250,80,175,26,64,139,193,73,15,156,233,170,63,226,153,120,103,252,148,59,25,147,112,38,215,163};
static const unsigned char precomputed_nP_montgomery25519_q_182[] = {112,155,213,119,42,188,194,117,1,220,30,121,159,134,158,94,15,242,75,232,214,4,87,58,90,222,103,169,64,203,215,34};
static const unsigned char precomputed_nP_montgomery25519_n_182[] = {160,161,157,146,31,135,215,211,9,246,14,28,195,160,51,136,175,159,70,107,190,56,185,117,213,1,209,161,89,105,112,14};
static const unsigned char precomputed_nP_montgomery25519_p_182[] = {77,15,3,198,139,24,114,103,137,170,49,188,87,52,125,80,8,103,119,222,166,174,134,83,41,191,108,14,195,128,111,169};
static const unsigned char precomputed_nP_montgomery25519_q_183[] = {101,8,45,230,27,51,148,195,75,127,203,167,78,137,135,248,54,28,30,246,64,138,219,86,134,110,189,60,9,77,225,121};
static const unsigned char precomputed_nP_montgomery25519_n_183[] = {208,146,223,0,10,130,154,248,2,157,61,204,147,5,204,21,114,250,40,205,43,8,80,214,5,101,127,169,30,178,53,137};
static const unsigned char precomputed_nP_montgomery25519_p_183[] = {96,42,30,228,229,15,43,141,229,125,150,149,63,62,255,69,132,153,11,122,8,147,80,31,71,0,114,172,6,236,188,169};
static const unsigned char precomputed_nP_montgomery25519_q_184[] = {135,156,156,36,100,222,65,89,63,7,219,158,162,168,196,27,226,198,185,121,31,130,247,227,124,145,198,121,149,127,164,17};
static const unsigned char precomputed_nP_montgomery25519_n_184[] = {152,145,24,105,128,88,244,36,82,90,72,193,127,80,177,84,145,182,153,215,126,186,231,74,140,122,23,47,254,224,71,241};
static const unsigned char precomputed_nP_montgomery25519_p_184[] = {94,247,178,221,6,102,158,19,44,117,210,243,87,196,221,157,214,60,167,130,240,210,131,167,12,112,193,95,51,171,253,169};
static const unsigned char precomputed_nP_montgomery25519_q_185[] = {135,15,120,138,71,87,173,231,237,56,243,27,120,254,187,195,198,200,174,75,255,10,148,111,61,165,125,117,227,5,164,102};
static const unsigned char precomputed_nP_montgomery25519_n_185[] = {236,46,171,186,89,186,197,73,226,9,254,112,75,50,158,49,127,66,222,169,84,255,105,114,38,49,220,154,73,219,213,229};
static const unsigned char precomputed_nP_montgomery25519_p_185[] = {47,105,39,192,222,200,75,96,119,240,6,138,50,238,145,191,125,221,161,35,221,145,84,101,52,190,86,71,200,76,239,170};
static const unsigned char precomputed_nP_montgomery25519_q_186[] = {50,4,225,52,71,88,187,126,109,97,237,180,110,70,84,4,166,163,176,38,217,6,62,76,183,202,153,49,93,93,43,101};
static const unsigned char precomputed_nP_montgomery25519_n_186[] = {247,239,31,190,101,187,254,229,126,75,92,192,3,105,157,224,172,44,207,92,15,79,2,45,244,181,206,165,77,46,57,251};
static const unsigned char precomputed_nP_montgomery25519_p_186[] = {88,199,215,35,217,92,77,65,25,45,63,102,205,94,235,17,76,74,238,228,59,31,46,64,132,86,206,193,8,10,254,170};
static const unsigned char precomputed_nP_montgomery25519_q_187[] = {90,21,239,238,78,202,71,98,221,74,25,14,52,104,86,203,129,112,143,228,68,7,250,19,186,252,225,53,99,87,39,95};
static const unsigned char precomputed_nP_montgomery25519_n_187[] = {90,45,40,212,48,116,157,8,31,149,17,162,168,8,80,160,222,248,234,103,130,82,113,71,231,32,77,51,157,127,251,13};
static const unsigned char precomputed_nP_montgomery25519_p_187[] = {236,221,110,85,119,102,142,32,139,41,201,114,77,187,166,133,54,229,25,180,236,76,218,201,124,44,182,42,4,183,49,172};
static const unsigned char precomputed_nP_montgomery25519_q_188[] = {189,43,15,184,94,255,242,174,153,145,193,220,227,67,4,174,147,174,152,18,101,159,166,139,63,163,243,59,213,161,253,1};
static const unsigned char precomputed_nP_montgomery25519_n_188[] = {130,87,3,11,229,236,213,51,129,246,89,146,134,202,228,170,229,222,134,180,251,27,102,183,8,20,163,90,167,120,229,170};
static const unsigned char precomputed_nP_montgomery25519_p_188[] = {255,194,56,232,174,245,62,71,26,68,191,128,100,50,10,237,213,105,100,167,68,21,27,124,129,62,45,161,97,228,235,172};
static const unsigned char precomputed_nP_montgomery25519_q_189[] = {43,41,186,92,20,48,245,52,112,164,231,7,30,244,98,207,255,80,92,47,122,161,158,99,4,86,10,246,88,141,211,64};
static const unsigned char precomputed_nP_montgomery25519_n_189[] = {166,19,206,199,245,88,224,186,251,104,76,239,137,187,207,75,4,51,252,191,42,203,27,202,90,39,104,174,176,53,155,147};
static const unsigned char precomputed_nP_montgomery25519_p_189[] = {24,248,205,13,251,68,160,65,173,109,89,254,224,107,51,244,92,207,167,180,90,30,242,9,86,56,9,82,78,63,98,173};
static const unsigned char precomputed_nP_montgomery25519_q_190[] = {164,18,181,163,154,223,13,222,144,40,229,62,74,82,118,81,14,32,25,1,113,163,252,237,51,70,56,223,247,160,78,82};
static const unsigned char precomputed_nP_montgomery25519_n_190[] = {70,98,133,45,92,153,42,114,193,1,169,74,85,162,189,47,40,192,195,195,190,167,17,8,124,248,198,91,77,77,76,187};
static const unsigned char precomputed_nP_montgomery25519_p_190[] = {5,148,50,200,225,154,104,2,186,157,64,251,100,43,110,250,60,12,112,60,188,21,135,97,51,100,226,99,38,208,159,176};
static const unsigned char precomputed_nP_montgomery25519_q_191[] = {102,229,61,162,248,69,239,179,58,60,8,152,113,12,218,168,141,35,147,32,194,194,98,22,156,1,83,20,8,13,65,122};
static const unsigned char precomputed_nP_montgomery25519_n_191[] = {53,132,199,81,11,201,113,109,199,84,160,219,185,187,62,46,149,38,234,25,16,44,80,51,20,218,85,206,242,143,193,229};
static const unsigned char precomputed_nP_montgomery25519_p_191[] = {58,124,149,244,219,245,28,139,123,7,200,215,136,196,159,79,45,230,10,167,187,124,197,72,22,196,111,77,4,44,35,178};
static const unsigned char precomputed_nP_montgomery25519_q_192[] = {129,123,252,32,79,232,223,63,208,174,46,91,43,179,128,194,105,151,157,192,205,242,81,44,200,18,14,15,210,144,109,87};
static const unsigned char precomputed_nP_montgomery25519_n_192[] = {105,95,221,186,249,163,76,30,159,173,15,12,47,116,53,165,247,77,250,228,41,122,20,199,135,56,204,8,32,185,110,204};
static const unsigned char precomputed_nP_montgomery25519_p_192[] = {206,106,196,63,222,184,149,49,241,126,132,63,200,64,98,76,47,56,113,193,227,167,145,250,109,15,29,169,198,4,252,178};
static const unsigned char precomputed_nP_montgomery25519_q_193[] = {159,55,188,83,179,251,171,231,152,89,242,9,193,181,236,12,223,112,236,40,247,85,159,25,85,107,225,18,155,177,61,7};
static const unsigned char precomputed_nP_montgomery25519_n_193[] = {185,65,102,155,86,42,66,137,198,133,133,100,74,67,77,176,139,40,147,143,72,105,62,87,7,119,145,45,181,120,204,120};
static const unsigned char precomputed_nP_montgomery25519_p_193[] = {202,89,131,157,3,118,249,46,74,101,132,152,106,47,243,202,220,92,140,62,172,55,113,156,173,4,96,104,141,80,79,180};
static const unsigned char precomputed_nP_montgomery25519_q_194[] = {190,145,102,90,116,173,9,96,1,136,94,70,240,65,189,201,171,145,254,247,129,62,21,105,243,190,11,68,201,228,8,12};
static const unsigned char precomputed_nP_montgomery25519_n_194[] = {225,250,207,49,79,0,242,177,148,78,153,60,96,143,63,27,126,123,35,67,94,64,246,82,4,143,123,46,214,217,4,203};
static const unsigned char precomputed_nP_montgomery25519_p_194[] = {23,11,234,10,227,139,156,80,199,166,30,156,2,164,43,61,58,71,110,74,197,50,42,192,114,28,144,175,233,77,233,181};
static const unsigned char precomputed_nP_montgomery25519_q_195[] = {231,135,174,215,156,67,163,120,76,181,241,178,10,247,172,245,31,239,228,196,174,195,118,22,142,51,13,168,31,199,62,43};
static const unsigned char precomputed_nP_montgomery25519_n_195[] = {205,134,235,203,124,126,159,19,10,114,85,61,128,28,54,139,148,212,84,221,41,170,135,244,16,248,51,220,233,21,148,142};
static const unsigned char precomputed_nP_montgomery25519_p_195[] = {4,185,44,222,234,105,45,228,84,211,77,226,210,230,92,138,18,64,100,12,109,20,161,29,169,107,73,50,2,113,32,184};
static const unsigned char precomputed_nP_montgomery25519_q_196[] = {73,146,214,103,234,183,216,144,200,165,221,87,194,213,49,122,62,65,255,204,72,182,131,146,75,41,207,45,248,160,66,90};
static const unsigned char precomputed_nP_montgomery25519_n_196[] = {226,246,94,150,74,153,137,249,205,77,50,216,122,57,174,15,56,200,114,149,108,39,37,64,119,244,18,45,180,144,81,110};
static const unsigned char precomputed_nP_montgomery25519_p_196[] = {167,149,123,83,102,56,8,128,52,35,252,196,135,30,152,179,223,240,232,71,44,238,176,128,107,94,97,60,121,129,219,184};
static const unsigned char precomputed_nP_montgomery25519_q_197[] = {218,151,19,123,28,234,235,200,163,179,10,170,252,43,86,73,85,71,114,100,167,146,135,33,146,246,108,40,7,137,39,115};
static const unsigned char precomputed_nP_montgomery25519_n_197[] = {7,253,193,58,175,41,205,115,33,166,243,153,184,10,43,46,177,68,128,214,230,75,53,63,110,205,14,138,28,4,170,122};
static const unsigned char precomputed_nP_montgomery25519_p_197[] = {92,16,248,176,17,243,88,13,137,6,58,182,139,221,105,188,108,139,108,94,186,224,118,160,35,97,77,197,56,233,17,190};
static const unsigned char precomputed_nP_montgomery25519_q_198[] = {239,148,237,0,202,18,221,76,204,192,173,223,64,192,155,240,126,69,40,188,148,63,98,179,153,171,127,132,205,146,38,118};
static const unsigned char precomputed_nP_montgomery25519_n_198[] = {252,94,239,81,117,164,15,227,11,136,47,221,160,0,112,48,75,245,169,49,28,66,103,200,31,165,123,91,102,225,49,181};
static const unsigned char precomputed_nP_montgomery25519_p_198[] = {90,240,227,251,144,184,238,241,55,58,14,223,188,73,5,141,231,144,206,200,253,27,157,213,251,175,49,90,4,21,43,193};
static const unsigned char precomputed_nP_montgomery25519_q_199[] = {114,178,3,172,20,190,19,181,77,121,28,50,216,32,39,195,172,140,113,226,234,6,168,216,230,208,249,107,66,64,233,60};
static const unsigned char precomputed_nP_montgomery25519_n_199[] = {253,137,9,247,203,124,24,46,218,175,229,53,181,209,246,137,119,4,163,65,141,102,147,90,89,107,249,125,59,39,181,176};
static const unsigned char precomputed_nP_montgomery25519_p_199[] = {70,56,241,199,2,77,116,39,168,14,15,19,243,81,48,228,66,197,86,102,62,178,178,118,177,163,197,69,113,99,107,196};
static const unsigned char precomputed_nP_montgomery25519_q_200[] = {14,53,226,212,72,54,37,122,49,73,1,118,243,185,162,74,34,107,209,235,157,118,141,39,113,86,137,20,138,74,1,98};
static const unsigned char precomputed_nP_montgomery25519_n_200[] = {26,73,199,77,137,156,65,62,242,248,157,124,0,233,203,85,118,6,69,150,81,226,45,216,106,201,6,12,234,114,1,55};
static const unsigned char precomputed_nP_montgomery25519_p_200[] = {179,13,226,14,207,73,38,8,115,109,3,46,235,11,118,202,164,47,136,100,117,120,90,6,44,242,147,142,67,58,34,197};
static const unsigned char precomputed_nP_montgomery25519_q_201[] = {11,170,79,238,36,206,68,38,246,56,104,176,194,101,73,154,107,241,159,210,25,51,189,254,44,37,137,100,143,9,146,80};
static const unsigned char precomputed_nP_montgomery25519_n_201[] = {245,75,186,86,169,16,76,178,243,176,11,204,175,254,84,179,94,169,63,28,176,221,142,93,220,117,199,161,227,2,11,151};
static const unsigned char precomputed_nP_montgomery25519_p_201[] = {110,16,92,235,125,30,216,86,90,26,103,163,229,193,149,39,17,86,214,36,50,108,148,100,208,16,40,12,194,4,159,198};
static const unsigned char precomputed_nP_montgomery25519_q_202[] = {178,130,114,238,38,16,52,113,3,101,188,106,231,131,176,203,199,120,61,248,168,88,88,57,200,132,94,21,26,110,252,103};
static const unsigned char precomputed_nP_montgomery25519_n_202[] = {15,182,29,11,249,249,210,54,202,63,102,206,22,139,241,14,240,225,101,98,97,88,120,55,200,151,109,26,119,136,34,156};
static const unsigned char precomputed_nP_montgomery25519_p_202[] = {95,204,232,169,227,16,187,78,103,76,46,253,39,219,178,130,101,27,212,225,115,213,227,31,126,186,195,148,169,85,245,199};
static const unsigned char precomputed_nP_montgomery25519_q_203[] = {215,155,105,172,214,147,237,205,119,60,252,47,67,96,235,114,110,201,226,162,219,48,127,194,252,165,209,248,235,150,64,23};
static const unsigned char precomputed_nP_montgomery25519_n_203[] = {24,113,214,137,60,212,159,0,197,103,163,201,179,148,131,59,203,28,179,9,203,249,187,135,0,163,200,149,208,20,23,253};
static const unsigned char precomputed_nP_montgomery25519_p_203[] = {174,0,5,175,234,211,162,13,126,160,91,211,165,51,116,163,210,242,48,25,249,254,242,78,240,81,44,86,166,90,115,206};
static const unsigned char precomputed_nP_montgomery25519_q_204[] = {166,231,42,36,82,248,104,43,82,112,6,217,2,173,23,178,47,58,82,139,81,21,252,83,220,4,25,236,19,233,29,40};
static const unsigned char precomputed_nP_montgomery25519_n_204[] = {231,182,113,252,88,106,180,122,247,46,118,29,64,46,11,183,82,110,78,0,249,244,125,26,167,156,41,250,113,111,87,27};
static const unsigned char precomputed_nP_montgomery25519_p_204[] = {223,152,153,220,140,131,68,151,208,123,2,153,171,70,47,103,111,91,11,234,230,63,51,223,200,244,236,171,145,50,249,207};
static const unsigned char precomputed_nP_montgomery25519_q_205[] = {0,180,224,147,32,164,89,230,151,104,186,154,99,51,136,73,196,133,201,147,116,52,167,136,145,196,105,175,165,34,28,108};
static const unsigned char precomputed_nP_montgomery25519_n_205[] = {21,73,182,113,25,32,183,230,191,199,180,51,101,33,170,156,139,80,203,154,58,155,82,74,52,96,158,247,238,207,150,235};
static const unsigned char precomputed_nP_montgomery25519_p_205[] = {155,109,9,21,56,25,184,169,128,198,2,189,9,126,77,58,227,73,99,0,182,182,150,89,26,73,98,86,218,251,57,209};
static const unsigned char precomputed_nP_montgomery25519_q_206[] = {242,84,128,149,205,214,49,57,162,189,47,96,211,217,144,69,45,198,30,208,20,93,90,160,20,186,93,252,217,14,232,42};
static const unsigned char precomputed_nP_montgomery25519_n_206[] = {143,37,213,51,161,231,224,75,16,56,35,130,76,12,253,214,79,34,55,212,159,106,240,121,43,193,22,182,251,220,206,220};
static const unsigned char precomputed_nP_montgomery25519_p_206[] = {250,180,62,72,167,188,211,161,75,8,67,186,254,249,239,196,135,111,170,129,173,38,239,174,51,106,216,119,163,96,80,209};
static const unsigned char precomputed_nP_montgomery25519_q_207[] = {110,203,38,47,155,200,34,223,176,221,103,84,230,144,95,250,34,28,202,120,170,176,202,218,74,129,95,249,77,229,72,123};
static const unsigned char precomputed_nP_montgomery25519_n_207[] = {1,212,157,103,232,159,234,223,107,249,58,63,187,122,154,71,215,115,105,125,123,13,216,158,238,87,62,1,147,150,74,91};
static const unsigned char precomputed_nP_montgomery25519_p_207[] = {125,242,29,114,232,48,27,244,31,171,46,41,1,218,112,38,126,119,17,27,127,158,41,97,36,105,51,103,198,133,79,214};
static const unsigned char precomputed_nP_montgomery25519_q_208[] = {236,248,147,230,0,12,122,127,81,208,149,0,97,187,213,177,109,216,52,215,168,107,82,70,144,31,173,149,212,176,141,121};
static const unsigned char precomputed_nP_montgomery25519_n_208[] = {4,125,207,3,202,0,18,17,153,119,245,2,150,30,216,90,168,14,225,105,57,217,74,74,170,97,59,191,217,207,41,50};
static const unsigned char precomputed_nP_montgomery25519_p_208[] = {76,156,149,188,163,80,140,36,177,208,177,85,156,131,239,91,4,68,92,196,88,28,142,134,216,34,78,221,208,159,17,215};
static const unsigned char precomputed_nP_montgomery25519_q_209[] = {129,54,127,113,23,213,170,23,125,175,158,90,213,181,240,71,94,221,10,124,254,181,32,136,220,100,246,33,142,108,253,122};
static const unsigned char precomputed_nP_montgomery25519_n_209[] = {217,196,76,61,125,89,107,15,75,92,77,43,108,217,85,154,247,0,143,2,74,98,132,4,233,82,51,186,107,119,248,217};
static const unsigned char precomputed_nP_montgomery25519_p_209[] = {3,30,161,46,86,232,112,81,22,22,166,87,64,190,106,88,166,32,34,174,203,96,240,21,231,168,202,224,136,252,95,216};
static const unsigned char precomputed_nP_montgomery25519_q_210[] = {207,99,98,54,244,37,197,214,156,117,144,114,91,66,109,51,150,66,7,58,125,133,76,166,247,62,34,75,174,82,117,119};
static const unsigned char precomputed_nP_montgomery25519_n_210[] = {202,5,147,74,179,48,169,40,156,198,55,4,197,182,10,91,43,62,80,143,47,103,78,121,37,164,50,113,36,101,11,118};
static const unsigned char precomputed_nP_montgomery25519_p_210[] = {58,50,13,118,120,27,56,5,140,124,44,234,250,149,21,57,233,36,207,197,165,234,195,118,154,167,56,193,69,102,30,217};
static const unsigned char precomputed_nP_montgomery25519_q_211[] = {121,50,129,4,175,130,113,47,11,231,181,146,108,87,42,154,202,225,14,245,94,177,3,144,235,171,44,206,253,188,50,63};
static const unsigned char precomputed_nP_montgomery25519_n_211[] = {48,54,85,129,231,252,147,229,224,143,247,165,134,246,63,179,227,248,71,165,201,19,59,229,18,76,197,48,38,161,152,200};
static const unsigned char precomputed_nP_montgomery25519_p_211[] = {33,166,110,206,84,190,224,115,16,16,158,248,30,0,233,114,28,202,152,41,116,80,233,121,144,82,116,76,168,173,30,218};
static const unsigned char precomputed_nP_montgomery25519_q_212[] = {176,182,52,252,134,77,176,235,75,203,19,14,204,192,20,85,158,135,211,17,217,16,231,54,41,73,208,31,27,201,231,67};
static const unsigned char precomputed_nP_montgomery25519_n_212[] = {15,178,181,41,106,62,93,252,17,170,218,222,225,22,147,136,1,241,195,59,36,141,156,234,43,72,126,126,41,17,193,34};
static const unsigned char precomputed_nP_montgomery25519_p_212[] = {56,0,37,25,36,249,203,33,105,221,23,56,110,251,249,180,154,183,67,64,123,150,36,125,50,218,191,132,212,126,128,222};
static const unsigned char precomputed_nP_montgomery25519_q_213[] = {43,186,50,61,113,54,20,246,129,62,252,230,142,137,188,131,52,135,179,98,232,100,109,104,47,120,116,195,104,53,219,76};
static const unsigned char precomputed_nP_montgomery25519_n_213[] = {140,20,116,65,40,144,224,107,218,207,103,120,233,230,200,36,235,153,213,2,165,191,132,50,23,197,154,210,54,80,227,225};
static const unsigned char precomputed_nP_montgomery25519_p_213[] = {142,22,38,205,200,222,195,37,214,165,19,37,81,22,87,95,227,152,243,211,179,168,34,169,78,193,55,91,16,56,230,222};
static const unsigned char precomputed_nP_montgomery25519_q_214[] = {42,70,245,57,92,204,31,170,214,134,23,18,203,54,54,166,42,86,52,54,83,242,185,188,38,39,121,150,204,77,186,9};
static const unsigned char precomputed_nP_montgomery25519_n_214[] = {16,186,3,79,167,172,35,23,153,145,76,173,252,89,100,128,157,108,140,3,111,159,86,179,182,166,18,0,144,105,90,60};
static const unsigned char precomputed_nP_montgomery25519_p_214[] = {250,186,28,252,147,237,14,97,25,165,61,72,56,205,33,143,0,159,175,39,99,66,31,226,24,190,5,150,240,223,238,222};
static const unsigned char precomputed_nP_montgomery25519_q_215[] = {252,153,120,176,103,212,75,243,94,253,126,19,145,198,184,151,142,97,5,167,143,143,166,67,50,196,36,175,109,172,119,2};
static const unsigned char precomputed_nP_montgomery25519_n_215[] = {138,115,96,4,71,205,43,171,21,152,153,99,190,18,34,162,183,121,231,19,180,164,138,104,80,104,207,183,2,217,179,210};
static const unsigned char precomputed_nP_montgomery25519_p_215[] = {141,193,75,162,4,203,133,174,153,196,55,67,223,46,171,9,180,112,112,89,191,187,159,93,201,66,140,226,7,118,67,226};
static const unsigned char precomputed_nP_montgomery25519_q_216[] = {161,11,162,100,6,245,172,159,215,191,146,107,32,227,42,247,252,245,246,10,78,80,109,130,135,23,147,91,19,93,171,113};
static const unsigned char precomputed_nP_montgomery25519_n_216[] = {128,83,222,94,225,133,130,100,117,220,66,98,26,70,116,10,171,17,177,191,249,73,198,53,147,139,0,141,89,108,21,132};
static const unsigned char precomputed_nP_montgomery25519_p_216[] = {236,16,165,65,1,173,130,47,201,213,171,154,185,172,79,19,203,117,86,19,191,75,213,174,85,205,184,195,105,19,136,228};
static const unsigned char precomputed_nP_montgomery25519_q_217[] = {85,22,94,43,250,25,107,211,127,176,94,120,179,15,69,112,208,255,149,239,112,175,29,76,194,87,205,12,119,143,224,112};
static const unsigned char precomputed_nP_montgomery25519_n_217[] = {86,250,18,0,104,153,243,165,197,139,139,226,90,121,113,11,56,40,253,53,174,168,237,82,165,31,245,32,206,93,96,189};
static const unsigned char precomputed_nP_montgomery25519_p_217[] = {87,6,127,250,161,21,246,107,3,203,72,146,112,227,19,204,92,125,202,100,252,110,139,19,133,193,218,63,15,199,167,228};
static const unsigned char precomputed_nP_montgomery25519_q_218[] = {176,88,213,41,206,76,234,184,116,73,157,208,92,216,24,119,57,36,66,147,8,160,21,98,210,253,8,43,48,167,53,48};
static const unsigned char precomputed_nP_montgomery25519_n_218[] = {1,129,111,159,224,98,133,48,105,2,130,113,58,161,223,238,13,149,116,37,158,4,80,158,137,172,82,159,76,30,90,198};
static const unsigned char precomputed_nP_montgomery25519_p_218[] = {112,52,5,29,28,239,246,218,83,106,50,236,83,212,229,146,245,69,47,61,220,72,230,59,243,251,128,98,206,213,120,229};
static const unsigned char precomputed_nP_montgomery25519_q_219[] = {62,0,123,251,99,62,66,71,243,231,164,120,115,181,126,254,237,36,36,32,140,194,68,35,73,35,222,199,199,107,28,117};
static const unsigned char precomputed_nP_montgomery25519_n_219[] = {22,25,157,191,182,145,141,114,11,227,34,104,72,192,36,19,221,45,137,85,89,83,163,40,16,141,176,151,27,155,53,98};
static const unsigned char precomputed_nP_montgomery25519_p_219[] = {84,33,33,195,205,95,87,46,215,226,73,47,6,206,1,220,87,223,209,122,91,233,94,210,113,168,229,78,121,87,53,230};
static const unsigned char precomputed_nP_montgomery25519_q_220[] = {70,120,164,208,137,21,121,162,170,232,226,147,29,219,46,113,250,108,94,182,81,170,242,154,139,170,231,136,62,149,152,109};
static const unsigned char precomputed_nP_montgomery25519_n_220[] = {235,205,101,195,113,156,65,13,74,68,207,37,52,0,64,243,229,176,52,109,93,181,253,95,202,37,46,81,102,160,111,253};
static const unsigned char precomputed_nP_montgomery25519_p_220[] = {38,57,245,107,31,171,57,222,37,89,242,246,200,69,132,204,142,29,85,51,40,241,114,164,100,92,53,88,211,92,202,230};
static const unsigned char precomputed_nP_montgomery25519_q_221[] = {14,237,34,146,132,166,157,178,67,25,254,152,153,185,63,240,88,85,182,87,39,199,1,173,180,1,24,254,13,167,52,122};
static const unsigned char precomputed_nP_montgomery25519_n_221[] = {30,172,238,224,197,130,196,220,34,173,118,170,81,36,14,91,149,82,226,167,147,33,88,60,66,39,33,177,134,78,205,127};
static const unsigned char precomputed_nP_montgomery25519_p_221[] = {41,26,248,132,62,248,195,130,95,125,203,188,212,31,51,250,131,201,151,226,53,4,200,159,144,59,61,181,50,96,124,232};
static const unsigned char precomputed_nP_montgomery25519_q_222[] = {242,199,150,29,101,160,96,249,71,189,152,244,2,107,249,84,53,111,96,147,59,52,94,253,64,24,115,111,7,201,175,122};
static const unsigned char precomputed_nP_montgomery25519_n_222[] = {29,4,43,97,249,178,206,176,24,181,101,239,229,11,192,189,75,210,11,146,108,200,142,33,195,168,88,98,47,178,42,86};
static const unsigned char precomputed_nP_montgomery25519_p_222[] = {237,131,60,71,84,163,46,254,98,12,230,87,251,116,196,185,116,253,229,243,247,223,86,243,70,181,200,64,6,180,114,234};
static const unsigned char precomputed_nP_montgomery25519_q_223[] = {1,178,251,232,38,255,44,82,173,188,52,91,62,83,168,38,95,75,72,128,133,212,62,143,110,112,121,149,220,105,4,85};
static const unsigned char precomputed_nP_montgomery25519_n_223[] = {187,188,55,105,117,127,48,88,219,168,140,162,236,164,142,130,39,125,143,134,233,2,241,216,207,11,210,25,49,121,237,100};
static const unsigned char precomputed_nP_montgomery25519_p_223[] = {159,109,38,90,9,148,16,166,4,12,203,81,214,74,15,69,187,18,59,178,98,237,243,35,8,205,27,12,125,168,206,236};
static const unsigned char precomputed_nP_montgomery25519_q_224[] = {175,8,94,200,26,183,77,83,31,204,57,39,124,104,223,137,28,239,203,131,34,179,127,231,231,26,223,14,36,198,12,102};
static const unsigned char precomputed_nP_montgomery25519_n_224[] = {91,236,197,142,183,255,180,242,223,169,55,214,19,251,194,108,83,232,55,186,94,32,121,252,117,219,77,53,28,82,178,197};
static const unsigned char precomputed_nP_montgomery25519_p_224[] = {77,177,87,210,156,163,175,191,211,150,62,37,21,150,200,44,125,200,224,117,67,164,169,113,221,215,61,61,88,133,65,237};
static const unsigned char precomputed_nP_montgomery25519_q_225[] = {79,239,164,209,27,133,140,233,228,18,135,107,160,242,47,192,248,192,216,54,217,167,41,134,14,151,241,20,44,45,65,112};
static const unsigned char precomputed_nP_montgomery25519_n_225[] = {249,121,227,0,220,61,220,130,163,234,166,135,156,84,185,240,222,192,240,251,42,89,37,174,250,67,204,200,124,5,208,74};
static const unsigned char precomputed_nP_montgomery25519_p_225[] = {51,146,91,49,186,142,83,19,20,166,202,118,177,2,123,32,74,77,241,206,200,63,243,219,5,255,246,165,176,60,121,242};
static const unsigned char precomputed_nP_montgomery25519_q_226[] = {46,130,121,139,15,200,12,86,200,15,247,172,80,99,45,114,180,28,227,23,203,233,211,8,246,205,217,147,171,99,219,57};
static const unsigned char precomputed_nP_montgomery25519_n_226[] = {199,49,248,141,255,31,48,127,152,79,223,151,117,207,201,52,60,57,104,59,61,108,162,64,156,190,128,175,242,55,94,48};
static const unsigned char precomputed_nP_montgomery25519_p_226[] = {37,23,19,91,121,184,178,247,132,107,151,13,254,239,14,213,228,79,139,141,234,186,35,114,206,67,48,145,227,157,176,245};
static const unsigned char precomputed_nP_montgomery25519_q_227[] = {92,164,40,99,40,192,66,62,77,160,155,220,53,40,184,13,30,33,3,251,48,94,67,38,33,104,167,232,228,171,151,84};
static const unsigned char precomputed_nP_montgomery25519_n_227[] = {93,221,22,55,195,227,161,174,147,211,145,19,79,172,208,253,119,134,208,36,107,5,8,20,150,167,236,214,248,239,5,159};
static const unsigned char precomputed_nP_montgomery25519_p_227[] = {180,23,106,112,61,77,216,79,186,60,11,118,13,16,103,15,42,32,83,250,44,57,204,198,78,199,253,119,146,172,3,250};
static const unsigned char precomputed_nP_montgomery25519_q_228[] = {154,94,142,191,27,252,192,84,123,41,33,19,218,35,128,221,242,122,223,205,179,50,60,118,31,32,16,164,45,185,232,80};
static const unsigned char precomputed_nP_montgomery25519_n_228[] = {5,156,184,178,39,194,31,255,117,92,162,195,37,165,244,163,1,95,247,189,238,81,110,7,131,121,120,104,241,60,93,66};
static const unsigned char precomputed_nP_montgomery25519_p_228[] = {128,48,20,114,22,220,220,209,152,138,21,42,4,56,162,215,127,41,23,102,98,16,235,175,36,137,194,230,234,79,79,251};
static const unsigned char precomputed_nP_montgomery25519_q_229[] = {162,200,159,138,45,13,115,138,144,161,63,6,91,72,118,169,6,181,210,18,111,174,62,33,31,232,84,171,40,69,200,85};
static const unsigned char precomputed_nP_montgomery25519_n_229[] = {242,199,99,179,152,3,130,123,89,46,201,162,154,42,255,238,249,39,148,248,119,195,64,7,88,245,92,103,176,127,246,246};
static const unsigned char precomputed_nP_montgomery25519_p_229[] = {235,162,54,148,157,227,126,179,250,16,171,200,149,22,152,172,34,91,213,50,6,121,240,134,54,215,4,38,91,154,39,252};
static const unsigned char precomputed_nP_montgomery25519_q_230[] = {134,117,13,133,76,76,11,104,240,246,53,69,95,54,199,222,80,75,6,41,61,6,42,151,152,238,83,104,84,68,82,56};
static const unsigned char precomputed_nP_montgomery25519_n_230[] = {241,148,11,238,65,111,83,221,62,163,122,3,214,81,163,124,215,161,175,59,109,179,234,146,143,101,238,191,51,189,207,19};
static const unsigned char precomputed_nP_montgomery25519_p_230[] = {14,156,212,9,229,242,211,90,86,23,60,168,108,114,41,2,84,100,202,204,244,219,54,187,48,194,31,211,37,152,156,253};
static const unsigned char precomputed_nP_montgomery25519_q_231[] = {241,134,87,215,83,178,102,73,233,53,211,88,184,115,74,195,209,8,146,155,112,251,184,47,221,243,207,27,132,10,132,103};
static const unsigned char precomputed_nP_montgomery25519_n_231[] = {252,183,195,196,181,28,177,17,120,12,14,179,208,173,153,181,207,112,70,87,86,106,193,54,242,158,69,84,146,24,2,249};
static const unsigned char precomputed_nP_montgomery25519_p_231[] = {26,210,64,74,96,212,130,61,169,249,41,43,135,136,190,112,128,56,18,47,169,218,118,240,98,194,168,50,223,178,247,254};
static const unsigned char precomputed_nP_montgomery25519_q_232[] = {226,229,86,250,226,103,61,86,101,102,170,10,63,9,246,69,117,118,210,10,220,237,241,170,242,18,116,58,91,167,107,110};
static const unsigned char precomputed_nP_montgomery25519_n_232[] = {223,165,235,66,86,199,79,249,146,49,58,149,36,142,248,189,193,104,102,128,215,30,81,109,178,82,166,213,180,252,107,6};
static const unsigned char precomputed_nP_montgomery25519_p_232[] = {192,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_233[] = {84,254,45,150,154,98,111,211,23,245,171,54,22,154,176,232,226,22,118,224,202,10,81,191,197,247,21,58,221,110,151,50};
static const unsigned char precomputed_nP_montgomery25519_n_233[] = {160,206,225,52,77,80,51,243,156,109,3,151,189,102,95,154,232,34,76,174,61,53,134,144,181,241,50,76,253,127,95,104};
static const unsigned char precomputed_nP_montgomery25519_p_233[] = {193,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_234[] = {143,113,135,245,250,124,30,154,148,22,222,2,117,102,37,93,250,232,201,25,74,171,107,245,58,131,36,66,114,107,208,2};
static const unsigned char precomputed_nP_montgomery25519_n_234[] = {182,169,173,124,154,41,121,130,249,60,17,47,224,46,34,4,109,78,19,61,55,95,38,31,3,241,167,172,114,247,68,94};
static const unsigned char precomputed_nP_montgomery25519_p_234[] = {194,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_235[] = {1,109,129,242,119,182,55,3,153,159,123,44,185,57,21,206,56,39,169,140,95,249,234,0,69,12,113,108,191,23,1,96};
static const unsigned char precomputed_nP_montgomery25519_n_235[] = {141,243,62,246,228,126,164,138,215,42,211,203,59,98,231,37,182,36,20,225,114,183,104,237,62,66,102,136,42,216,171,71};
static const unsigned char precomputed_nP_montgomery25519_p_235[] = {195,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_236[] = {192,244,164,145,98,244,9,246,197,103,1,157,51,121,12,217,237,163,46,47,31,207,34,115,161,241,242,8,216,217,12,64};
static const unsigned char precomputed_nP_montgomery25519_n_236[] = {76,5,85,225,28,105,236,171,21,214,182,252,200,65,53,141,180,203,157,174,166,136,231,81,155,199,255,157,38,182,191,34};
static const unsigned char precomputed_nP_montgomery25519_p_236[] = {196,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_237[] = {234,38,16,122,131,105,113,8,184,145,137,86,13,79,72,188,44,16,207,203,179,59,194,14,41,217,244,168,4,6,88,72};
static const unsigned char precomputed_nP_montgomery25519_n_237[] = {171,140,216,125,246,116,155,154,112,37,101,190,158,206,239,245,50,123,181,160,210,63,64,181,69,108,17,204,227,57,22,67};
static const unsigned char precomputed_nP_montgomery25519_p_237[] = {197,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_238[] = {47,115,8,251,186,185,171,39,249,40,33,1,18,101,92,219,88,129,3,177,237,246,163,93,167,149,3,184,116,88,241,25};
static const unsigned char precomputed_nP_montgomery25519_n_238[] = {16,155,44,56,94,103,146,14,89,136,151,106,208,28,115,62,147,211,236,88,68,162,46,191,252,165,129,173,162,71,195,131};
static const unsigned char precomputed_nP_montgomery25519_p_238[] = {198,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_239[] = {21,84,118,159,59,245,230,151,180,211,234,186,152,140,135,211,131,219,69,203,17,169,193,235,216,127,223,102,98,1,191,26};
static const unsigned char precomputed_nP_montgomery25519_n_239[] = {76,1,174,177,42,93,230,196,214,123,172,212,69,19,229,229,112,172,129,42,103,14,236,234,193,218,233,22,211,213,16,1};
static const unsigned char precomputed_nP_montgomery25519_p_239[] = {199,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_240[] = {19,91,35,55,26,16,58,150,14,11,211,85,201,223,90,113,107,149,54,13,225,66,8,38,250,101,202,37,218,226,152,75};
static const unsigned char precomputed_nP_montgomery25519_n_240[] = {144,32,180,164,202,131,21,99,23,54,90,43,226,186,88,251,65,173,68,225,7,246,245,25,193,0,199,155,74,232,45,118};
static const unsigned char precomputed_nP_montgomery25519_p_240[] = {200,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_241[] = {173,238,48,49,7,88,140,189,222,52,38,76,94,246,163,179,79,68,199,174,175,35,28,171,166,228,36,118,201,58,109,61};
static const unsigned char precomputed_nP_montgomery25519_n_241[] = {236,169,210,206,173,249,102,74,90,138,129,27,92,33,164,217,136,98,132,201,254,183,12,196,82,156,127,152,143,155,135,192};
static const unsigned char precomputed_nP_montgomery25519_p_241[] = {201,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_242[] = {235,14,110,53,191,65,207,130,47,77,134,173,120,240,222,139,29,180,151,72,162,218,70,217,73,77,253,120,147,236,10,61};
static const unsigned char precomputed_nP_montgomery25519_n_242[] = {242,118,199,205,119,164,108,93,255,103,82,80,71,24,76,10,37,191,147,128,26,14,16,1,201,170,187,82,112,15,231,179};
static const unsigned char precomputed_nP_montgomery25519_p_242[] = {202,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_243[] = {57,74,239,155,208,129,43,123,158,71,189,175,103,55,72,239,237,109,15,72,56,141,97,161,180,151,109,117,42,250,184,118};
static const unsigned char precomputed_nP_montgomery25519_n_243[] = {123,159,170,137,125,249,79,117,52,118,158,61,65,244,43,10,156,31,198,161,153,173,129,5,130,173,150,248,49,217,8,227};
static const unsigned char precomputed_nP_montgomery25519_p_243[] = {203,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_244[] = {52,64,63,32,59,126,186,249,244,99,54,83,22,9,37,16,48,126,99,33,177,126,99,80,233,21,61,226,163,249,55,32};
static const unsigned char precomputed_nP_montgomery25519_n_244[] = {66,244,159,19,88,253,213,23,32,209,189,251,8,249,71,51,66,19,33,88,169,184,184,83,24,137,123,237,88,112,136,100};
static const unsigned char precomputed_nP_montgomery25519_p_244[] = {204,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_245[] = {203,110,3,139,59,73,180,116,211,247,111,59,160,56,91,186,33,143,92,198,148,162,24,120,130,109,3,10,231,16,77,30};
static const unsigned char precomputed_nP_montgomery25519_n_245[] = {105,32,136,160,60,155,175,45,48,161,226,173,0,138,143,225,238,198,72,214,85,185,77,134,223,35,233,234,148,169,7,121};
static const unsigned char precomputed_nP_montgomery25519_p_245[] = {205,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_246[] = {255,82,248,88,61,49,168,220,29,130,1,110,152,243,156,136,217,219,236,92,185,217,90,81,253,170,11,27,2,238,82,54};
static const unsigned char precomputed_nP_montgomery25519_n_246[] = {114,237,141,232,195,47,33,59,235,143,14,231,243,190,94,78,53,71,137,45,84,252,75,0,62,232,175,124,142,112,220,222};
static const unsigned char precomputed_nP_montgomery25519_p_246[] = {206,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_247[] = {60,22,33,140,23,162,113,107,155,140,224,219,58,96,175,108,53,128,62,69,108,113,149,118,205,53,88,43,42,31,142,55};
static const unsigned char precomputed_nP_montgomery25519_n_247[] = {209,15,156,222,4,222,189,121,131,58,205,56,210,159,113,238,70,35,148,1,65,130,208,50,53,177,126,156,112,17,10,106};
static const unsigned char precomputed_nP_montgomery25519_p_247[] = {207,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_248[] = {204,187,162,207,214,53,94,210,29,108,25,4,213,123,82,215,173,223,116,44,147,220,85,208,25,20,241,20,100,97,223,41};
static const unsigned char precomputed_nP_montgomery25519_n_248[] = {105,85,101,187,197,3,87,214,112,224,218,200,110,84,23,24,84,51,176,82,246,133,72,56,74,110,162,183,16,65,156,9};
static const unsigned char precomputed_nP_montgomery25519_p_248[] = {208,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_249[] = {251,98,204,212,151,230,92,115,12,253,83,80,49,51,202,230,25,35,78,198,170,9,74,228,125,247,101,252,40,101,248,120};
static const unsigned char precomputed_nP_montgomery25519_n_249[] = {255,30,104,119,178,60,91,121,220,185,35,46,37,16,253,178,135,28,160,129,123,119,167,118,87,3,6,74,16,25,171,167};
static const unsigned char precomputed_nP_montgomery25519_p_249[] = {209,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_250[] = {5,168,106,188,73,12,34,187,203,246,72,18,25,207,249,218,205,93,206,60,174,15,128,30,117,208,119,125,204,0,69,104};
static const unsigned char precomputed_nP_montgomery25519_n_250[] = {116,185,13,114,141,41,129,67,255,178,218,214,149,9,141,97,144,215,186,32,22,135,194,93,20,52,11,141,223,165,75,67};
static const unsigned char precomputed_nP_montgomery25519_p_250[] = {210,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_251[] = {16,176,71,29,5,94,145,54,10,27,149,62,98,110,49,207,187,136,60,70,108,197,164,236,231,202,78,68,116,44,114,12};
static const unsigned char precomputed_nP_montgomery25519_n_251[] = {250,93,251,149,137,50,222,108,176,129,27,24,187,95,27,248,51,94,232,229,55,90,171,191,160,85,183,86,23,6,224,128};
static const unsigned char precomputed_nP_montgomery25519_p_251[] = {211,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_252[] = {118,218,149,241,214,33,125,242,130,22,147,72,83,220,163,24,130,172,18,66,72,206,244,12,146,34,20,156,123,174,125,122};
static const unsigned char precomputed_nP_montgomery25519_n_252[] = {65,99,53,92,228,166,24,237,239,207,164,149,189,109,242,0,113,5,174,121,235,137,62,7,24,44,128,29,111,223,2,8};
static const unsigned char precomputed_nP_montgomery25519_p_252[] = {212,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_253[] = {146,43,123,255,31,155,213,85,188,25,221,200,248,13,245,68,170,167,163,189,220,88,41,78,249,84,138,234,158,186,176,75};
static const unsigned char precomputed_nP_montgomery25519_n_253[] = {147,175,202,105,252,90,225,232,240,127,173,129,198,217,39,91,13,202,235,161,2,63,4,105,31,248,88,122,189,14,202,217};
static const unsigned char precomputed_nP_montgomery25519_p_253[] = {213,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_254[] = {154,252,107,191,196,167,167,136,136,98,93,165,209,41,6,157,130,51,6,68,53,89,39,163,170,39,99,132,237,74,159,57};
static const unsigned char precomputed_nP_montgomery25519_n_254[] = {130,38,64,153,50,178,132,13,249,105,90,134,211,153,139,250,179,52,6,126,172,131,79,192,196,11,75,32,14,192,52,157};
static const unsigned char precomputed_nP_montgomery25519_p_254[] = {214,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_255[] = {232,223,29,50,126,217,13,125,105,77,176,189,58,93,172,9,98,165,81,119,248,183,137,75,104,255,23,182,247,162,99,8};
static const unsigned char precomputed_nP_montgomery25519_n_255[] = {160,100,121,66,86,16,225,47,180,132,98,217,222,58,98,233,242,189,70,72,24,109,180,168,134,12,202,37,38,186,241,243};
static const unsigned char precomputed_nP_montgomery25519_p_255[] = {215,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_256[] = {116,70,20,190,1,228,58,162,97,230,38,210,46,203,75,121,38,47,150,168,111,194,217,74,139,93,163,63,251,59,118,43};
static const unsigned char precomputed_nP_montgomery25519_n_256[] = {24,143,235,33,67,131,180,27,71,202,101,41,90,157,230,92,56,143,162,41,110,98,199,236,58,206,79,101,250,17,98,84};
static const unsigned char precomputed_nP_montgomery25519_p_256[] = {216,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_257[] = {126,55,220,151,180,27,202,117,159,44,8,122,63,39,156,203,142,192,247,237,107,246,70,7,213,252,99,166,210,52,191,97};
static const unsigned char precomputed_nP_montgomery25519_n_257[] = {227,49,81,31,220,251,248,247,148,58,181,157,82,126,45,220,192,245,253,208,243,173,42,250,105,251,200,201,25,149,246,50};
static const unsigned char precomputed_nP_montgomery25519_p_257[] = {217,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_258[] = {184,122,157,192,154,231,105,41,94,69,37,230,209,206,80,42,230,92,79,235,72,0,173,193,149,93,81,159,3,222,209,67};
static const unsigned char precomputed_nP_montgomery25519_n_258[] = {193,235,196,99,199,87,172,17,95,224,191,36,128,62,51,208,76,95,133,10,13,137,195,28,125,191,249,15,61,55,2,94};
static const unsigned char precomputed_nP_montgomery25519_p_258[] = {218,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_259[] = {180,167,250,223,182,154,131,236,92,247,193,57,146,215,254,245,39,26,86,84,160,44,80,79,10,137,193,48,226,150,244,84};
static const unsigned char precomputed_nP_montgomery25519_n_259[] = {89,236,77,222,176,64,70,44,184,182,164,93,227,248,251,30,209,123,23,82,78,124,19,21,52,41,227,132,216,223,196,216};
static const unsigned char precomputed_nP_montgomery25519_p_259[] = {219,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_260[] = {60,192,58,28,87,176,201,167,97,147,222,140,8,28,23,184,137,118,108,190,240,203,59,10,188,50,7,248,244,70,246,85};
static const unsigned char precomputed_nP_montgomery25519_n_260[] = {142,181,57,7,232,193,70,222,196,113,47,171,219,255,149,10,92,22,47,155,193,100,162,214,251,60,200,133,126,165,61,164};
static const unsigned char precomputed_nP_montgomery25519_p_260[] = {220,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_261[] = {237,233,209,128,35,74,98,191,219,14,142,247,21,184,48,218,12,66,235,142,38,201,74,115,203,99,197,195,181,145,64,18};
static const unsigned char precomputed_nP_montgomery25519_n_261[] = {128,176,62,75,113,107,246,234,120,66,247,56,41,217,30,167,80,190,150,146,17,193,11,247,74,235,142,53,223,132,110,26};
static const unsigned char precomputed_nP_montgomery25519_p_261[] = {221,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_262[] = {130,188,214,217,3,161,54,133,153,23,231,239,204,250,189,175,80,94,207,73,155,208,50,219,223,133,155,189,102,74,86,113};
static const unsigned char precomputed_nP_montgomery25519_n_262[] = {36,77,85,226,56,38,117,133,11,109,233,69,172,47,97,87,165,160,3,75,141,239,61,167,109,222,27,229,7,145,39,212};
static const unsigned char precomputed_nP_montgomery25519_p_262[] = {222,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_263[] = {227,14,91,89,149,235,87,47,99,114,144,161,63,49,199,206,166,102,67,148,111,155,190,231,26,97,66,200,152,157,97,106};
static const unsigned char precomputed_nP_montgomery25519_n_263[] = {124,10,75,235,100,213,226,134,158,190,52,54,191,184,24,122,19,241,103,46,31,244,18,11,112,159,61,204,212,171,148,77};
static const unsigned char precomputed_nP_montgomery25519_p_263[] = {223,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_264[] = {242,89,152,96,42,56,87,23,28,237,153,236,48,53,216,130,41,246,187,228,42,0,105,229,19,247,196,116,110,188,161,106};
static const unsigned char precomputed_nP_montgomery25519_n_264[] = {114,77,137,119,43,99,102,76,57,148,166,12,209,145,244,18,51,32,100,72,123,209,37,111,231,73,58,102,253,18,34,162};
static const unsigned char precomputed_nP_montgomery25519_p_264[] = {224,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_265[] = {14,219,163,120,245,151,25,166,50,224,152,7,225,58,30,88,16,130,127,229,43,47,74,108,254,13,74,201,106,96,143,120};
static const unsigned char precomputed_nP_montgomery25519_n_265[] = {98,41,196,71,7,230,103,174,63,255,108,213,119,236,171,19,162,180,162,134,224,35,65,176,113,107,250,148,124,143,127,33};
static const unsigned char precomputed_nP_montgomery25519_p_265[] = {225,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_266[] = {87,236,127,198,169,148,118,83,58,50,75,21,133,21,65,45,14,189,87,81,215,96,59,78,219,142,162,18,59,85,83,99};
static const unsigned char precomputed_nP_montgomery25519_n_266[] = {42,75,239,217,24,95,98,148,232,45,231,23,58,147,211,241,137,82,226,205,0,137,96,60,250,6,17,71,225,110,153,121};
static const unsigned char precomputed_nP_montgomery25519_p_266[] = {226,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_267[] = {224,179,222,89,255,48,52,179,140,224,236,20,136,156,186,137,2,157,150,223,155,241,245,156,99,211,82,13,29,52,168,81};
static const unsigned char precomputed_nP_montgomery25519_n_267[] = {5,32,48,98,160,151,211,105,47,139,190,68,135,114,76,139,230,135,88,1,28,202,107,153,140,154,79,162,154,105,231,217};
static const unsigned char precomputed_nP_montgomery25519_p_267[] = {227,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_268[] = {64,91,102,139,101,206,222,171,228,8,235,102,170,68,4,28,147,133,171,48,83,187,216,119,107,20,43,2,254,116,218,94};
static const unsigned char precomputed_nP_montgomery25519_n_268[] = {117,246,27,36,54,185,197,126,128,70,19,206,190,244,213,241,2,214,6,42,73,184,224,42,134,19,67,210,95,131,206,65};
static const unsigned char precomputed_nP_montgomery25519_p_268[] = {228,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_269[] = {96,152,132,105,44,180,126,28,69,184,225,234,81,248,99,233,148,25,242,161,80,3,51,87,86,219,28,141,82,225,91,18};
static const unsigned char precomputed_nP_montgomery25519_n_269[] = {127,56,48,91,234,196,208,190,82,145,55,146,222,16,9,128,161,66,197,177,237,132,255,64,248,2,201,114,190,1,253,140};
static const unsigned char precomputed_nP_montgomery25519_p_269[] = {229,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_270[] = {245,147,197,14,116,81,238,160,86,55,195,142,129,205,120,245,176,155,135,184,139,85,206,241,38,229,120,82,130,101,111,12};
static const unsigned char precomputed_nP_montgomery25519_n_270[] = {132,172,226,25,189,173,154,215,196,207,251,66,181,178,144,119,92,47,169,146,3,24,13,155,176,60,167,107,65,196,145,120};
static const unsigned char precomputed_nP_montgomery25519_p_270[] = {230,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_271[] = {9,178,206,181,142,48,124,46,179,156,48,251,55,239,115,5,121,70,93,197,129,97,161,207,155,176,26,201,43,111,39,99};
static const unsigned char precomputed_nP_montgomery25519_n_271[] = {103,96,224,34,32,32,4,192,29,59,69,42,12,161,242,208,65,31,166,128,221,191,253,253,209,190,200,141,126,51,100,190};
static const unsigned char precomputed_nP_montgomery25519_p_271[] = {231,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_272[] = {147,241,120,113,224,227,19,27,252,128,102,181,229,207,33,112,228,183,166,22,96,243,43,175,115,109,22,76,240,144,232,7};
static const unsigned char precomputed_nP_montgomery25519_n_272[] = {58,127,250,228,154,38,80,111,154,118,109,43,124,162,201,216,109,113,253,122,247,187,181,147,40,167,0,129,243,224,127,55};
static const unsigned char precomputed_nP_montgomery25519_p_272[] = {232,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_273[] = {115,133,173,27,62,250,88,134,96,111,195,204,235,48,166,87,167,250,168,137,187,92,210,236,239,190,20,127,191,201,204,91};
static const unsigned char precomputed_nP_montgomery25519_n_273[] = {222,142,62,16,49,39,57,171,168,42,148,96,163,45,1,9,98,82,32,250,131,253,106,61,28,238,182,254,185,100,104,183};
static const unsigned char precomputed_nP_montgomery25519_p_273[] = {233,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_274[] = {26,72,40,11,41,19,139,5,91,221,38,250,195,246,25,132,206,72,32,94,158,183,73,185,132,155,47,231,237,107,22,113};
static const unsigned char precomputed_nP_montgomery25519_n_274[] = {221,15,180,234,241,143,88,255,62,22,37,253,96,95,93,214,130,78,236,187,114,98,25,123,184,13,24,116,241,244,9,3};
static const unsigned char precomputed_nP_montgomery25519_p_274[] = {234,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_275[] = {119,243,169,67,101,142,55,101,19,229,2,251,162,150,18,160,112,134,178,193,7,225,98,208,156,230,253,183,65,134,234,30};
static const unsigned char precomputed_nP_montgomery25519_n_275[] = {139,232,90,130,109,54,160,143,19,93,33,62,239,86,106,141,212,170,67,203,91,227,33,162,207,68,209,31,55,222,213,61};
static const unsigned char precomputed_nP_montgomery25519_p_275[] = {235,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_276[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_276[] = {128,219,230,29,173,177,141,63,189,111,11,56,254,236,235,103,133,18,242,200,176,98,251,230,170,142,80,174,220,115,74,136};
static const unsigned char precomputed_nP_montgomery25519_p_276[] = {236,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_277[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_277[] = {205,52,231,62,162,59,157,180,143,65,237,10,155,182,225,131,84,77,97,169,54,21,134,141,114,74,99,57,55,14,160,150};
static const unsigned char precomputed_nP_montgomery25519_p_277[] = {237,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_278[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_n_278[] = {120,117,181,0,114,107,75,63,81,45,26,100,177,189,190,75,76,155,79,108,26,93,46,211,26,166,229,184,32,217,220,117};
static const unsigned char precomputed_nP_montgomery25519_p_278[] = {238,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_279[] = {139,147,141,94,93,143,239,121,211,81,7,154,161,209,7,107,178,61,20,223,137,117,220,32,14,123,164,122,20,46,70,31};
static const unsigned char precomputed_nP_montgomery25519_n_279[] = {217,184,164,88,62,54,210,17,153,249,234,177,206,234,187,1,173,27,4,169,47,206,63,97,199,12,146,88,111,217,78,65};
static const unsigned char precomputed_nP_montgomery25519_p_279[] = {239,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_280[] = {0,8,245,27,88,69,231,240,113,253,194,181,87,25,252,185,40,105,46,159,147,94,139,142,131,39,53,75,16,206,222,113};
static const unsigned char precomputed_nP_montgomery25519_n_280[] = {129,242,248,169,53,254,41,115,23,99,37,158,165,8,170,24,63,109,136,182,235,12,252,1,226,141,235,45,76,29,144,179};
static const unsigned char precomputed_nP_montgomery25519_p_280[] = {240,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_281[] = {4,243,251,109,137,210,96,75,126,55,164,203,108,60,142,184,22,115,198,64,107,67,90,220,241,226,200,57,51,125,193,103};
static const unsigned char precomputed_nP_montgomery25519_n_281[] = {204,176,178,17,32,215,206,10,207,12,78,92,119,191,189,237,111,57,21,219,243,225,101,99,132,103,153,131,44,57,99,194};
static const unsigned char precomputed_nP_montgomery25519_p_281[] = {241,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_282[] = {8,178,89,230,199,191,250,150,143,137,166,130,170,245,171,169,133,222,28,78,230,198,190,1,49,175,201,250,128,82,252,47};
static const unsigned char precomputed_nP_montgomery25519_n_282[] = {103,125,120,219,142,193,63,99,95,94,120,255,195,163,244,192,141,144,144,242,54,7,248,237,124,71,23,57,198,209,115,177};
static const unsigned char precomputed_nP_montgomery25519_p_282[] = {242,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_283[] = {246,114,119,143,155,39,157,246,34,55,191,127,26,58,19,46,165,222,14,207,65,129,225,39,13,216,33,128,100,154,200,93};
static const unsigned char precomputed_nP_montgomery25519_n_283[] = {6,229,131,13,74,195,162,9,2,228,150,154,123,93,113,203,82,225,206,134,33,190,195,16,138,7,140,6,165,142,200,248};
static const unsigned char precomputed_nP_montgomery25519_p_283[] = {243,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_284[] = {204,122,49,114,58,61,115,158,17,228,115,102,218,190,240,197,111,177,250,75,24,247,17,176,143,83,147,166,57,45,102,23};
static const unsigned char precomputed_nP_montgomery25519_n_284[] = {69,29,123,95,20,77,200,220,161,127,205,110,115,242,135,240,13,237,24,47,141,27,141,147,168,195,78,250,57,75,33,193};
static const unsigned char precomputed_nP_montgomery25519_p_284[] = {244,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_285[] = {244,146,37,213,178,53,228,12,102,15,156,100,18,101,235,155,107,127,117,214,75,172,94,175,202,9,102,73,140,176,124,5};
static const unsigned char precomputed_nP_montgomery25519_n_285[] = {56,76,151,133,96,85,108,66,115,196,191,219,109,219,122,25,202,81,94,248,63,77,42,51,36,139,236,237,20,60,17,48};
static const unsigned char precomputed_nP_montgomery25519_p_285[] = {245,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_286[] = {148,188,32,138,35,155,131,145,247,84,194,147,26,230,196,137,182,79,238,150,206,142,38,214,146,1,127,88,47,63,152,67};
static const unsigned char precomputed_nP_montgomery25519_n_286[] = {119,37,3,232,154,73,101,203,242,144,126,179,22,10,45,94,17,184,23,255,211,161,52,136,26,150,171,21,252,192,146,105};
static const unsigned char precomputed_nP_montgomery25519_p_286[] = {246,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_287[] = {209,8,167,238,183,163,11,201,243,185,121,161,29,123,20,175,222,28,200,142,145,47,77,106,203,64,70,86,163,201,45,53};
static const unsigned char precomputed_nP_montgomery25519_n_287[] = {185,89,159,240,55,61,227,236,79,54,134,247,113,119,201,223,61,57,176,52,178,107,76,248,195,183,218,70,2,173,201,75};
static const unsigned char precomputed_nP_montgomery25519_p_287[] = {247,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_288[] = {98,163,196,68,252,99,1,247,236,37,88,104,24,167,95,254,22,154,226,52,102,227,151,125,253,130,214,218,119,248,75,58};
static const unsigned char precomputed_nP_montgomery25519_n_288[] = {238,4,202,6,200,58,96,24,207,82,16,141,202,169,160,7,165,61,40,5,116,241,187,116,159,80,6,242,182,173,94,59};
static const unsigned char precomputed_nP_montgomery25519_p_288[] = {248,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_289[] = {131,184,40,236,201,25,226,15,254,203,109,30,23,96,252,240,196,182,159,89,115,37,70,250,109,160,42,78,55,155,232,74};
static const unsigned char precomputed_nP_montgomery25519_n_289[] = {101,222,223,26,206,156,204,185,76,95,32,117,10,126,86,35,35,87,27,95,11,25,168,243,204,196,231,23,141,222,245,4};
static const unsigned char precomputed_nP_montgomery25519_p_289[] = {249,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_290[] = {128,200,33,171,61,181,149,40,157,81,87,232,179,117,143,223,16,178,66,151,121,165,153,244,21,43,97,130,164,152,211,35};
static const unsigned char precomputed_nP_montgomery25519_n_290[] = {228,205,241,152,208,216,43,53,3,195,46,142,103,217,206,84,73,194,178,157,241,64,165,11,152,2,113,151,69,234,12,192};
static const unsigned char precomputed_nP_montgomery25519_p_290[] = {250,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_291[] = {223,75,13,226,76,177,189,93,51,68,131,194,183,178,154,171,211,179,5,128,98,214,70,79,95,15,37,250,248,116,70,127};
static const unsigned char precomputed_nP_montgomery25519_n_291[] = {153,8,207,112,220,24,154,208,124,64,209,151,219,203,20,87,3,185,38,62,238,27,69,114,86,102,36,245,54,109,70,217};
static const unsigned char precomputed_nP_montgomery25519_p_291[] = {251,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_292[] = {126,246,89,95,225,129,218,133,97,109,54,10,221,243,180,97,9,73,61,62,229,102,18,182,42,111,35,14,215,178,188,30};
static const unsigned char precomputed_nP_montgomery25519_n_292[] = {49,205,141,255,216,41,246,132,104,170,191,91,166,2,115,173,134,218,66,23,152,187,30,137,25,191,57,232,211,39,135,94};
static const unsigned char precomputed_nP_montgomery25519_p_292[] = {252,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_293[] = {218,32,254,212,8,74,75,59,35,10,147,245,81,16,116,191,60,217,50,26,181,201,162,223,252,193,5,7,161,94,137,78};
static const unsigned char precomputed_nP_montgomery25519_n_293[] = {173,94,114,153,255,15,146,241,23,12,151,123,87,7,174,47,165,162,164,136,62,36,54,15,9,138,189,230,124,181,208,104};
static const unsigned char precomputed_nP_montgomery25519_p_293[] = {253,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_294[] = {18,53,101,1,161,55,109,55,55,245,40,232,72,51,227,62,45,172,78,1,35,35,96,219,227,194,151,255,96,226,166,98};
static const unsigned char precomputed_nP_montgomery25519_n_294[] = {182,183,161,12,243,138,218,91,67,43,210,252,17,182,137,251,37,22,202,234,43,254,44,97,244,244,97,40,199,151,186,161};
static const unsigned char precomputed_nP_montgomery25519_p_294[] = {254,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_295[] = {242,86,244,104,119,137,72,40,118,67,216,30,195,131,6,158,122,176,90,117,93,74,71,235,10,59,122,174,197,2,226,59};
static const unsigned char precomputed_nP_montgomery25519_n_295[] = {183,164,111,106,254,186,133,112,217,52,220,7,24,172,132,172,170,68,251,154,140,38,240,10,204,87,79,34,55,162,159,103};
static const unsigned char precomputed_nP_montgomery25519_p_295[] = {255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255};
static const unsigned char precomputed_nP_montgomery25519_q_296[] = {104,184,73,21,234,140,146,89,66,128,93,207,104,48,232,88,217,71,111,230,170,67,145,116,165,245,23,47,124,139,236,77};
static const unsigned char precomputed_nP_montgomery25519_n_296[] = {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,0,0};
static const unsigned char precomputed_nP_montgomery25519_p_296[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_297[] = {104,184,73,21,234,140,146,89,66,128,93,207,104,48,232,88,217,71,111,230,170,67,145,116,165,245,23,47,124,139,236,77};
static const unsigned char precomputed_nP_montgomery25519_n_297[] = {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,0,128};
static const unsigned char precomputed_nP_montgomery25519_p_297[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_298[] = {104,184,73,21,234,140,146,89,66,128,93,207,104,48,232,88,217,71,111,230,170,67,145,116,165,245,23,47,124,139,236,77};
static const unsigned char precomputed_nP_montgomery25519_n_298[] = {1,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,0};
static const unsigned char precomputed_nP_montgomery25519_p_298[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_299[] = {104,184,73,21,234,140,146,89,66,128,93,207,104,48,232,88,217,71,111,230,170,67,145,116,165,245,23,47,124,139,236,77};
static const unsigned char precomputed_nP_montgomery25519_n_299[] = {1,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};
static const unsigned char precomputed_nP_montgomery25519_p_299[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_300[] = {104,184,73,21,234,140,146,89,66,128,93,207,104,48,232,88,217,71,111,230,170,67,145,116,165,245,23,47,124,139,236,77};
static const unsigned char precomputed_nP_montgomery25519_n_300[] = {2,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,0};
static const unsigned char precomputed_nP_montgomery25519_p_300[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_301[] = {104,184,73,21,234,140,146,89,66,128,93,207,104,48,232,88,217,71,111,230,170,67,145,116,165,245,23,47,124,139,236,77};
static const unsigned char precomputed_nP_montgomery25519_n_301[] = {2,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};
static const unsigned char precomputed_nP_montgomery25519_p_301[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_302[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_302[] = {235,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16};
static const unsigned char precomputed_nP_montgomery25519_p_302[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_303[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_303[] = {235,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144};
static const unsigned char precomputed_nP_montgomery25519_p_303[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_304[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_304[] = {236,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16};
static const unsigned char precomputed_nP_montgomery25519_p_304[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_305[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_305[] = {236,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144};
static const unsigned char precomputed_nP_montgomery25519_p_305[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_306[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_306[] = {237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16};
static const unsigned char precomputed_nP_montgomery25519_p_306[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_307[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_307[] = {237,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144};
static const unsigned char precomputed_nP_montgomery25519_p_307[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_308[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_308[] = {238,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16};
static const unsigned char precomputed_nP_montgomery25519_p_308[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_309[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_309[] = {238,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144};
static const unsigned char precomputed_nP_montgomery25519_p_309[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_310[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_310[] = {239,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,16};
static const unsigned char precomputed_nP_montgomery25519_p_310[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_311[] = {174,55,84,177,14,127,76,178,164,64,128,169,117,204,11,247,182,187,200,91,189,166,41,125,251,5,34,240,60,43,170,99};
static const unsigned char precomputed_nP_montgomery25519_n_311[] = {239,211,245,92,26,99,18,88,214,156,247,162,222,249,222,20,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,144};
static const unsigned char precomputed_nP_montgomery25519_p_311[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_312[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_312[] = {216,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32};
static const unsigned char precomputed_nP_montgomery25519_p_312[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_313[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_313[] = {216,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160};
static const unsigned char precomputed_nP_montgomery25519_p_313[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_314[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_314[] = {217,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32};
static const unsigned char precomputed_nP_montgomery25519_p_314[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_315[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_315[] = {217,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160};
static const unsigned char precomputed_nP_montgomery25519_p_315[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_316[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_316[] = {218,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32};
static const unsigned char precomputed_nP_montgomery25519_p_316[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_317[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_317[] = {218,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160};
static const unsigned char precomputed_nP_montgomery25519_p_317[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_318[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_318[] = {219,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32};
static const unsigned char precomputed_nP_montgomery25519_p_318[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_319[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_319[] = {219,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160};
static const unsigned char precomputed_nP_montgomery25519_p_319[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_320[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_320[] = {220,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,32};
static const unsigned char precomputed_nP_montgomery25519_p_320[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_321[] = {231,139,75,87,251,198,105,248,16,76,143,20,195,153,152,96,240,141,255,220,107,212,231,155,20,32,248,139,96,147,226,70};
static const unsigned char precomputed_nP_montgomery25519_n_321[] = {220,167,235,185,52,198,36,176,172,57,239,69,189,243,189,41,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,160};
static const unsigned char precomputed_nP_montgomery25519_p_321[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_322[] = {209,108,157,87,217,185,241,67,140,38,65,108,77,247,109,169,226,0,168,35,246,109,220,135,77,138,106,158,243,48,87,40};
static const unsigned char precomputed_nP_montgomery25519_n_322[] = {197,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48};
static const unsigned char precomputed_nP_montgomery25519_p_322[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_323[] = {209,108,157,87,217,185,241,67,140,38,65,108,77,247,109,169,226,0,168,35,246,109,220,135,77,138,106,158,243,48,87,40};
static const unsigned char precomputed_nP_montgomery25519_n_323[] = {197,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176};
static const unsigned char precomputed_nP_montgomery25519_p_323[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_324[] = {209,108,157,87,217,185,241,67,140,38,65,108,77,247,109,169,226,0,168,35,246,109,220,135,77,138,106,158,243,48,87,40};
static const unsigned char precomputed_nP_montgomery25519_n_324[] = {198,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48};
static const unsigned char precomputed_nP_montgomery25519_p_324[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_325[] = {209,108,157,87,217,185,241,67,140,38,65,108,77,247,109,169,226,0,168,35,246,109,220,135,77,138,106,158,243,48,87,40};
static const unsigned char precomputed_nP_montgomery25519_n_325[] = {198,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176};
static const unsigned char precomputed_nP_montgomery25519_p_325[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_326[] = {209,108,157,87,217,185,241,67,140,38,65,108,77,247,109,169,226,0,168,35,246,109,220,135,77,138,106,158,243,48,87,40};
static const unsigned char precomputed_nP_montgomery25519_n_326[] = {199,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48};
static const unsigned char precomputed_nP_montgomery25519_p_326[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_327[] = {209,108,157,87,217,185,241,67,140,38,65,108,77,247,109,169,226,0,168,35,246,109,220,135,77,138,106,158,243,48,87,40};
static const unsigned char precomputed_nP_montgomery25519_n_327[] = {199,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176};
static const unsigned char precomputed_nP_montgomery25519_p_327[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_328[] = {65,15,235,90,165,23,55,202,122,21,115,134,135,213,129,92,121,19,17,181,54,134,148,118,57,194,144,32,68,24,130,40};
static const unsigned char precomputed_nP_montgomery25519_n_328[] = {200,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48};
static const unsigned char precomputed_nP_montgomery25519_p_328[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_329[] = {65,15,235,90,165,23,55,202,122,21,115,134,135,213,129,92,121,19,17,181,54,134,148,118,57,194,144,32,68,24,130,40};
static const unsigned char precomputed_nP_montgomery25519_n_329[] = {200,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176};
static const unsigned char precomputed_nP_montgomery25519_p_329[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_330[] = {65,15,235,90,165,23,55,202,122,21,115,134,135,213,129,92,121,19,17,181,54,134,148,118,57,194,144,32,68,24,130,40};
static const unsigned char precomputed_nP_montgomery25519_n_330[] = {201,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,48};
static const unsigned char precomputed_nP_montgomery25519_p_330[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_331[] = {65,15,235,90,165,23,55,202,122,21,115,134,135,213,129,92,121,19,17,181,54,134,148,118,57,194,144,32,68,24,130,40};
static const unsigned char precomputed_nP_montgomery25519_n_331[] = {201,123,225,22,79,41,55,8,131,214,230,232,155,237,156,62,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,176};
static const unsigned char precomputed_nP_montgomery25519_p_331[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_332[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_332[] = {178,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64};
static const unsigned char precomputed_nP_montgomery25519_p_332[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_333[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_333[] = {178,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192};
static const unsigned char precomputed_nP_montgomery25519_p_333[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_334[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_334[] = {179,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64};
static const unsigned char precomputed_nP_montgomery25519_p_334[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_335[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_335[] = {179,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192};
static const unsigned char precomputed_nP_montgomery25519_p_335[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_336[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_336[] = {180,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64};
static const unsigned char precomputed_nP_montgomery25519_p_336[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_337[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_337[] = {180,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192};
static const unsigned char precomputed_nP_montgomery25519_p_337[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_338[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_338[] = {181,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64};
static const unsigned char precomputed_nP_montgomery25519_p_338[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_339[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_339[] = {181,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192};
static const unsigned char precomputed_nP_montgomery25519_p_339[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_340[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_340[] = {182,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,64};
static const unsigned char precomputed_nP_montgomery25519_p_340[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_341[] = {109,138,207,247,64,117,107,238,187,28,24,80,125,89,55,137,19,82,117,58,74,123,10,248,234,235,140,156,99,60,63,64};
static const unsigned char precomputed_nP_montgomery25519_n_341[] = {182,79,215,115,105,140,73,96,89,115,222,139,122,231,123,83,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,192};
static const unsigned char precomputed_nP_montgomery25519_p_341[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_342[] = {2,4,227,41,22,217,16,242,153,36,17,149,21,122,112,241,172,35,16,124,233,123,240,67,172,231,103,196,30,180,63,123};
static const unsigned char precomputed_nP_montgomery25519_n_342[] = {159,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80};
static const unsigned char precomputed_nP_montgomery25519_p_342[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_343[] = {2,4,227,41,22,217,16,242,153,36,17,149,21,122,112,241,172,35,16,124,233,123,240,67,172,231,103,196,30,180,63,123};
static const unsigned char precomputed_nP_montgomery25519_n_343[] = {159,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208};
static const unsigned char precomputed_nP_montgomery25519_p_343[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_344[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_344[] = {160,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80};
static const unsigned char precomputed_nP_montgomery25519_p_344[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_345[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_345[] = {160,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208};
static const unsigned char precomputed_nP_montgomery25519_p_345[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_346[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_346[] = {161,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80};
static const unsigned char precomputed_nP_montgomery25519_p_346[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_347[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_347[] = {161,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208};
static const unsigned char precomputed_nP_montgomery25519_p_347[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_348[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_348[] = {162,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80};
static const unsigned char precomputed_nP_montgomery25519_p_348[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_349[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_349[] = {162,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208};
static const unsigned char precomputed_nP_montgomery25519_p_349[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_350[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_350[] = {163,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,80};
static const unsigned char precomputed_nP_montgomery25519_p_350[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_351[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_n_351[] = {163,35,205,208,131,239,91,184,47,16,214,46,89,225,90,104,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,208};
static const unsigned char precomputed_nP_montgomery25519_p_351[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_352[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_352[] = {140,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96};
static const unsigned char precomputed_nP_montgomery25519_p_352[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_353[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_353[] = {140,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224};
static const unsigned char precomputed_nP_montgomery25519_p_353[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_354[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_354[] = {141,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96};
static const unsigned char precomputed_nP_montgomery25519_p_354[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_355[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_355[] = {141,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224};
static const unsigned char precomputed_nP_montgomery25519_p_355[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_356[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_356[] = {142,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96};
static const unsigned char precomputed_nP_montgomery25519_p_356[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_357[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_357[] = {142,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224};
static const unsigned char precomputed_nP_montgomery25519_p_357[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_358[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_358[] = {143,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96};
static const unsigned char precomputed_nP_montgomery25519_p_358[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_359[] = {136,163,126,187,77,21,125,112,229,232,232,195,194,74,226,127,55,149,208,19,158,134,22,89,225,31,185,184,35,162,25,91};
static const unsigned char precomputed_nP_montgomery25519_n_359[] = {143,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224};
static const unsigned char precomputed_nP_montgomery25519_p_359[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_360[] = {4,60,159,148,140,4,91,54,247,97,13,166,37,139,55,207,203,171,12,83,188,81,88,119,110,36,233,70,202,224,137,84};
static const unsigned char precomputed_nP_montgomery25519_n_360[] = {144,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,96};
static const unsigned char precomputed_nP_montgomery25519_p_360[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_361[] = {4,60,159,148,140,4,91,54,247,97,13,166,37,139,55,207,203,171,12,83,188,81,88,119,110,36,233,70,202,224,137,84};
static const unsigned char precomputed_nP_montgomery25519_n_361[] = {144,247,194,45,158,82,110,16,6,173,205,209,55,219,57,125,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,224};
static const unsigned char precomputed_nP_montgomery25519_p_361[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_362[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_362[] = {121,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112};
static const unsigned char precomputed_nP_montgomery25519_p_362[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_363[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_363[] = {121,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240};
static const unsigned char precomputed_nP_montgomery25519_p_363[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_364[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_364[] = {122,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112};
static const unsigned char precomputed_nP_montgomery25519_p_364[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_365[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_365[] = {122,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240};
static const unsigned char precomputed_nP_montgomery25519_p_365[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_366[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_366[] = {123,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112};
static const unsigned char precomputed_nP_montgomery25519_p_366[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_367[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_367[] = {123,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240};
static const unsigned char precomputed_nP_montgomery25519_p_367[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_368[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_368[] = {124,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112};
static const unsigned char precomputed_nP_montgomery25519_p_368[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_369[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_369[] = {124,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240};
static const unsigned char precomputed_nP_montgomery25519_p_369[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_370[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_370[] = {125,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,112};
static const unsigned char precomputed_nP_montgomery25519_p_370[] = {16,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,0};
static const unsigned char precomputed_nP_montgomery25519_q_371[] = {208,178,249,55,16,189,207,176,231,55,81,212,146,150,15,170,230,58,26,147,125,3,171,100,93,198,10,185,34,241,199,78};
static const unsigned char precomputed_nP_montgomery25519_n_371[] = {125,203,184,138,184,181,128,104,220,73,197,116,22,213,24,146,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,240};
static const unsigned char precomputed_nP_montgomery25519_p_371[] = {16,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,0};
static const struct {
const unsigned char *q;
long long qsize;
const unsigned char *n;
long long nsize;
const unsigned char *p;
long long psize;
} precomputed_nP_montgomery25519[precomputed_nP_montgomery25519_NUM] = {
{
precomputed_nP_montgomery25519_q_0,32,
precomputed_nP_montgomery25519_n_0,32,
precomputed_nP_montgomery25519_p_0,32,
},
{
precomputed_nP_montgomery25519_q_1,32,
precomputed_nP_montgomery25519_n_1,32,
precomputed_nP_montgomery25519_p_1,32,
},
{
precomputed_nP_montgomery25519_q_2,32,
precomputed_nP_montgomery25519_n_2,32,
precomputed_nP_montgomery25519_p_2,32,
},
{
precomputed_nP_montgomery25519_q_3,32,
precomputed_nP_montgomery25519_n_3,32,
precomputed_nP_montgomery25519_p_3,32,
},
{
precomputed_nP_montgomery25519_q_4,32,
precomputed_nP_montgomery25519_n_4,32,
precomputed_nP_montgomery25519_p_4,32,
},
{
precomputed_nP_montgomery25519_q_5,32,
precomputed_nP_montgomery25519_n_5,32,
precomputed_nP_montgomery25519_p_5,32,
},
{
precomputed_nP_montgomery25519_q_6,32,
precomputed_nP_montgomery25519_n_6,32,
precomputed_nP_montgomery25519_p_6,32,
},
{
precomputed_nP_montgomery25519_q_7,32,
precomputed_nP_montgomery25519_n_7,32,
precomputed_nP_montgomery25519_p_7,32,
},
{
precomputed_nP_montgomery25519_q_8,32,
precomputed_nP_montgomery25519_n_8,32,
precomputed_nP_montgomery25519_p_8,32,
},
{
precomputed_nP_montgomery25519_q_9,32,
precomputed_nP_montgomery25519_n_9,32,
precomputed_nP_montgomery25519_p_9,32,
},
{
precomputed_nP_montgomery25519_q_10,32,
precomputed_nP_montgomery25519_n_10,32,
precomputed_nP_montgomery25519_p_10,32,
},
{
precomputed_nP_montgomery25519_q_11,32,
precomputed_nP_montgomery25519_n_11,32,
precomputed_nP_montgomery25519_p_11,32,
},
{
precomputed_nP_montgomery25519_q_12,32,
precomputed_nP_montgomery25519_n_12,32,
precomputed_nP_montgomery25519_p_12,32,
},
{
precomputed_nP_montgomery25519_q_13,32,
precomputed_nP_montgomery25519_n_13,32,
precomputed_nP_montgomery25519_p_13,32,
},
{
precomputed_nP_montgomery25519_q_14,32,
precomputed_nP_montgomery25519_n_14,32,
precomputed_nP_montgomery25519_p_14,32,
},
{
precomputed_nP_montgomery25519_q_15,32,
precomputed_nP_montgomery25519_n_15,32,
precomputed_nP_montgomery25519_p_15,32,
},
{
precomputed_nP_montgomery25519_q_16,32,
precomputed_nP_montgomery25519_n_16,32,
precomputed_nP_montgomery25519_p_16,32,
},
{
precomputed_nP_montgomery25519_q_17,32,
precomputed_nP_montgomery25519_n_17,32,
precomputed_nP_montgomery25519_p_17,32,
},
{
precomputed_nP_montgomery25519_q_18,32,
precomputed_nP_montgomery25519_n_18,32,
precomputed_nP_montgomery25519_p_18,32,
},
{
precomputed_nP_montgomery25519_q_19,32,
precomputed_nP_montgomery25519_n_19,32,
precomputed_nP_montgomery25519_p_19,32,
},
{
precomputed_nP_montgomery25519_q_20,32,
precomputed_nP_montgomery25519_n_20,32,
precomputed_nP_montgomery25519_p_20,32,
},
{
precomputed_nP_montgomery25519_q_21,32,
precomputed_nP_montgomery25519_n_21,32,
precomputed_nP_montgomery25519_p_21,32,
},
{
precomputed_nP_montgomery25519_q_22,32,
precomputed_nP_montgomery25519_n_22,32,
precomputed_nP_montgomery25519_p_22,32,
},
{
precomputed_nP_montgomery25519_q_23,32,
precomputed_nP_montgomery25519_n_23,32,
precomputed_nP_montgomery25519_p_23,32,
},
{
precomputed_nP_montgomery25519_q_24,32,
precomputed_nP_montgomery25519_n_24,32,
precomputed_nP_montgomery25519_p_24,32,
},
{
precomputed_nP_montgomery25519_q_25,32,
precomputed_nP_montgomery25519_n_25,32,
precomputed_nP_montgomery25519_p_25,32,
},
{
precomputed_nP_montgomery25519_q_26,32,
precomputed_nP_montgomery25519_n_26,32,
precomputed_nP_montgomery25519_p_26,32,
},
{
precomputed_nP_montgomery25519_q_27,32,
precomputed_nP_montgomery25519_n_27,32,
precomputed_nP_montgomery25519_p_27,32,
},
{
precomputed_nP_montgomery25519_q_28,32,
precomputed_nP_montgomery25519_n_28,32,
precomputed_nP_montgomery25519_p_28,32,
},
{
precomputed_nP_montgomery25519_q_29,32,
precomputed_nP_montgomery25519_n_29,32,
precomputed_nP_montgomery25519_p_29,32,
},
{
precomputed_nP_montgomery25519_q_30,32,
precomputed_nP_montgomery25519_n_30,32,
precomputed_nP_montgomery25519_p_30,32,
},
{
precomputed_nP_montgomery25519_q_31,32,
precomputed_nP_montgomery25519_n_31,32,
precomputed_nP_montgomery25519_p_31,32,
},
{
precomputed_nP_montgomery25519_q_32,32,
precomputed_nP_montgomery25519_n_32,32,
precomputed_nP_montgomery25519_p_32,32,
},
{
precomputed_nP_montgomery25519_q_33,32,
precomputed_nP_montgomery25519_n_33,32,
precomputed_nP_montgomery25519_p_33,32,
},
{
precomputed_nP_montgomery25519_q_34,32,
precomputed_nP_montgomery25519_n_34,32,
precomputed_nP_montgomery25519_p_34,32,
},
{
precomputed_nP_montgomery25519_q_35,32,
precomputed_nP_montgomery25519_n_35,32,
precomputed_nP_montgomery25519_p_35,32,
},
{
precomputed_nP_montgomery25519_q_36,32,
precomputed_nP_montgomery25519_n_36,32,
precomputed_nP_montgomery25519_p_36,32,
},
{
precomputed_nP_montgomery25519_q_37,32,
precomputed_nP_montgomery25519_n_37,32,
precomputed_nP_montgomery25519_p_37,32,
},
{
precomputed_nP_montgomery25519_q_38,32,
precomputed_nP_montgomery25519_n_38,32,
precomputed_nP_montgomery25519_p_38,32,
},
{
precomputed_nP_montgomery25519_q_39,32,
precomputed_nP_montgomery25519_n_39,32,
precomputed_nP_montgomery25519_p_39,32,
},
{
precomputed_nP_montgomery25519_q_40,32,
precomputed_nP_montgomery25519_n_40,32,
precomputed_nP_montgomery25519_p_40,32,
},
{
precomputed_nP_montgomery25519_q_41,32,
precomputed_nP_montgomery25519_n_41,32,
precomputed_nP_montgomery25519_p_41,32,
},
{
precomputed_nP_montgomery25519_q_42,32,
precomputed_nP_montgomery25519_n_42,32,
precomputed_nP_montgomery25519_p_42,32,
},
{
precomputed_nP_montgomery25519_q_43,32,
precomputed_nP_montgomery25519_n_43,32,
precomputed_nP_montgomery25519_p_43,32,
},
{
precomputed_nP_montgomery25519_q_44,32,
precomputed_nP_montgomery25519_n_44,32,
precomputed_nP_montgomery25519_p_44,32,
},
{
precomputed_nP_montgomery25519_q_45,32,
precomputed_nP_montgomery25519_n_45,32,
precomputed_nP_montgomery25519_p_45,32,
},
{
precomputed_nP_montgomery25519_q_46,32,
precomputed_nP_montgomery25519_n_46,32,
precomputed_nP_montgomery25519_p_46,32,
},
{
precomputed_nP_montgomery25519_q_47,32,
precomputed_nP_montgomery25519_n_47,32,
precomputed_nP_montgomery25519_p_47,32,
},
{
precomputed_nP_montgomery25519_q_48,32,
precomputed_nP_montgomery25519_n_48,32,
precomputed_nP_montgomery25519_p_48,32,
},
{
precomputed_nP_montgomery25519_q_49,32,
precomputed_nP_montgomery25519_n_49,32,
precomputed_nP_montgomery25519_p_49,32,
},
{
precomputed_nP_montgomery25519_q_50,32,
precomputed_nP_montgomery25519_n_50,32,
precomputed_nP_montgomery25519_p_50,32,
},
{
precomputed_nP_montgomery25519_q_51,32,
precomputed_nP_montgomery25519_n_51,32,
precomputed_nP_montgomery25519_p_51,32,
},
{
precomputed_nP_montgomery25519_q_52,32,
precomputed_nP_montgomery25519_n_52,32,
precomputed_nP_montgomery25519_p_52,32,
},
{
precomputed_nP_montgomery25519_q_53,32,
precomputed_nP_montgomery25519_n_53,32,
precomputed_nP_montgomery25519_p_53,32,
},
{
precomputed_nP_montgomery25519_q_54,32,
precomputed_nP_montgomery25519_n_54,32,
precomputed_nP_montgomery25519_p_54,32,
},
{
precomputed_nP_montgomery25519_q_55,32,
precomputed_nP_montgomery25519_n_55,32,
precomputed_nP_montgomery25519_p_55,32,
},
{
precomputed_nP_montgomery25519_q_56,32,
precomputed_nP_montgomery25519_n_56,32,
precomputed_nP_montgomery25519_p_56,32,
},
{
precomputed_nP_montgomery25519_q_57,32,
precomputed_nP_montgomery25519_n_57,32,
precomputed_nP_montgomery25519_p_57,32,
},
{
precomputed_nP_montgomery25519_q_58,32,
precomputed_nP_montgomery25519_n_58,32,
precomputed_nP_montgomery25519_p_58,32,
},
{
precomputed_nP_montgomery25519_q_59,32,
precomputed_nP_montgomery25519_n_59,32,
precomputed_nP_montgomery25519_p_59,32,
},
{
precomputed_nP_montgomery25519_q_60,32,
precomputed_nP_montgomery25519_n_60,32,
precomputed_nP_montgomery25519_p_60,32,
},
{
precomputed_nP_montgomery25519_q_61,32,
precomputed_nP_montgomery25519_n_61,32,
precomputed_nP_montgomery25519_p_61,32,
},
{
precomputed_nP_montgomery25519_q_62,32,
precomputed_nP_montgomery25519_n_62,32,
precomputed_nP_montgomery25519_p_62,32,
},
{
precomputed_nP_montgomery25519_q_63,32,
precomputed_nP_montgomery25519_n_63,32,
precomputed_nP_montgomery25519_p_63,32,
},
{
precomputed_nP_montgomery25519_q_64,32,
precomputed_nP_montgomery25519_n_64,32,
precomputed_nP_montgomery25519_p_64,32,
},
{
precomputed_nP_montgomery25519_q_65,32,
precomputed_nP_montgomery25519_n_65,32,
precomputed_nP_montgomery25519_p_65,32,
},
{
precomputed_nP_montgomery25519_q_66,32,
precomputed_nP_montgomery25519_n_66,32,
precomputed_nP_montgomery25519_p_66,32,
},
{
precomputed_nP_montgomery25519_q_67,32,
precomputed_nP_montgomery25519_n_67,32,
precomputed_nP_montgomery25519_p_67,32,
},
{
precomputed_nP_montgomery25519_q_68,32,
precomputed_nP_montgomery25519_n_68,32,
precomputed_nP_montgomery25519_p_68,32,
},
{
precomputed_nP_montgomery25519_q_69,32,
precomputed_nP_montgomery25519_n_69,32,
precomputed_nP_montgomery25519_p_69,32,
},
{
precomputed_nP_montgomery25519_q_70,32,
precomputed_nP_montgomery25519_n_70,32,
precomputed_nP_montgomery25519_p_70,32,
},
{
precomputed_nP_montgomery25519_q_71,32,
precomputed_nP_montgomery25519_n_71,32,
precomputed_nP_montgomery25519_p_71,32,
},
{
precomputed_nP_montgomery25519_q_72,32,
precomputed_nP_montgomery25519_n_72,32,
precomputed_nP_montgomery25519_p_72,32,
},
{
precomputed_nP_montgomery25519_q_73,32,
precomputed_nP_montgomery25519_n_73,32,
precomputed_nP_montgomery25519_p_73,32,
},
{
precomputed_nP_montgomery25519_q_74,32,
precomputed_nP_montgomery25519_n_74,32,
precomputed_nP_montgomery25519_p_74,32,
},
{
precomputed_nP_montgomery25519_q_75,32,
precomputed_nP_montgomery25519_n_75,32,
precomputed_nP_montgomery25519_p_75,32,
},
{
precomputed_nP_montgomery25519_q_76,32,
precomputed_nP_montgomery25519_n_76,32,
precomputed_nP_montgomery25519_p_76,32,
},
{
precomputed_nP_montgomery25519_q_77,32,
precomputed_nP_montgomery25519_n_77,32,
precomputed_nP_montgomery25519_p_77,32,
},
{
precomputed_nP_montgomery25519_q_78,32,
precomputed_nP_montgomery25519_n_78,32,
precomputed_nP_montgomery25519_p_78,32,
},
{
precomputed_nP_montgomery25519_q_79,32,
precomputed_nP_montgomery25519_n_79,32,
precomputed_nP_montgomery25519_p_79,32,
},
{
precomputed_nP_montgomery25519_q_80,32,
precomputed_nP_montgomery25519_n_80,32,
precomputed_nP_montgomery25519_p_80,32,
},
{
precomputed_nP_montgomery25519_q_81,32,
precomputed_nP_montgomery25519_n_81,32,
precomputed_nP_montgomery25519_p_81,32,
},
{
precomputed_nP_montgomery25519_q_82,32,
precomputed_nP_montgomery25519_n_82,32,
precomputed_nP_montgomery25519_p_82,32,
},
{
precomputed_nP_montgomery25519_q_83,32,
precomputed_nP_montgomery25519_n_83,32,
precomputed_nP_montgomery25519_p_83,32,
},
{
precomputed_nP_montgomery25519_q_84,32,
precomputed_nP_montgomery25519_n_84,32,
precomputed_nP_montgomery25519_p_84,32,
},
{
precomputed_nP_montgomery25519_q_85,32,
precomputed_nP_montgomery25519_n_85,32,
precomputed_nP_montgomery25519_p_85,32,
},
{
precomputed_nP_montgomery25519_q_86,32,
precomputed_nP_montgomery25519_n_86,32,
precomputed_nP_montgomery25519_p_86,32,
},
{
precomputed_nP_montgomery25519_q_87,32,
precomputed_nP_montgomery25519_n_87,32,
precomputed_nP_montgomery25519_p_87,32,
},
{
precomputed_nP_montgomery25519_q_88,32,
precomputed_nP_montgomery25519_n_88,32,
precomputed_nP_montgomery25519_p_88,32,
},
{
precomputed_nP_montgomery25519_q_89,32,
precomputed_nP_montgomery25519_n_89,32,
precomputed_nP_montgomery25519_p_89,32,
},
{
precomputed_nP_montgomery25519_q_90,32,
precomputed_nP_montgomery25519_n_90,32,
precomputed_nP_montgomery25519_p_90,32,
},
{
precomputed_nP_montgomery25519_q_91,32,
precomputed_nP_montgomery25519_n_91,32,
precomputed_nP_montgomery25519_p_91,32,
},
{
precomputed_nP_montgomery25519_q_92,32,
precomputed_nP_montgomery25519_n_92,32,
precomputed_nP_montgomery25519_p_92,32,
},
{
precomputed_nP_montgomery25519_q_93,32,
precomputed_nP_montgomery25519_n_93,32,
precomputed_nP_montgomery25519_p_93,32,
},
{
precomputed_nP_montgomery25519_q_94,32,
precomputed_nP_montgomery25519_n_94,32,
precomputed_nP_montgomery25519_p_94,32,
},
{
precomputed_nP_montgomery25519_q_95,32,
precomputed_nP_montgomery25519_n_95,32,
precomputed_nP_montgomery25519_p_95,32,
},
{
precomputed_nP_montgomery25519_q_96,32,
precomputed_nP_montgomery25519_n_96,32,
precomputed_nP_montgomery25519_p_96,32,
},
{
precomputed_nP_montgomery25519_q_97,32,
precomputed_nP_montgomery25519_n_97,32,
precomputed_nP_montgomery25519_p_97,32,
},
{
precomputed_nP_montgomery25519_q_98,32,
precomputed_nP_montgomery25519_n_98,32,
precomputed_nP_montgomery25519_p_98,32,
},
{
precomputed_nP_montgomery25519_q_99,32,
precomputed_nP_montgomery25519_n_99,32,
precomputed_nP_montgomery25519_p_99,32,
},
{
precomputed_nP_montgomery25519_q_100,32,
precomputed_nP_montgomery25519_n_100,32,
precomputed_nP_montgomery25519_p_100,32,
},
{
precomputed_nP_montgomery25519_q_101,32,
precomputed_nP_montgomery25519_n_101,32,
precomputed_nP_montgomery25519_p_101,32,
},
{
precomputed_nP_montgomery25519_q_102,32,
precomputed_nP_montgomery25519_n_102,32,
precomputed_nP_montgomery25519_p_102,32,
},
{
precomputed_nP_montgomery25519_q_103,32,
precomputed_nP_montgomery25519_n_103,32,
precomputed_nP_montgomery25519_p_103,32,
},
{
precomputed_nP_montgomery25519_q_104,32,
precomputed_nP_montgomery25519_n_104,32,
precomputed_nP_montgomery25519_p_104,32,
},
{
precomputed_nP_montgomery25519_q_105,32,
precomputed_nP_montgomery25519_n_105,32,
precomputed_nP_montgomery25519_p_105,32,
},
{
precomputed_nP_montgomery25519_q_106,32,
precomputed_nP_montgomery25519_n_106,32,
precomputed_nP_montgomery25519_p_106,32,
},
{
precomputed_nP_montgomery25519_q_107,32,
precomputed_nP_montgomery25519_n_107,32,
precomputed_nP_montgomery25519_p_107,32,
},
{
precomputed_nP_montgomery25519_q_108,32,
precomputed_nP_montgomery25519_n_108,32,
precomputed_nP_montgomery25519_p_108,32,
},
{
precomputed_nP_montgomery25519_q_109,32,
precomputed_nP_montgomery25519_n_109,32,
precomputed_nP_montgomery25519_p_109,32,
},
{
precomputed_nP_montgomery25519_q_110,32,
precomputed_nP_montgomery25519_n_110,32,
precomputed_nP_montgomery25519_p_110,32,
},
{
precomputed_nP_montgomery25519_q_111,32,
precomputed_nP_montgomery25519_n_111,32,
precomputed_nP_montgomery25519_p_111,32,
},
{
precomputed_nP_montgomery25519_q_112,32,
precomputed_nP_montgomery25519_n_112,32,
precomputed_nP_montgomery25519_p_112,32,
},
{
precomputed_nP_montgomery25519_q_113,32,
precomputed_nP_montgomery25519_n_113,32,
precomputed_nP_montgomery25519_p_113,32,
},
{
precomputed_nP_montgomery25519_q_114,32,
precomputed_nP_montgomery25519_n_114,32,
precomputed_nP_montgomery25519_p_114,32,
},
{
precomputed_nP_montgomery25519_q_115,32,
precomputed_nP_montgomery25519_n_115,32,
precomputed_nP_montgomery25519_p_115,32,
},
{
precomputed_nP_montgomery25519_q_116,32,
precomputed_nP_montgomery25519_n_116,32,
precomputed_nP_montgomery25519_p_116,32,
},
{
precomputed_nP_montgomery25519_q_117,32,
precomputed_nP_montgomery25519_n_117,32,
precomputed_nP_montgomery25519_p_117,32,
},
{
precomputed_nP_montgomery25519_q_118,32,
precomputed_nP_montgomery25519_n_118,32,
precomputed_nP_montgomery25519_p_118,32,
},
{
precomputed_nP_montgomery25519_q_119,32,
precomputed_nP_montgomery25519_n_119,32,
precomputed_nP_montgomery25519_p_119,32,
},
{
precomputed_nP_montgomery25519_q_120,32,
precomputed_nP_montgomery25519_n_120,32,
precomputed_nP_montgomery25519_p_120,32,
},
{
precomputed_nP_montgomery25519_q_121,32,
precomputed_nP_montgomery25519_n_121,32,
precomputed_nP_montgomery25519_p_121,32,
},
{
precomputed_nP_montgomery25519_q_122,32,
precomputed_nP_montgomery25519_n_122,32,
precomputed_nP_montgomery25519_p_122,32,
},
{
precomputed_nP_montgomery25519_q_123,32,
precomputed_nP_montgomery25519_n_123,32,
precomputed_nP_montgomery25519_p_123,32,
},
{
precomputed_nP_montgomery25519_q_124,32,
precomputed_nP_montgomery25519_n_124,32,
precomputed_nP_montgomery25519_p_124,32,
},
{
precomputed_nP_montgomery25519_q_125,32,
precomputed_nP_montgomery25519_n_125,32,
precomputed_nP_montgomery25519_p_125,32,
},
{
precomputed_nP_montgomery25519_q_126,32,
precomputed_nP_montgomery25519_n_126,32,
precomputed_nP_montgomery25519_p_126,32,
},
{
precomputed_nP_montgomery25519_q_127,32,
precomputed_nP_montgomery25519_n_127,32,
precomputed_nP_montgomery25519_p_127,32,
},
{
precomputed_nP_montgomery25519_q_128,32,
precomputed_nP_montgomery25519_n_128,32,
precomputed_nP_montgomery25519_p_128,32,
},
{
precomputed_nP_montgomery25519_q_129,32,
precomputed_nP_montgomery25519_n_129,32,
precomputed_nP_montgomery25519_p_129,32,
},
{
precomputed_nP_montgomery25519_q_130,32,
precomputed_nP_montgomery25519_n_130,32,
precomputed_nP_montgomery25519_p_130,32,
},
{
precomputed_nP_montgomery25519_q_131,32,
precomputed_nP_montgomery25519_n_131,32,
precomputed_nP_montgomery25519_p_131,32,
},
{
precomputed_nP_montgomery25519_q_132,32,
precomputed_nP_montgomery25519_n_132,32,
precomputed_nP_montgomery25519_p_132,32,
},
{
precomputed_nP_montgomery25519_q_133,32,
precomputed_nP_montgomery25519_n_133,32,
precomputed_nP_montgomery25519_p_133,32,
},
{
precomputed_nP_montgomery25519_q_134,32,
precomputed_nP_montgomery25519_n_134,32,
precomputed_nP_montgomery25519_p_134,32,
},
{
precomputed_nP_montgomery25519_q_135,32,
precomputed_nP_montgomery25519_n_135,32,
precomputed_nP_montgomery25519_p_135,32,
},
{
precomputed_nP_montgomery25519_q_136,32,
precomputed_nP_montgomery25519_n_136,32,
precomputed_nP_montgomery25519_p_136,32,
},
{
precomputed_nP_montgomery25519_q_137,32,
precomputed_nP_montgomery25519_n_137,32,
precomputed_nP_montgomery25519_p_137,32,
},
{
precomputed_nP_montgomery25519_q_138,32,
precomputed_nP_montgomery25519_n_138,32,
precomputed_nP_montgomery25519_p_138,32,
},
{
precomputed_nP_montgomery25519_q_139,32,
precomputed_nP_montgomery25519_n_139,32,
precomputed_nP_montgomery25519_p_139,32,
},
{
precomputed_nP_montgomery25519_q_140,32,
precomputed_nP_montgomery25519_n_140,32,
precomputed_nP_montgomery25519_p_140,32,
},
{
precomputed_nP_montgomery25519_q_141,32,
precomputed_nP_montgomery25519_n_141,32,
precomputed_nP_montgomery25519_p_141,32,
},
{
precomputed_nP_montgomery25519_q_142,32,
precomputed_nP_montgomery25519_n_142,32,
precomputed_nP_montgomery25519_p_142,32,
},
{
precomputed_nP_montgomery25519_q_143,32,
precomputed_nP_montgomery25519_n_143,32,
precomputed_nP_montgomery25519_p_143,32,
},
{
precomputed_nP_montgomery25519_q_144,32,
precomputed_nP_montgomery25519_n_144,32,
precomputed_nP_montgomery25519_p_144,32,
},
{
precomputed_nP_montgomery25519_q_145,32,
precomputed_nP_montgomery25519_n_145,32,
precomputed_nP_montgomery25519_p_145,32,
},
{
precomputed_nP_montgomery25519_q_146,32,
precomputed_nP_montgomery25519_n_146,32,
precomputed_nP_montgomery25519_p_146,32,
},
{
precomputed_nP_montgomery25519_q_147,32,
precomputed_nP_montgomery25519_n_147,32,
precomputed_nP_montgomery25519_p_147,32,
},
{
precomputed_nP_montgomery25519_q_148,32,
precomputed_nP_montgomery25519_n_148,32,
precomputed_nP_montgomery25519_p_148,32,
},
{
precomputed_nP_montgomery25519_q_149,32,
precomputed_nP_montgomery25519_n_149,32,
precomputed_nP_montgomery25519_p_149,32,
},
{
precomputed_nP_montgomery25519_q_150,32,
precomputed_nP_montgomery25519_n_150,32,
precomputed_nP_montgomery25519_p_150,32,
},
{
precomputed_nP_montgomery25519_q_151,32,
precomputed_nP_montgomery25519_n_151,32,
precomputed_nP_montgomery25519_p_151,32,
},
{
precomputed_nP_montgomery25519_q_152,32,
precomputed_nP_montgomery25519_n_152,32,
precomputed_nP_montgomery25519_p_152,32,
},
{
precomputed_nP_montgomery25519_q_153,32,
precomputed_nP_montgomery25519_n_153,32,
precomputed_nP_montgomery25519_p_153,32,
},
{
precomputed_nP_montgomery25519_q_154,32,
precomputed_nP_montgomery25519_n_154,32,
precomputed_nP_montgomery25519_p_154,32,
},
{
precomputed_nP_montgomery25519_q_155,32,
precomputed_nP_montgomery25519_n_155,32,
precomputed_nP_montgomery25519_p_155,32,
},
{
precomputed_nP_montgomery25519_q_156,32,
precomputed_nP_montgomery25519_n_156,32,
precomputed_nP_montgomery25519_p_156,32,
},
{
precomputed_nP_montgomery25519_q_157,32,
precomputed_nP_montgomery25519_n_157,32,
precomputed_nP_montgomery25519_p_157,32,
},
{
precomputed_nP_montgomery25519_q_158,32,
precomputed_nP_montgomery25519_n_158,32,
precomputed_nP_montgomery25519_p_158,32,
},
{
precomputed_nP_montgomery25519_q_159,32,
precomputed_nP_montgomery25519_n_159,32,
precomputed_nP_montgomery25519_p_159,32,
},
{
precomputed_nP_montgomery25519_q_160,32,
precomputed_nP_montgomery25519_n_160,32,
precomputed_nP_montgomery25519_p_160,32,
},
{
precomputed_nP_montgomery25519_q_161,32,
precomputed_nP_montgomery25519_n_161,32,
precomputed_nP_montgomery25519_p_161,32,
},
{
precomputed_nP_montgomery25519_q_162,32,
precomputed_nP_montgomery25519_n_162,32,
precomputed_nP_montgomery25519_p_162,32,
},
{
precomputed_nP_montgomery25519_q_163,32,
precomputed_nP_montgomery25519_n_163,32,
precomputed_nP_montgomery25519_p_163,32,
},
{
precomputed_nP_montgomery25519_q_164,32,
precomputed_nP_montgomery25519_n_164,32,
precomputed_nP_montgomery25519_p_164,32,
},
{
precomputed_nP_montgomery25519_q_165,32,
precomputed_nP_montgomery25519_n_165,32,
precomputed_nP_montgomery25519_p_165,32,
},
{
precomputed_nP_montgomery25519_q_166,32,
precomputed_nP_montgomery25519_n_166,32,
precomputed_nP_montgomery25519_p_166,32,
},
{
precomputed_nP_montgomery25519_q_167,32,
precomputed_nP_montgomery25519_n_167,32,
precomputed_nP_montgomery25519_p_167,32,
},
{
precomputed_nP_montgomery25519_q_168,32,
precomputed_nP_montgomery25519_n_168,32,
precomputed_nP_montgomery25519_p_168,32,
},
{
precomputed_nP_montgomery25519_q_169,32,
precomputed_nP_montgomery25519_n_169,32,
precomputed_nP_montgomery25519_p_169,32,
},
{
precomputed_nP_montgomery25519_q_170,32,
precomputed_nP_montgomery25519_n_170,32,
precomputed_nP_montgomery25519_p_170,32,
},
{
precomputed_nP_montgomery25519_q_171,32,
precomputed_nP_montgomery25519_n_171,32,
precomputed_nP_montgomery25519_p_171,32,
},
{
precomputed_nP_montgomery25519_q_172,32,
precomputed_nP_montgomery25519_n_172,32,
precomputed_nP_montgomery25519_p_172,32,
},
{
precomputed_nP_montgomery25519_q_173,32,
precomputed_nP_montgomery25519_n_173,32,
precomputed_nP_montgomery25519_p_173,32,
},
{
precomputed_nP_montgomery25519_q_174,32,
precomputed_nP_montgomery25519_n_174,32,
precomputed_nP_montgomery25519_p_174,32,
},
{
precomputed_nP_montgomery25519_q_175,32,
precomputed_nP_montgomery25519_n_175,32,
precomputed_nP_montgomery25519_p_175,32,
},
{
precomputed_nP_montgomery25519_q_176,32,
precomputed_nP_montgomery25519_n_176,32,
precomputed_nP_montgomery25519_p_176,32,
},
{
precomputed_nP_montgomery25519_q_177,32,
precomputed_nP_montgomery25519_n_177,32,
precomputed_nP_montgomery25519_p_177,32,
},
{
precomputed_nP_montgomery25519_q_178,32,
precomputed_nP_montgomery25519_n_178,32,
precomputed_nP_montgomery25519_p_178,32,
},
{
precomputed_nP_montgomery25519_q_179,32,
precomputed_nP_montgomery25519_n_179,32,
precomputed_nP_montgomery25519_p_179,32,
},
{
precomputed_nP_montgomery25519_q_180,32,
precomputed_nP_montgomery25519_n_180,32,
precomputed_nP_montgomery25519_p_180,32,
},
{
precomputed_nP_montgomery25519_q_181,32,
precomputed_nP_montgomery25519_n_181,32,
precomputed_nP_montgomery25519_p_181,32,
},
{
precomputed_nP_montgomery25519_q_182,32,
precomputed_nP_montgomery25519_n_182,32,
precomputed_nP_montgomery25519_p_182,32,
},
{
precomputed_nP_montgomery25519_q_183,32,
precomputed_nP_montgomery25519_n_183,32,
precomputed_nP_montgomery25519_p_183,32,
},
{
precomputed_nP_montgomery25519_q_184,32,
precomputed_nP_montgomery25519_n_184,32,
precomputed_nP_montgomery25519_p_184,32,
},
{
precomputed_nP_montgomery25519_q_185,32,
precomputed_nP_montgomery25519_n_185,32,
precomputed_nP_montgomery25519_p_185,32,
},
{
precomputed_nP_montgomery25519_q_186,32,
precomputed_nP_montgomery25519_n_186,32,
precomputed_nP_montgomery25519_p_186,32,
},
{
precomputed_nP_montgomery25519_q_187,32,
precomputed_nP_montgomery25519_n_187,32,
precomputed_nP_montgomery25519_p_187,32,
},
{
precomputed_nP_montgomery25519_q_188,32,
precomputed_nP_montgomery25519_n_188,32,
precomputed_nP_montgomery25519_p_188,32,
},
{
precomputed_nP_montgomery25519_q_189,32,
precomputed_nP_montgomery25519_n_189,32,
precomputed_nP_montgomery25519_p_189,32,
},
{
precomputed_nP_montgomery25519_q_190,32,
precomputed_nP_montgomery25519_n_190,32,
precomputed_nP_montgomery25519_p_190,32,
},
{
precomputed_nP_montgomery25519_q_191,32,
precomputed_nP_montgomery25519_n_191,32,
precomputed_nP_montgomery25519_p_191,32,
},
{
precomputed_nP_montgomery25519_q_192,32,
precomputed_nP_montgomery25519_n_192,32,
precomputed_nP_montgomery25519_p_192,32,
},
{
precomputed_nP_montgomery25519_q_193,32,
precomputed_nP_montgomery25519_n_193,32,
precomputed_nP_montgomery25519_p_193,32,
},
{
precomputed_nP_montgomery25519_q_194,32,
precomputed_nP_montgomery25519_n_194,32,
precomputed_nP_montgomery25519_p_194,32,
},
{
precomputed_nP_montgomery25519_q_195,32,
precomputed_nP_montgomery25519_n_195,32,
precomputed_nP_montgomery25519_p_195,32,
},
{
precomputed_nP_montgomery25519_q_196,32,
precomputed_nP_montgomery25519_n_196,32,
precomputed_nP_montgomery25519_p_196,32,
},
{
precomputed_nP_montgomery25519_q_197,32,
precomputed_nP_montgomery25519_n_197,32,
precomputed_nP_montgomery25519_p_197,32,
},
{
precomputed_nP_montgomery25519_q_198,32,
precomputed_nP_montgomery25519_n_198,32,
precomputed_nP_montgomery25519_p_198,32,
},
{
precomputed_nP_montgomery25519_q_199,32,
precomputed_nP_montgomery25519_n_199,32,
precomputed_nP_montgomery25519_p_199,32,
},
{
precomputed_nP_montgomery25519_q_200,32,
precomputed_nP_montgomery25519_n_200,32,
precomputed_nP_montgomery25519_p_200,32,
},
{
precomputed_nP_montgomery25519_q_201,32,
precomputed_nP_montgomery25519_n_201,32,
precomputed_nP_montgomery25519_p_201,32,
},
{
precomputed_nP_montgomery25519_q_202,32,
precomputed_nP_montgomery25519_n_202,32,
precomputed_nP_montgomery25519_p_202,32,
},
{
precomputed_nP_montgomery25519_q_203,32,
precomputed_nP_montgomery25519_n_203,32,
precomputed_nP_montgomery25519_p_203,32,
},
{
precomputed_nP_montgomery25519_q_204,32,
precomputed_nP_montgomery25519_n_204,32,
precomputed_nP_montgomery25519_p_204,32,
},
{
precomputed_nP_montgomery25519_q_205,32,
precomputed_nP_montgomery25519_n_205,32,
precomputed_nP_montgomery25519_p_205,32,
},
{
precomputed_nP_montgomery25519_q_206,32,
precomputed_nP_montgomery25519_n_206,32,
precomputed_nP_montgomery25519_p_206,32,
},
{
precomputed_nP_montgomery25519_q_207,32,
precomputed_nP_montgomery25519_n_207,32,
precomputed_nP_montgomery25519_p_207,32,
},
{
precomputed_nP_montgomery25519_q_208,32,
precomputed_nP_montgomery25519_n_208,32,
precomputed_nP_montgomery25519_p_208,32,
},
{
precomputed_nP_montgomery25519_q_209,32,
precomputed_nP_montgomery25519_n_209,32,
precomputed_nP_montgomery25519_p_209,32,
},
{
precomputed_nP_montgomery25519_q_210,32,
precomputed_nP_montgomery25519_n_210,32,
precomputed_nP_montgomery25519_p_210,32,
},
{
precomputed_nP_montgomery25519_q_211,32,
precomputed_nP_montgomery25519_n_211,32,
precomputed_nP_montgomery25519_p_211,32,
},
{
precomputed_nP_montgomery25519_q_212,32,
precomputed_nP_montgomery25519_n_212,32,
precomputed_nP_montgomery25519_p_212,32,
},
{
precomputed_nP_montgomery25519_q_213,32,
precomputed_nP_montgomery25519_n_213,32,
precomputed_nP_montgomery25519_p_213,32,
},
{
precomputed_nP_montgomery25519_q_214,32,
precomputed_nP_montgomery25519_n_214,32,
precomputed_nP_montgomery25519_p_214,32,
},
{
precomputed_nP_montgomery25519_q_215,32,
precomputed_nP_montgomery25519_n_215,32,
precomputed_nP_montgomery25519_p_215,32,
},
{
precomputed_nP_montgomery25519_q_216,32,
precomputed_nP_montgomery25519_n_216,32,
precomputed_nP_montgomery25519_p_216,32,
},
{
precomputed_nP_montgomery25519_q_217,32,
precomputed_nP_montgomery25519_n_217,32,
precomputed_nP_montgomery25519_p_217,32,
},
{
precomputed_nP_montgomery25519_q_218,32,
precomputed_nP_montgomery25519_n_218,32,
precomputed_nP_montgomery25519_p_218,32,
},
{
precomputed_nP_montgomery25519_q_219,32,
precomputed_nP_montgomery25519_n_219,32,
precomputed_nP_montgomery25519_p_219,32,
},
{
precomputed_nP_montgomery25519_q_220,32,
precomputed_nP_montgomery25519_n_220,32,
precomputed_nP_montgomery25519_p_220,32,
},
{
precomputed_nP_montgomery25519_q_221,32,
precomputed_nP_montgomery25519_n_221,32,
precomputed_nP_montgomery25519_p_221,32,
},
{
precomputed_nP_montgomery25519_q_222,32,
precomputed_nP_montgomery25519_n_222,32,
precomputed_nP_montgomery25519_p_222,32,
},
{
precomputed_nP_montgomery25519_q_223,32,
precomputed_nP_montgomery25519_n_223,32,
precomputed_nP_montgomery25519_p_223,32,
},
{
precomputed_nP_montgomery25519_q_224,32,
precomputed_nP_montgomery25519_n_224,32,
precomputed_nP_montgomery25519_p_224,32,
},
{
precomputed_nP_montgomery25519_q_225,32,
precomputed_nP_montgomery25519_n_225,32,
precomputed_nP_montgomery25519_p_225,32,
},
{
precomputed_nP_montgomery25519_q_226,32,
precomputed_nP_montgomery25519_n_226,32,
precomputed_nP_montgomery25519_p_226,32,
},
{
precomputed_nP_montgomery25519_q_227,32,
precomputed_nP_montgomery25519_n_227,32,
precomputed_nP_montgomery25519_p_227,32,
},
{
precomputed_nP_montgomery25519_q_228,32,
precomputed_nP_montgomery25519_n_228,32,
precomputed_nP_montgomery25519_p_228,32,
},
{
precomputed_nP_montgomery25519_q_229,32,
precomputed_nP_montgomery25519_n_229,32,
precomputed_nP_montgomery25519_p_229,32,
},
{
precomputed_nP_montgomery25519_q_230,32,
precomputed_nP_montgomery25519_n_230,32,
precomputed_nP_montgomery25519_p_230,32,
},
{
precomputed_nP_montgomery25519_q_231,32,
precomputed_nP_montgomery25519_n_231,32,
precomputed_nP_montgomery25519_p_231,32,
},
{
precomputed_nP_montgomery25519_q_232,32,
precomputed_nP_montgomery25519_n_232,32,
precomputed_nP_montgomery25519_p_232,32,
},
{
precomputed_nP_montgomery25519_q_233,32,
precomputed_nP_montgomery25519_n_233,32,
precomputed_nP_montgomery25519_p_233,32,
},
{
precomputed_nP_montgomery25519_q_234,32,
precomputed_nP_montgomery25519_n_234,32,
precomputed_nP_montgomery25519_p_234,32,
},
{
precomputed_nP_montgomery25519_q_235,32,
precomputed_nP_montgomery25519_n_235,32,
precomputed_nP_montgomery25519_p_235,32,
},
{
precomputed_nP_montgomery25519_q_236,32,
precomputed_nP_montgomery25519_n_236,32,
precomputed_nP_montgomery25519_p_236,32,
},
{
precomputed_nP_montgomery25519_q_237,32,
precomputed_nP_montgomery25519_n_237,32,
precomputed_nP_montgomery25519_p_237,32,
},
{
precomputed_nP_montgomery25519_q_238,32,
precomputed_nP_montgomery25519_n_238,32,
precomputed_nP_montgomery25519_p_238,32,
},
{
precomputed_nP_montgomery25519_q_239,32,
precomputed_nP_montgomery25519_n_239,32,
precomputed_nP_montgomery25519_p_239,32,
},
{
precomputed_nP_montgomery25519_q_240,32,
precomputed_nP_montgomery25519_n_240,32,
precomputed_nP_montgomery25519_p_240,32,
},
{
precomputed_nP_montgomery25519_q_241,32,
precomputed_nP_montgomery25519_n_241,32,
precomputed_nP_montgomery25519_p_241,32,
},
{
precomputed_nP_montgomery25519_q_242,32,
precomputed_nP_montgomery25519_n_242,32,
precomputed_nP_montgomery25519_p_242,32,
},
{
precomputed_nP_montgomery25519_q_243,32,
precomputed_nP_montgomery25519_n_243,32,
precomputed_nP_montgomery25519_p_243,32,
},
{
precomputed_nP_montgomery25519_q_244,32,
precomputed_nP_montgomery25519_n_244,32,
precomputed_nP_montgomery25519_p_244,32,
},
{
precomputed_nP_montgomery25519_q_245,32,
precomputed_nP_montgomery25519_n_245,32,
precomputed_nP_montgomery25519_p_245,32,
},
{
precomputed_nP_montgomery25519_q_246,32,
precomputed_nP_montgomery25519_n_246,32,
precomputed_nP_montgomery25519_p_246,32,
},
{
precomputed_nP_montgomery25519_q_247,32,
precomputed_nP_montgomery25519_n_247,32,
precomputed_nP_montgomery25519_p_247,32,
},
{
precomputed_nP_montgomery25519_q_248,32,
precomputed_nP_montgomery25519_n_248,32,
precomputed_nP_montgomery25519_p_248,32,
},
{
precomputed_nP_montgomery25519_q_249,32,
precomputed_nP_montgomery25519_n_249,32,
precomputed_nP_montgomery25519_p_249,32,
},
{
precomputed_nP_montgomery25519_q_250,32,
precomputed_nP_montgomery25519_n_250,32,
precomputed_nP_montgomery25519_p_250,32,
},
{
precomputed_nP_montgomery25519_q_251,32,
precomputed_nP_montgomery25519_n_251,32,
precomputed_nP_montgomery25519_p_251,32,
},
{
precomputed_nP_montgomery25519_q_252,32,
precomputed_nP_montgomery25519_n_252,32,
precomputed_nP_montgomery25519_p_252,32,
},
{
precomputed_nP_montgomery25519_q_253,32,
precomputed_nP_montgomery25519_n_253,32,
precomputed_nP_montgomery25519_p_253,32,
},
{
precomputed_nP_montgomery25519_q_254,32,
precomputed_nP_montgomery25519_n_254,32,
precomputed_nP_montgomery25519_p_254,32,
},
{
precomputed_nP_montgomery25519_q_255,32,
precomputed_nP_montgomery25519_n_255,32,
precomputed_nP_montgomery25519_p_255,32,
},
{
precomputed_nP_montgomery25519_q_256,32,
precomputed_nP_montgomery25519_n_256,32,
precomputed_nP_montgomery25519_p_256,32,
},
{
precomputed_nP_montgomery25519_q_257,32,
precomputed_nP_montgomery25519_n_257,32,
precomputed_nP_montgomery25519_p_257,32,
},
{
precomputed_nP_montgomery25519_q_258,32,
precomputed_nP_montgomery25519_n_258,32,
precomputed_nP_montgomery25519_p_258,32,
},
{
precomputed_nP_montgomery25519_q_259,32,
precomputed_nP_montgomery25519_n_259,32,
precomputed_nP_montgomery25519_p_259,32,
},
{
precomputed_nP_montgomery25519_q_260,32,
precomputed_nP_montgomery25519_n_260,32,
precomputed_nP_montgomery25519_p_260,32,
},
{
precomputed_nP_montgomery25519_q_261,32,
precomputed_nP_montgomery25519_n_261,32,
precomputed_nP_montgomery25519_p_261,32,
},
{
precomputed_nP_montgomery25519_q_262,32,
precomputed_nP_montgomery25519_n_262,32,
precomputed_nP_montgomery25519_p_262,32,
},
{
precomputed_nP_montgomery25519_q_263,32,
precomputed_nP_montgomery25519_n_263,32,
precomputed_nP_montgomery25519_p_263,32,
},
{
precomputed_nP_montgomery25519_q_264,32,
precomputed_nP_montgomery25519_n_264,32,
precomputed_nP_montgomery25519_p_264,32,
},
{
precomputed_nP_montgomery25519_q_265,32,
precomputed_nP_montgomery25519_n_265,32,
precomputed_nP_montgomery25519_p_265,32,
},
{
precomputed_nP_montgomery25519_q_266,32,
precomputed_nP_montgomery25519_n_266,32,
precomputed_nP_montgomery25519_p_266,32,
},
{
precomputed_nP_montgomery25519_q_267,32,
precomputed_nP_montgomery25519_n_267,32,
precomputed_nP_montgomery25519_p_267,32,
},
{
precomputed_nP_montgomery25519_q_268,32,
precomputed_nP_montgomery25519_n_268,32,
precomputed_nP_montgomery25519_p_268,32,
},
{
precomputed_nP_montgomery25519_q_269,32,
precomputed_nP_montgomery25519_n_269,32,
precomputed_nP_montgomery25519_p_269,32,
},
{
precomputed_nP_montgomery25519_q_270,32,
precomputed_nP_montgomery25519_n_270,32,
precomputed_nP_montgomery25519_p_270,32,
},
{
precomputed_nP_montgomery25519_q_271,32,
precomputed_nP_montgomery25519_n_271,32,
precomputed_nP_montgomery25519_p_271,32,
},
{
precomputed_nP_montgomery25519_q_272,32,
precomputed_nP_montgomery25519_n_272,32,
precomputed_nP_montgomery25519_p_272,32,
},
{
precomputed_nP_montgomery25519_q_273,32,
precomputed_nP_montgomery25519_n_273,32,
precomputed_nP_montgomery25519_p_273,32,
},
{
precomputed_nP_montgomery25519_q_274,32,
precomputed_nP_montgomery25519_n_274,32,
precomputed_nP_montgomery25519_p_274,32,
},
{
precomputed_nP_montgomery25519_q_275,32,
precomputed_nP_montgomery25519_n_275,32,
precomputed_nP_montgomery25519_p_275,32,
},
{
precomputed_nP_montgomery25519_q_276,32,
precomputed_nP_montgomery25519_n_276,32,
precomputed_nP_montgomery25519_p_276,32,
},
{
precomputed_nP_montgomery25519_q_277,32,
precomputed_nP_montgomery25519_n_277,32,
precomputed_nP_montgomery25519_p_277,32,
},
{
precomputed_nP_montgomery25519_q_278,32,
precomputed_nP_montgomery25519_n_278,32,
precomputed_nP_montgomery25519_p_278,32,
},
{
precomputed_nP_montgomery25519_q_279,32,
precomputed_nP_montgomery25519_n_279,32,
precomputed_nP_montgomery25519_p_279,32,
},
{
precomputed_nP_montgomery25519_q_280,32,
precomputed_nP_montgomery25519_n_280,32,
precomputed_nP_montgomery25519_p_280,32,
},
{
precomputed_nP_montgomery25519_q_281,32,
precomputed_nP_montgomery25519_n_281,32,
precomputed_nP_montgomery25519_p_281,32,
},
{
precomputed_nP_montgomery25519_q_282,32,
precomputed_nP_montgomery25519_n_282,32,
precomputed_nP_montgomery25519_p_282,32,
},
{
precomputed_nP_montgomery25519_q_283,32,
precomputed_nP_montgomery25519_n_283,32,
precomputed_nP_montgomery25519_p_283,32,
},
{
precomputed_nP_montgomery25519_q_284,32,
precomputed_nP_montgomery25519_n_284,32,
precomputed_nP_montgomery25519_p_284,32,
},
{
precomputed_nP_montgomery25519_q_285,32,
precomputed_nP_montgomery25519_n_285,32,
precomputed_nP_montgomery25519_p_285,32,
},
{
precomputed_nP_montgomery25519_q_286,32,
precomputed_nP_montgomery25519_n_286,32,
precomputed_nP_montgomery25519_p_286,32,
},
{
precomputed_nP_montgomery25519_q_287,32,
precomputed_nP_montgomery25519_n_287,32,
precomputed_nP_montgomery25519_p_287,32,
},
{
precomputed_nP_montgomery25519_q_288,32,
precomputed_nP_montgomery25519_n_288,32,
precomputed_nP_montgomery25519_p_288,32,
},
{
precomputed_nP_montgomery25519_q_289,32,
precomputed_nP_montgomery25519_n_289,32,
precomputed_nP_montgomery25519_p_289,32,
},
{
precomputed_nP_montgomery25519_q_290,32,
precomputed_nP_montgomery25519_n_290,32,
precomputed_nP_montgomery25519_p_290,32,
},
{
precomputed_nP_montgomery25519_q_291,32,
precomputed_nP_montgomery25519_n_291,32,
precomputed_nP_montgomery25519_p_291,32,
},
{
precomputed_nP_montgomery25519_q_292,32,
precomputed_nP_montgomery25519_n_292,32,
precomputed_nP_montgomery25519_p_292,32,
},
{
precomputed_nP_montgomery25519_q_293,32,
precomputed_nP_montgomery25519_n_293,32,
precomputed_nP_montgomery25519_p_293,32,
},
{
precomputed_nP_montgomery25519_q_294,32,
precomputed_nP_montgomery25519_n_294,32,
precomputed_nP_montgomery25519_p_294,32,
},
{
precomputed_nP_montgomery25519_q_295,32,
precomputed_nP_montgomery25519_n_295,32,
precomputed_nP_montgomery25519_p_295,32,
},
{
precomputed_nP_montgomery25519_q_296,32,
precomputed_nP_montgomery25519_n_296,32,
precomputed_nP_montgomery25519_p_296,32,
},
{
precomputed_nP_montgomery25519_q_297,32,
precomputed_nP_montgomery25519_n_297,32,
precomputed_nP_montgomery25519_p_297,32,
},
{
precomputed_nP_montgomery25519_q_298,32,
precomputed_nP_montgomery25519_n_298,32,
precomputed_nP_montgomery25519_p_298,32,
},
{
precomputed_nP_montgomery25519_q_299,32,
precomputed_nP_montgomery25519_n_299,32,
precomputed_nP_montgomery25519_p_299,32,
},
{
precomputed_nP_montgomery25519_q_300,32,
precomputed_nP_montgomery25519_n_300,32,
precomputed_nP_montgomery25519_p_300,32,
},
{
precomputed_nP_montgomery25519_q_301,32,
precomputed_nP_montgomery25519_n_301,32,
precomputed_nP_montgomery25519_p_301,32,
},
{
precomputed_nP_montgomery25519_q_302,32,
precomputed_nP_montgomery25519_n_302,32,
precomputed_nP_montgomery25519_p_302,32,
},
{
precomputed_nP_montgomery25519_q_303,32,
precomputed_nP_montgomery25519_n_303,32,
precomputed_nP_montgomery25519_p_303,32,
},
{
precomputed_nP_montgomery25519_q_304,32,
precomputed_nP_montgomery25519_n_304,32,
precomputed_nP_montgomery25519_p_304,32,
},
{
precomputed_nP_montgomery25519_q_305,32,
precomputed_nP_montgomery25519_n_305,32,
precomputed_nP_montgomery25519_p_305,32,
},
{
precomputed_nP_montgomery25519_q_306,32,
precomputed_nP_montgomery25519_n_306,32,
precomputed_nP_montgomery25519_p_306,32,
},
{
precomputed_nP_montgomery25519_q_307,32,
precomputed_nP_montgomery25519_n_307,32,
precomputed_nP_montgomery25519_p_307,32,
},
{
precomputed_nP_montgomery25519_q_308,32,
precomputed_nP_montgomery25519_n_308,32,
precomputed_nP_montgomery25519_p_308,32,
},
{
precomputed_nP_montgomery25519_q_309,32,
precomputed_nP_montgomery25519_n_309,32,
precomputed_nP_montgomery25519_p_309,32,
},
{
precomputed_nP_montgomery25519_q_310,32,
precomputed_nP_montgomery25519_n_310,32,
precomputed_nP_montgomery25519_p_310,32,
},
{
precomputed_nP_montgomery25519_q_311,32,
precomputed_nP_montgomery25519_n_311,32,
precomputed_nP_montgomery25519_p_311,32,
},
{
precomputed_nP_montgomery25519_q_312,32,
precomputed_nP_montgomery25519_n_312,32,
precomputed_nP_montgomery25519_p_312,32,
},
{
precomputed_nP_montgomery25519_q_313,32,
precomputed_nP_montgomery25519_n_313,32,
precomputed_nP_montgomery25519_p_313,32,
},
{
precomputed_nP_montgomery25519_q_314,32,
precomputed_nP_montgomery25519_n_314,32,
precomputed_nP_montgomery25519_p_314,32,
},
{
precomputed_nP_montgomery25519_q_315,32,
precomputed_nP_montgomery25519_n_315,32,
precomputed_nP_montgomery25519_p_315,32,
},
{
precomputed_nP_montgomery25519_q_316,32,
precomputed_nP_montgomery25519_n_316,32,
precomputed_nP_montgomery25519_p_316,32,
},
{
precomputed_nP_montgomery25519_q_317,32,
precomputed_nP_montgomery25519_n_317,32,
precomputed_nP_montgomery25519_p_317,32,
},
{
precomputed_nP_montgomery25519_q_318,32,
precomputed_nP_montgomery25519_n_318,32,
precomputed_nP_montgomery25519_p_318,32,
},
{
precomputed_nP_montgomery25519_q_319,32,
precomputed_nP_montgomery25519_n_319,32,
precomputed_nP_montgomery25519_p_319,32,
},
{
precomputed_nP_montgomery25519_q_320,32,
precomputed_nP_montgomery25519_n_320,32,
precomputed_nP_montgomery25519_p_320,32,
},
{
precomputed_nP_montgomery25519_q_321,32,
precomputed_nP_montgomery25519_n_321,32,
precomputed_nP_montgomery25519_p_321,32,
},
{
precomputed_nP_montgomery25519_q_322,32,
precomputed_nP_montgomery25519_n_322,32,
precomputed_nP_montgomery25519_p_322,32,
},
{
precomputed_nP_montgomery25519_q_323,32,
precomputed_nP_montgomery25519_n_323,32,
precomputed_nP_montgomery25519_p_323,32,
},
{
precomputed_nP_montgomery25519_q_324,32,
precomputed_nP_montgomery25519_n_324,32,
precomputed_nP_montgomery25519_p_324,32,
},
{
precomputed_nP_montgomery25519_q_325,32,
precomputed_nP_montgomery25519_n_325,32,
precomputed_nP_montgomery25519_p_325,32,
},
{
precomputed_nP_montgomery25519_q_326,32,
precomputed_nP_montgomery25519_n_326,32,
precomputed_nP_montgomery25519_p_326,32,
},
{
precomputed_nP_montgomery25519_q_327,32,
precomputed_nP_montgomery25519_n_327,32,
precomputed_nP_montgomery25519_p_327,32,
},
{
precomputed_nP_montgomery25519_q_328,32,
precomputed_nP_montgomery25519_n_328,32,
precomputed_nP_montgomery25519_p_328,32,
},
{
precomputed_nP_montgomery25519_q_329,32,
precomputed_nP_montgomery25519_n_329,32,
precomputed_nP_montgomery25519_p_329,32,
},
{
precomputed_nP_montgomery25519_q_330,32,
precomputed_nP_montgomery25519_n_330,32,
precomputed_nP_montgomery25519_p_330,32,
},
{
precomputed_nP_montgomery25519_q_331,32,
precomputed_nP_montgomery25519_n_331,32,
precomputed_nP_montgomery25519_p_331,32,
},
{
precomputed_nP_montgomery25519_q_332,32,
precomputed_nP_montgomery25519_n_332,32,
precomputed_nP_montgomery25519_p_332,32,
},
{
precomputed_nP_montgomery25519_q_333,32,
precomputed_nP_montgomery25519_n_333,32,
precomputed_nP_montgomery25519_p_333,32,
},
{
precomputed_nP_montgomery25519_q_334,32,
precomputed_nP_montgomery25519_n_334,32,
precomputed_nP_montgomery25519_p_334,32,
},
{
precomputed_nP_montgomery25519_q_335,32,
precomputed_nP_montgomery25519_n_335,32,
precomputed_nP_montgomery25519_p_335,32,
},
{
precomputed_nP_montgomery25519_q_336,32,
precomputed_nP_montgomery25519_n_336,32,
precomputed_nP_montgomery25519_p_336,32,
},
{
precomputed_nP_montgomery25519_q_337,32,
precomputed_nP_montgomery25519_n_337,32,
precomputed_nP_montgomery25519_p_337,32,
},
{
precomputed_nP_montgomery25519_q_338,32,
precomputed_nP_montgomery25519_n_338,32,
precomputed_nP_montgomery25519_p_338,32,
},
{
precomputed_nP_montgomery25519_q_339,32,
precomputed_nP_montgomery25519_n_339,32,
precomputed_nP_montgomery25519_p_339,32,
},
{
precomputed_nP_montgomery25519_q_340,32,
precomputed_nP_montgomery25519_n_340,32,
precomputed_nP_montgomery25519_p_340,32,
},
{
precomputed_nP_montgomery25519_q_341,32,
precomputed_nP_montgomery25519_n_341,32,
precomputed_nP_montgomery25519_p_341,32,
},
{
precomputed_nP_montgomery25519_q_342,32,
precomputed_nP_montgomery25519_n_342,32,
precomputed_nP_montgomery25519_p_342,32,
},
{
precomputed_nP_montgomery25519_q_343,32,
precomputed_nP_montgomery25519_n_343,32,
precomputed_nP_montgomery25519_p_343,32,
},
{
precomputed_nP_montgomery25519_q_344,32,
precomputed_nP_montgomery25519_n_344,32,
precomputed_nP_montgomery25519_p_344,32,
},
{
precomputed_nP_montgomery25519_q_345,32,
precomputed_nP_montgomery25519_n_345,32,
precomputed_nP_montgomery25519_p_345,32,
},
{
precomputed_nP_montgomery25519_q_346,32,
precomputed_nP_montgomery25519_n_346,32,
precomputed_nP_montgomery25519_p_346,32,
},
{
precomputed_nP_montgomery25519_q_347,32,
precomputed_nP_montgomery25519_n_347,32,
precomputed_nP_montgomery25519_p_347,32,
},
{
precomputed_nP_montgomery25519_q_348,32,
precomputed_nP_montgomery25519_n_348,32,
precomputed_nP_montgomery25519_p_348,32,
},
{
precomputed_nP_montgomery25519_q_349,32,
precomputed_nP_montgomery25519_n_349,32,
precomputed_nP_montgomery25519_p_349,32,
},
{
precomputed_nP_montgomery25519_q_350,32,
precomputed_nP_montgomery25519_n_350,32,
precomputed_nP_montgomery25519_p_350,32,
},
{
precomputed_nP_montgomery25519_q_351,32,
precomputed_nP_montgomery25519_n_351,32,
precomputed_nP_montgomery25519_p_351,32,
},
{
precomputed_nP_montgomery25519_q_352,32,
precomputed_nP_montgomery25519_n_352,32,
precomputed_nP_montgomery25519_p_352,32,
},
{
precomputed_nP_montgomery25519_q_353,32,
precomputed_nP_montgomery25519_n_353,32,
precomputed_nP_montgomery25519_p_353,32,
},
{
precomputed_nP_montgomery25519_q_354,32,
precomputed_nP_montgomery25519_n_354,32,
precomputed_nP_montgomery25519_p_354,32,
},
{
precomputed_nP_montgomery25519_q_355,32,
precomputed_nP_montgomery25519_n_355,32,
precomputed_nP_montgomery25519_p_355,32,
},
{
precomputed_nP_montgomery25519_q_356,32,
precomputed_nP_montgomery25519_n_356,32,
precomputed_nP_montgomery25519_p_356,32,
},
{
precomputed_nP_montgomery25519_q_357,32,
precomputed_nP_montgomery25519_n_357,32,
precomputed_nP_montgomery25519_p_357,32,
},
{
precomputed_nP_montgomery25519_q_358,32,
precomputed_nP_montgomery25519_n_358,32,
precomputed_nP_montgomery25519_p_358,32,
},
{
precomputed_nP_montgomery25519_q_359,32,
precomputed_nP_montgomery25519_n_359,32,
precomputed_nP_montgomery25519_p_359,32,
},
{
precomputed_nP_montgomery25519_q_360,32,
precomputed_nP_montgomery25519_n_360,32,
precomputed_nP_montgomery25519_p_360,32,
},
{
precomputed_nP_montgomery25519_q_361,32,
precomputed_nP_montgomery25519_n_361,32,
precomputed_nP_montgomery25519_p_361,32,
},
{
precomputed_nP_montgomery25519_q_362,32,
precomputed_nP_montgomery25519_n_362,32,
precomputed_nP_montgomery25519_p_362,32,
},
{
precomputed_nP_montgomery25519_q_363,32,
precomputed_nP_montgomery25519_n_363,32,
precomputed_nP_montgomery25519_p_363,32,
},
{
precomputed_nP_montgomery25519_q_364,32,
precomputed_nP_montgomery25519_n_364,32,
precomputed_nP_montgomery25519_p_364,32,
},
{
precomputed_nP_montgomery25519_q_365,32,
precomputed_nP_montgomery25519_n_365,32,
precomputed_nP_montgomery25519_p_365,32,
},
{
precomputed_nP_montgomery25519_q_366,32,
precomputed_nP_montgomery25519_n_366,32,
precomputed_nP_montgomery25519_p_366,32,
},
{
precomputed_nP_montgomery25519_q_367,32,
precomputed_nP_montgomery25519_n_367,32,
precomputed_nP_montgomery25519_p_367,32,
},
{
precomputed_nP_montgomery25519_q_368,32,
precomputed_nP_montgomery25519_n_368,32,
precomputed_nP_montgomery25519_p_368,32,
},
{
precomputed_nP_montgomery25519_q_369,32,
precomputed_nP_montgomery25519_n_369,32,
precomputed_nP_montgomery25519_p_369,32,
},
{
precomputed_nP_montgomery25519_q_370,32,
precomputed_nP_montgomery25519_n_370,32,
precomputed_nP_montgomery25519_p_370,32,
},
{
precomputed_nP_montgomery25519_q_371,32,
precomputed_nP_montgomery25519_n_371,32,
precomputed_nP_montgomery25519_p_371,32,
},
} ;
static void test_nP_montgomery25519_impl(long long impl)
{
unsigned char *q = test_nP_montgomery25519_q;
unsigned char *n = test_nP_montgomery25519_n;
unsigned char *p = test_nP_montgomery25519_p;
unsigned char *q2 = test_nP_montgomery25519_q2;
unsigned char *n2 = test_nP_montgomery25519_n2;
unsigned char *p2 = test_nP_montgomery25519_p2;
long long qlen = crypto_nP_POINTBYTES;
long long nlen = crypto_nP_SCALARBYTES;
long long plen = crypto_nP_POINTBYTES;
if (targeti && strcmp(targeti,".") && strcmp(targeti,lib25519_dispatch_nP_montgomery25519_implementation(impl))) return;
if (targetn && atol(targetn) != impl) return;
if (impl >= 0) {
crypto_nP = lib25519_dispatch_nP_montgomery25519(impl);
printf("nP_montgomery25519 %lld implementation %s compiler %s\n",impl,lib25519_dispatch_nP_montgomery25519_implementation(impl),lib25519_dispatch_nP_montgomery25519_compiler(impl));
} else {
crypto_nP = lib25519_nP_montgomery25519;
printf("nP_montgomery25519 selected implementation %s compiler %s\n",lib25519_nP_montgomery25519_implementation(),lib25519_nP_montgomery25519_compiler());
}
for (long long checksumbig = 0;checksumbig < 2;++checksumbig) {
long long loops = checksumbig ? 512 : 64;
checksum_clear();
for (long long loop = 0;loop < loops;++loop) {
output_prepare(q2,q,qlen);
input_prepare(n2,n,nlen);
input_prepare(p2,p,plen);
secret(n,nlen);
secret(p,plen);
crypto_nP(q,n,p);
public(n,nlen);
public(p,plen);
public(q,qlen);
checksum(q,qlen);
output_compare(q2,q,qlen,"crypto_nP");
input_compare(n2,n,nlen,"crypto_nP");
input_compare(p2,p,plen,"crypto_nP");
double_canary(q2,q,qlen);
double_canary(n2,n,nlen);
double_canary(p2,p,plen);
secret(n2,nlen);
secret(p2,plen);
crypto_nP(q2,n2,p2);
public(n2,nlen);
public(p2,plen);
public(q2,qlen);
if (memcmp(q2,q,qlen) != 0) fail("failure: crypto_nP is nondeterministic\n");
double_canary(q2,q,qlen);
double_canary(n2,n,nlen);
double_canary(p2,p,plen);
secret(n2,nlen);
secret(p,plen);
crypto_nP(n2,n2,p);
public(n2,qlen);
public(p,plen);
if (memcmp(n2,q,qlen) != 0) fail("failure: crypto_nP does not handle n=q overlap\n");
memcpy(n2,n,nlen);
secret(n,nlen);
secret(p2,plen);
crypto_nP(p2,n,p2);
public(p2,qlen);
public(n,nlen);
if (memcmp(p2,q,qlen) != 0) fail("failure: crypto_nP does not handle p=q overlap\n");
memcpy(p2,p,plen);
}
checksum_expected(nP_montgomery25519_checksums[checksumbig]);
}
for (long long precomp = 0;precomp < precomputed_nP_montgomery25519_NUM;++precomp) {
output_prepare(q2,q,precomputed_nP_montgomery25519[precomp].qsize);
input_prepare(n2,n,precomputed_nP_montgomery25519[precomp].nsize);
memcpy(n,precomputed_nP_montgomery25519[precomp].n,precomputed_nP_montgomery25519[precomp].nsize);
memcpy(n2,precomputed_nP_montgomery25519[precomp].n,precomputed_nP_montgomery25519[precomp].nsize);
input_prepare(p2,p,precomputed_nP_montgomery25519[precomp].psize);
memcpy(p,precomputed_nP_montgomery25519[precomp].p,precomputed_nP_montgomery25519[precomp].psize);
memcpy(p2,precomputed_nP_montgomery25519[precomp].p,precomputed_nP_montgomery25519[precomp].psize);
crypto_nP(q,n,p);
if (memcmp(q,precomputed_nP_montgomery25519[precomp].q,precomputed_nP_montgomery25519[precomp].qsize)) {
fail("failure: crypto_nP fails precomputed test vectors\n");
printf("expected q: ");
for (long long pos = 0;pos < precomputed_nP_montgomery25519[precomp].qsize;++pos) printf("%02x",precomputed_nP_montgomery25519[precomp].q[pos]);
printf("\n");
printf("received q: ");
for (long long pos = 0;pos < precomputed_nP_montgomery25519[precomp].qsize;++pos) printf("%02x",q[pos]);
printf("\n");
}
output_compare(q2,q,precomputed_nP_montgomery25519[precomp].qsize,"crypto_nP");
input_compare(n2,n,precomputed_nP_montgomery25519[precomp].nsize,"crypto_nP");
input_compare(p2,p,precomputed_nP_montgomery25519[precomp].psize,"crypto_nP");
}
}
void test_nP_montgomery25519(void)
{
long long maxalloc = 0;
if (targeto && strcmp(targeto,"nP")) return;
if (targetp && strcmp(targetp,"montgomery25519")) return;
storage_nP_montgomery25519_q = callocplus(crypto_nP_POINTBYTES);
test_nP_montgomery25519_q = aligned(storage_nP_montgomery25519_q,crypto_nP_POINTBYTES);
if (crypto_nP_POINTBYTES > maxalloc) maxalloc = crypto_nP_POINTBYTES;
storage_nP_montgomery25519_n = callocplus(crypto_nP_SCALARBYTES+crypto_nP_POINTBYTES);
test_nP_montgomery25519_n = aligned(storage_nP_montgomery25519_n,crypto_nP_SCALARBYTES+crypto_nP_POINTBYTES);
if (crypto_nP_SCALARBYTES+crypto_nP_POINTBYTES > maxalloc) maxalloc = crypto_nP_SCALARBYTES+crypto_nP_POINTBYTES;
storage_nP_montgomery25519_p = callocplus(crypto_nP_POINTBYTES);
test_nP_montgomery25519_p = aligned(storage_nP_montgomery25519_p,crypto_nP_POINTBYTES);
if (crypto_nP_POINTBYTES > maxalloc) maxalloc = crypto_nP_POINTBYTES;
storage_nP_montgomery25519_q2 = callocplus(maxalloc);
test_nP_montgomery25519_q2 = aligned(storage_nP_montgomery25519_q2,crypto_nP_POINTBYTES);
storage_nP_montgomery25519_n2 = callocplus(maxalloc);
test_nP_montgomery25519_n2 = aligned(storage_nP_montgomery25519_n2,crypto_nP_SCALARBYTES+crypto_nP_POINTBYTES);
storage_nP_montgomery25519_p2 = callocplus(maxalloc);
test_nP_montgomery25519_p2 = aligned(storage_nP_montgomery25519_p2,crypto_nP_POINTBYTES);
for (long long offset = 0;offset < 2;++offset) {
if (targetoffset && atol(targetoffset) != offset) continue;
if (offset && valgrind) break;
printf("nP_montgomery25519 offset %lld\n",offset);
for (long long impl = -1;impl < lib25519_numimpl_nP_montgomery25519();++impl)
forked(test_nP_montgomery25519_impl,impl);
++test_nP_montgomery25519_q;
++test_nP_montgomery25519_n;
++test_nP_montgomery25519_p;
++test_nP_montgomery25519_q2;
++test_nP_montgomery25519_n2;
++test_nP_montgomery25519_p2;
}
free(storage_nP_montgomery25519_p2);
free(storage_nP_montgomery25519_n2);
free(storage_nP_montgomery25519_q2);
free(storage_nP_montgomery25519_p);
free(storage_nP_montgomery25519_n);
free(storage_nP_montgomery25519_q);
}
#undef crypto_nP_SCALARBYTES
#undef crypto_nP_POINTBYTES