Merge pull request #9580 from SparkiDev/curve25519_smul_improv

Curve25519 improvements
This commit is contained in:
David Garske
2026-01-07 08:25:41 -08:00
committed by GitHub
9 changed files with 3102 additions and 1745 deletions

View File

@@ -10317,6 +10317,12 @@ then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_CURVE25519_USE_ED25519"
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_CURVE25519_USE_ED25519"
fi
if test "$ENABLED_CURVE25519" = "not-ed"
then
AM_CFLAGS="$AM_CFLAGS -DWOLFSSL_CURVE25519_NOT_USE_ED25519"
AM_CCASFLAGS="$AM_CCASFLAGS -DWOLFSSL_CURVE25519_NOT_USE_ED25519"
fi
AM_CFLAGS="$AM_CFLAGS -DHAVE_CURVE25519"
AM_CCASFLAGS="$AM_CCASFLAGS -DHAVE_CURVE25519"

View File

@@ -75,8 +75,9 @@ const curve25519_set_type curve25519_sets[] = {
}
};
#if !defined(WOLFSSL_CURVE25519_USE_ED25519) || \
defined(WOLFSSL_CURVE25519_BLINDING)
#if (!defined(WOLFSSL_CURVE25519_USE_ED25519) && \
!(defined(CURVED25519_X64) || (defined(WOLFSSL_ARMASM) && \
defined(__aarch64__)))) || defined(WOLFSSL_CURVE25519_BLINDING)
static const word32 kCurve25519BasePoint[CURVE25519_KEYSIZE/sizeof(word32)] = {
#ifdef BIG_ENDIAN_ORDER
0x09000000

View File

@@ -822,7 +822,7 @@ static int ed25519_verify_msg_final_with_sha(const byte* sig, word32 sigLen,
if (ret != 0)
return ret;
ge_tobytes(rcheck, &R);
ge_tobytes_nct(rcheck, &R);
#endif /* FREESCALE_LTC_ECC */
/* comparison of R created to R in sig */

File diff suppressed because it is too large Load Diff

View File

@@ -9175,24 +9175,25 @@ void ge_scalarmult_base(ge_p3 *h,const unsigned char *a)
#define SLIDE_SIZE 256
/* ge double scalar mult */
static void slide(signed char *r,const unsigned char *a)
static void slide(signed char *r,const unsigned char *a, int max)
{
int i;
int b;
int k;
for (i = 0;i < SLIDE_SIZE;++i)
for (i = 0;i < SLIDE_SIZE;++i) {
r[i] = 1 & (a[i >> 3] >> (i & 7));
}
for (i = 0;i < SLIDE_SIZE;++i)
for (i = 0;i < SLIDE_SIZE;++i) {
if (r[i]) {
for (b = 1;b <= 6 && i + b < SLIDE_SIZE;++b) {
if (r[i + b]) {
signed char rb = (signed char)((unsigned char)r[i + b] << b);
if (r[i] + rb <= 15) {
if (r[i] + rb <= max) {
r[i] = (signed char)(r[i] + rb);
r[i + b] = 0;
} else if (r[i] - rb >= -15) {
} else if (r[i] - rb >= -max) {
r[i] = (signed char)(r[i] - rb);
for (k = i + b;k < SLIDE_SIZE;++k) {
if (!r[k]) {
@@ -9206,180 +9207,470 @@ static void slide(signed char *r,const unsigned char *a)
}
}
}
}
}
/* Generated using command: ruby ../scripts/x25519/ed25519.rb */
#ifdef CURVED25519_ASM_64BIT
static const ge_precomp Bi[8] = {
static const ge_precomp Bi[32] = {
{
{ 0x2fbc93c6f58c3b85, -0x306cd2390473f1e7, 0x270b4898643d42c2, 0x07cf9d3a33d4ba65, },
{ -0x62efc6fa28bf6ec2, -0x02c660fa2ebf414d, -0x5a3e7bcb977075f7, 0x44fd2f9298f81267, },
{ -0x5436edfa78855598, 0x26d9e823ccaac49e, 0x5a1b7dcbdd43598c, 0x6f117b689f0c65a8, },
{ 0x2fbc93c6f58c3b85, -0x306cd2390473f1e7, 0x270b4898643d42c2,
0x07cf9d3a33d4ba65 },
{ -0x62efc6fa28bf6ec2, -0x02c660fa2ebf414d, -0x5a3e7bcb977075f7,
0x44fd2f9298f81267 },
{ -0x5436edfa78855598, 0x26d9e823ccaac49e, 0x5a1b7dcbdd43598c,
0x6f117b689f0c65a8 },
},
{
{ -0x50da4f57b31168d0, 0x025a8430e8864b8a, -0x3ee4affd60fe98ce, 0x7a164e1b9a80f8f4, },
{ 0x56611fe8a4fcd265, 0x3bd353fde5c1ba7d, -0x7ece0ce5deb42943, 0x2ab91587555bda62, },
{ 0x14ae933f0dd0d889, 0x589423221c35da62, -0x2e8f1aba730d24b4, 0x5a2826af12b9b4c6, },
{ -0x50da4f57b31168d0, 0x025a8430e8864b8a, -0x3ee4affd60fe98ce,
0x7a164e1b9a80f8f4 },
{ 0x56611fe8a4fcd265, 0x3bd353fde5c1ba7d, -0x7ece0ce5deb42943,
0x2ab91587555bda62 },
{ 0x14ae933f0dd0d889, 0x589423221c35da62, -0x2e8f1aba730d24b4,
0x5a2826af12b9b4c6 },
},
{
{ -0x5ded43bbf75a44cd, -0x72afb73c38a112fe, -0x22e414f3a54013bc, 0x2945ccf146e206eb, },
{ 0x7f9182c3a447d6ba, -0x2affeb2eb4d8d649, -0x1cc30ee3479b5f79, 0x154a7e73eb1b55f3, },
{ -0x4344240e7ed57d7b, 0x270e0807d0bdd1fc, -0x4be498f4e44258d3, 0x43aabe696b3bb69a, },
{ -0x5ded43bbf75a44cd, -0x72afb73c38a112fe, -0x22e414f3a54013bc,
0x2945ccf146e206eb },
{ 0x7f9182c3a447d6ba, -0x2affeb2eb4d8d649, -0x1cc30ee3479b5f79,
0x154a7e73eb1b55f3 },
{ -0x4344240e7ed57d7b, 0x270e0807d0bdd1fc, -0x4be498f4e44258d3,
0x43aabe696b3bb69a },
},
{
{ 0x6b1a5cd0944ea3bf, 0x7470353ab39dc0d2, 0x71b2528228542e49, 0x461bea69283c927e, },
{ -0x4590d36555cdde4f, 0x6ca021533bba23a7, -0x621589b06de6d3c6, 0x1d6edd5d2e5317e0, },
{ -0x0e7c9237fe474c5e, -0x4cfca0b8fac15b66, 0x529c41ba5877adf3, 0x7a9fbb1c6a0f90a7, },
{ 0x6b1a5cd0944ea3bf, 0x7470353ab39dc0d2, 0x71b2528228542e49,
0x461bea69283c927e },
{ -0x4590d36555cdde4f, 0x6ca021533bba23a7, -0x621589b06de6d3c6,
0x1d6edd5d2e5317e0 },
{ -0x0e7c9237fe474c5e, -0x4cfca0b8fac15b66, 0x529c41ba5877adf3,
0x7a9fbb1c6a0f90a7 },
},
{
{ -0x64d1987559579cd1, -0x59af6190ae43b93b, -0x314dcc3639790a4b, 0x34b9ed338add7f59, },
{ -0x0c91de81fc627f9c, -0x675f7e490adfbe65, -0x693439f718a14fbc, 0x49c05a51fadc9c8f, },
{ 0x06b4e8bf9045af1b, -0x1d007c1758e62dd1, -0x550903d66c2b30ea, 0x73c172021b008b06, },
{ -0x64d1987559579cd1, -0x59af6190ae43b93b, -0x314dcc3639790a4b,
0x34b9ed338add7f59 },
{ -0x0c91de81fc627f9c, -0x675f7e490adfbe65, -0x693439f718a14fbc,
0x49c05a51fadc9c8f },
{ 0x06b4e8bf9045af1b, -0x1d007c1758e62dd1, -0x550903d66c2b30ea,
0x73c172021b008b06 },
},
{
{ 0x2fbf00848a802ade, -0x1a260130fdcfd1d9, 0x113e847117703406, 0x4275aae2546d8faf, },
{ 0x315f5b0249864348, 0x3ed6b36977088381, -0x5c5f8aaa9572146b, 0x18ab598029d5c77f, },
{ -0x27d4d33a029f7617, 0x031eb4a13282e4a4, 0x44311199b51a8622, 0x3dc65522b53df948, },
{ 0x2fbf00848a802ade, -0x1a260130fdcfd1d9, 0x113e847117703406,
0x4275aae2546d8faf },
{ 0x315f5b0249864348, 0x3ed6b36977088381, -0x5c5f8aaa9572146b,
0x18ab598029d5c77f },
{ -0x27d4d33a029f7617, 0x031eb4a13282e4a4, 0x44311199b51a8622,
0x3dc65522b53df948 },
},
{
{ -0x408f3ddd5dff8093, -0x407b4c654a432125, 0x537a0e12fb07ba07, 0x234fd7eec346f241, },
{ 0x506f013b327fbf93, -0x5103143664889095, -0x62ed4dcd5552a698, 0x0267882d176024a7, },
{ 0x5360a119732ea378, 0x2437e6b1df8dd471, -0x5d10c8076e581acd, 0x497ba6fdaa097863, },
{ -0x408f3ddd5dff8093, -0x407b4c654a432125, 0x537a0e12fb07ba07,
0x234fd7eec346f241 },
{ 0x506f013b327fbf93, -0x5103143664889095, -0x62ed4dcd5552a698,
0x0267882d176024a7 },
{ 0x5360a119732ea378, 0x2437e6b1df8dd471, -0x5d10c8076e581acd,
0x497ba6fdaa097863 },
},
{
{ 0x24cecc0313cfeaa0, -0x79b73d72e763db93, 0x2dbdbdfac1f2d4d0, 0x61e22917f12de72b, },
{ 0x040bcd86468ccf0b, -0x2c7d645bd566ef2a, 0x7508300807b25192, 0x43b5cd4218d05ebf, },
{ 0x5d9a762f9bd0b516, -0x14c750b1c8c02112, 0x032e5a7d93d64270, 0x511d61210ae4d842, },
{ 0x24cecc0313cfeaa0, -0x79b73d72e763db93, 0x2dbdbdfac1f2d4d0,
0x61e22917f12de72b },
{ 0x040bcd86468ccf0b, -0x2c7d645bd566ef2a, 0x7508300807b25192,
0x43b5cd4218d05ebf },
{ 0x5d9a762f9bd0b516, -0x14c750b1c8c02112, 0x032e5a7d93d64270,
0x511d61210ae4d842 },
},
{
{ -0x6d3989106af1627f, -0x5ab9df323f28fbb1, -0x5564c99b9070edb8,
0x6d325924ddb855e3 },
{ 0x081386484420de87, -0x75e30fe94a6d124c, 0x39fa4e2729942d25,
0x71a7fe6fe2482810 },
{ 0x6c7182b8a5c8c854, 0x33fd1479fe5f2a03, 0x72cf591883778d0c,
0x4746c4b6559eeaa9 },
},
{
{ -0x2c8884c3923965d5, -0x21054dd8907609e9, 0x45651cf7b53a16b5,
0x5c9a51de34fe9fb7 },
{ 0x348546c864741147, 0x7d35aedd0efcc849, -0x006c6589f98d5cce,
0x219663497db5e6d6 },
{ -0x0aef0e30860ef199, -0x0022255e19a7aea5, 0x09c3a71710142277,
0x4804503c608223bb },
},
{
{ -0x3bdb612fd35c8039, -0x5fa65f1c59ea5355, -0x775691283691f1dd,
0x553398a51650696d },
{ 0x3b6821d23a36d175, -0x444bf558166461ce, 0x5d9e5ce420838a47,
0x771e098858de4c5e },
{ -0x65ed0a2d87bae121, 0x3ada5d7985899ccb, 0x477f4a2d9fa59508,
0x5a5ed1d68ff5a611 },
},
{
{ 0x1195122afe150e83, -0x30df65da81b4ca28, 0x7387f8291e711e20,
0x44acb897d8bf92f0 },
{ -0x451a1f3aa7ad8ca7, 0x392e5c19cadb9d7e, 0x28653c1eda1cabe9,
0x019b60135fefdc44 },
{ 0x1e6068145e134b83, -0x3b0a19b0dbcfb3ea, 0x506e88a8fc1a3ed7,
0x150c49fde6ad2f92 },
},
{
{ -0x71840d6af6b8eec8, 0x5d6fef394f75a651, 0x10af79c425a708ad,
0x6b2b5a075bb99922 },
{ -0x47b679c363235798, -0x37c0bb24478eb530, -0x01c11ca9f3c9e973,
0x78a6d7791e05fbc1 },
{ 0x58bf704b47a0b976, -0x59fe4caa8be8b72b, -0x55d4e04e2abd0a70,
0x725c7ffc4ad55d00 },
},
{
{ -0x1bbd98ea2e30664e, 0x7352d51102a20d34, 0x23d1157b8b12109f,
0x794cc9277cb1f3a3 },
{ -0x6e7fd408e32f6740, -0x01be935b12a19c9a, -0x20a7a28eb6fd66b4,
0x4cd54625f855fae7 },
{ 0x4af6c426c2ac5053, -0x43651252cd098da8, 0x2ad032f10a311021,
0x7008357b6fcc8e85 },
},
{
{ 0x0b88672738773f01, -0x473337056a043305, -0x72d22a5c4652d64a,
0x06ef7e9851ad0f6a },
{ -0x2fe460447da7b5cc, 0x47ab6463d2b4792b, -0x49ce9c63b7ac9dfe,
0x13a92a3669d6d428 },
{ -0x356c88e33fa8821b, 0x7540e41e5035dc5c, 0x24680f01d802e071,
0x3c296ddf8a2af86a },
},
{
{ -0x5152ea0626eb58ed, -0x56d08406737006ee, -0x5007dce860ac28d0,
0x7a99d393490c77ba },
{ -0x0314b2d144e0dabf, -0x476aef38bf5246e1, -0x038e5c822f5e52fb,
0x0a892c700747717b },
{ -0x70ad12dbc9425c18, 0x77a8c84157e80794, -0x5a569a9cd9d06320,
0x286762d28302f7d2 },
},
{
{ 0x4e7836093ce35b25, -0x7d1ee7e24d945569, 0x0cc192d3cbc7b83f,
0x32f1da046a9d9d3a },
{ 0x7c558e2bce2ef5bd, -0x1b67934b98b8439d, 0x154a179f3bbb89b8,
0x7686f2a3d6f1767a },
{ -0x5572ed5992a68396, -0x70ee6cfcfb2c7ad5, 0x3f91dc73c209b022,
0x561305f8a9ad28a6 },
},
{
{ 0x100c978dec92aed1, -0x35bc2abcb2928c1b, -0x7cece4dd27b845b8,
0x00aaec53e35d4d2c },
{ 0x6722cc28e7b0c0d5, 0x709de9bbdb075c53, -0x3509725828fef59f,
0x030a1aef2c57cc6c },
{ 0x7bb1f773003ad2aa, 0x0b3f29802b216608, 0x7821dc86520ed23e,
0x20be9c1c24065480 },
},
{
{ -0x1eac7827db698c5a, 0x5943bc2df546e493, 0x1c7f9a81c36f63b5,
0x750ab3361f0ac1de },
{ 0x20e0e44ae2025e60, -0x4fc4c4d0342346c8, 0x105d639cf95a0d1c,
0x69764c545067e311 },
{ 0x1e8a3283a2f81037, 0x6f2eda23bd7fcbf1, -0x48d02ea453d1da9d,
0x54f96b3fb7075040 },
},
{
{ 0x0fadf20429669279, 0x3adda2047d7d724a, 0x6f3d94828c5760f1,
0x3d7fe9c52bb7539e },
{ 0x177dafc616b11ecd, -0x7689b46305a89b87, -0x48575eef1913187b,
0x78e6839fbe85dbf0 },
{ 0x70332df737b8856b, 0x75d05d43041a178a, 0x320ff74aa0e59e22,
0x70f268f350088242 },
},
{
{ 0x66864583b1805f47, -0x0aca3a2e9f2283e7, -0x1678b148e1b34ffa,
0x7c0d345cfad889d9 },
{ 0x2324112070dcf355, 0x380cc97ee7fce117, -0x4ce22112caad4968,
0x404e56c039b8c4b9 },
{ 0x591f1f4b8c78338a, -0x5fc9954e981f4a1f, 0x5cbc4152b45f3d44,
0x20d754762aaec777 },
},
{
{ 0x5e8fc36fc73bb758, -0x531abc5ac9c34466, -0x566cb5826fc436de,
0x2b8f1e46f3ceec62 },
{ -0x628b014eca460abd, -0x7b4c820e21736a94, -0x16cdd4f8a8ec7457,
0x38b8ada8790b4ce1 },
{ -0x4a3fb56320ae06a3, 0x2b3952aecb1fdeac, 0x1d106d8b328b66da,
0x049aeb32ceba1953 },
},
{
{ -0x55af82f48a0386cf, 0x0fef924b7a6725d3, 0x1d82542b396b3930,
0x795ee17530f674fc },
{ -0x288982c39c230182, 0x209c594897856e40, -0x4998979e1eb083ed,
0x51c665e0c8d625fc },
{ 0x254a5b0a52ecbd81, 0x5d411f6ee034afe7, -0x195db2f23511b5cf,
0x6cd19bf49dc54477 },
},
{
{ 0x1ffe612165afc386, 0x082a2a88b8d51b10, 0x76f6627e20990baa,
0x5e01b3a7429e43e7 },
{ 0x7e87619052179ca3, 0x571d0a060b2c9f85, -0x7f5d45577b668ee2,
0x7520f3db40b2e638 },
{ 0x3db50be3d39357a1, -0x69849322a6616b5b, 0x1a309a64df311e6e,
0x71092c9ccef3c986 },
},
{
{ -0x7a9427538bfae231, 0x03f6a40855b7aa1e, 0x3a4ae7cbc9743ceb,
0x4173a5bb7137abde },
{ 0x53d8523f0364918c, -0x5d4bfb0bc05494e4, 0x080b4a9e6681e5a4,
0x0ea15b03d0257ba7 },
{ 0x17c56e31f0f9218a, 0x5a696e2b1afc4708, -0x086ce9970b4d0e8a,
0x5fc565614a4e3a67 },
},
{
{ 0x4892e1e67790988e, 0x01d5950f1c5cd722, -0x1c4f7e651a6dc113,
0x3214c7409d46651b },
{ 0x136e570dc46d7ae5, 0x0fd0aacc54f8dc8f, 0x59549f03310dad86,
0x62711c414c454aa1 },
{ 0x1329827406651770, 0x3ba4a0668a279436, -0x26494713e7a2ddc4,
0x5bea94073ecb833c },
},
{
{ -0x4b8f319c0cbc2d08, 0x0067ba8f0543e8f1, 0x35da51a1a2117b6f,
0x4ad0785944f1bd2f },
{ 0x641dbf0912c89be4, -0x530c74ce8291a864, -0x540161fd09684f9b,
0x3aacd5c148f61eec },
{ -0x7a71c4cb3cce7cff, -0x23663fb8f8ce97da, 0x34085b2ed39da88c,
0x3aff0cb1d902853d },
},
{
{ -0x6dd9bcf40b3acafb, 0x68e49c13261f2283, 0x09ef33788fd327c6,
0x2ccf9f732bd99e7f },
{ -0x783a3814c5dfbfa2, -0x711cee101252a937, 0x29252e48ad29d5f9,
0x110e7e86f4cd251d },
{ 0x57c0d89ed603f5e4, 0x12888628f0b0200c, 0x53172709a02e3bb7,
0x05c557e0b9693a37 },
},
{
{ -0x0889444f763df150, 0x61f85bf6fa0fd85c, -0x4946c0b19cbbde05,
0x289fef0841861205 },
{ -0x270631cee0368191, 0x7a3f263011f9fdae, -0x1ea4815f7412da23,
0x6e154c178fe9875a },
{ -0x309e9cc901296541, -0x64e91b187cca36b1, 0x13789765753a7fe7,
0x6afbf642a95ca319 },
},
{
{ 0x5de55070f913a8cc, 0x7d1d167b2b0cf561, -0x25d6a9496f152b77,
0x12c093cedb801ed9 },
{ 0x7da8de0c62f5d2c1, -0x6703c25b4ff18466, 0x7deb6ada0dad70e0,
0x0db4b851b95038c4 },
{ -0x03eb806cf747e6f1, 0x06969da0a11ae310, -0x3118aa8d25382803,
0x33aa8799c6635ce6 },
},
{
{ -0x7cb70a7703ea934f, 0x6da2ba9b1a0a6d27, -0x1dd9d2a37835a54a,
0x212cd0c1c8d589a6 },
{ -0x50f00ae142f7a30e, 0x78f51a8967d33f1f, 0x6ec2bfe15060033c,
0x233c6f29e8e21a86 },
{ -0x2d0b2aef80e7387f, 0x122ecdf2527e9d28, -0x58f579d5c2c2ccbf,
0x1db7778911914ce3 },
},
{
{ -0x4cc6b896228fe54a, -0x1d47212be630725b, 0x15df4161fd2ac852,
0x7ae2ca8a017d24be },
{ -0x220cadc683943d91, 0x7a97e2cc53d50113, 0x7c74f43abf79a330,
0x31ad97ad26e2adfc },
{ -0x4817e812f6df469e, 0x1e8518cc3f19da9d, -0x1b6e3eb0daa9f59c,
0x1ed1fc53a6622c83 },
},
};
#elif defined(CURVED25519_ASM_32BIT)
static const ge_precomp Bi[8] = {
{
{ -0x0a73c47b, 0x2fbc93c6, -0x0473f1e7, -0x306cd23a, 0x643d42c2, 0x270b4898, 0x33d4ba65, 0x07cf9d3a, },
{ -0x28bf6ec2, -0x62efc6fb, -0x2ebf414d, -0x02c660fb, 0x688f8a09, -0x5a3e7bcc, -0x6707ed99, 0x44fd2f92, },
{ -0x78855598, -0x5436edfb, -0x33553b62, 0x26d9e823, -0x22bca674, 0x5a1b7dcb, -0x60f39a58, 0x6f117b68, },
{ -0x0a73c47b, 0x2fbc93c6, -0x0473f1e7, -0x306cd23a, 0x643d42c2,
0x270b4898, 0x33d4ba65, 0x07cf9d3a },
{ -0x28bf6ec2, -0x62efc6fb, -0x2ebf414d, -0x02c660fb, 0x688f8a09,
-0x5a3e7bcc, -0x6707ed99, 0x44fd2f92 },
{ -0x78855598, -0x5436edfb, -0x33553b62, 0x26d9e823, -0x22bca674,
0x5a1b7dcb, -0x60f39a58, 0x6f117b68 },
},
{
{ 0x4cee9730, -0x50da4f58, -0x1779b476, 0x025a8430, -0x60fe98ce, -0x3ee4affe, -0x657f070c, 0x7a164e1b, },
{ -0x5b032d9b, 0x56611fe8, -0x1a3e4583, 0x3bd353fd, 0x214bd6bd, -0x7ece0ce6, 0x555bda62, 0x2ab91587, },
{ 0x0dd0d889, 0x14ae933f, 0x1c35da62, 0x58942322, -0x730d24b4, -0x2e8f1abb, 0x12b9b4c6, 0x5a2826af, },
{ 0x4cee9730, -0x50da4f58, -0x1779b476, 0x025a8430, -0x60fe98ce,
-0x3ee4affe, -0x657f070c, 0x7a164e1b },
{ -0x5b032d9b, 0x56611fe8, -0x1a3e4583, 0x3bd353fd, 0x214bd6bd,
-0x7ece0ce6, 0x555bda62, 0x2ab91587 },
{ 0x0dd0d889, 0x14ae933f, 0x1c35da62, 0x58942322, -0x730d24b4,
-0x2e8f1abb, 0x12b9b4c6, 0x5a2826af },
},
{
{ 0x08a5bb33, -0x5ded43bc, -0x38a112fe, -0x72afb73d, 0x5abfec44, -0x22e414f4, 0x46e206eb, 0x2945ccf1, },
{ -0x5bb82946, 0x7f9182c3, 0x4b2729b7, -0x2affeb2f, -0x479b5f79, -0x1cc30ee4, -0x14e4aa0d, 0x154a7e73, },
{ -0x7ed57d7b, -0x4344240f, -0x2f422e04, 0x270e0807, 0x1bbda72d, -0x4be498f5, 0x6b3bb69a, 0x43aabe69, },
{ 0x08a5bb33, -0x5ded43bc, -0x38a112fe, -0x72afb73d, 0x5abfec44,
-0x22e414f4, 0x46e206eb, 0x2945ccf1 },
{ -0x5bb82946, 0x7f9182c3, 0x4b2729b7, -0x2affeb2f, -0x479b5f79,
-0x1cc30ee4, -0x14e4aa0d, 0x154a7e73 },
{ -0x7ed57d7b, -0x4344240f, -0x2f422e04, 0x270e0807, 0x1bbda72d,
-0x4be498f5, 0x6b3bb69a, 0x43aabe69 },
},
{
{ -0x6bb15c41, 0x6b1a5cd0, -0x4c623f2e, 0x7470353a, 0x28542e49, 0x71b25282, 0x283c927e, 0x461bea69, },
{ -0x55cdde4f, -0x4590d366, 0x3bba23a7, 0x6ca02153, -0x6de6d3c6, -0x621589b1, 0x2e5317e0, 0x1d6edd5d, },
{ 0x01b8b3a2, -0x0e7c9238, 0x053ea49a, -0x4cfca0b9, 0x5877adf3, 0x529c41ba, 0x6a0f90a7, 0x7a9fbb1c, },
{ -0x6bb15c41, 0x6b1a5cd0, -0x4c623f2e, 0x7470353a, 0x28542e49,
0x71b25282, 0x283c927e, 0x461bea69 },
{ -0x55cdde4f, -0x4590d366, 0x3bba23a7, 0x6ca02153, -0x6de6d3c6,
-0x621589b1, 0x2e5317e0, 0x1d6edd5d },
{ 0x01b8b3a2, -0x0e7c9238, 0x053ea49a, -0x4cfca0b9, 0x5877adf3,
0x529c41ba, 0x6a0f90a7, 0x7a9fbb1c },
},
{
{ -0x59579cd1, -0x64d19876, 0x51bc46c5, -0x59af6191, -0x39790a4b, -0x314dcc37, -0x752280a7, 0x34b9ed33, },
{ 0x039d8064, -0x0c91de82, -0x0adfbe65, -0x675f7e4a, -0x18a14fbc, -0x693439f8, -0x05236371, 0x49c05a51, },
{ -0x6fba50e5, 0x06b4e8bf, -0x58e62dd1, -0x1d007c18, -0x6c2b30ea, -0x550903d7, 0x1b008b06, 0x73c17202, },
{ -0x59579cd1, -0x64d19876, 0x51bc46c5, -0x59af6191, -0x39790a4b,
-0x314dcc37, -0x752280a7, 0x34b9ed33 },
{ 0x039d8064, -0x0c91de82, -0x0adfbe65, -0x675f7e4a, -0x18a14fbc,
-0x693439f8, -0x05236371, 0x49c05a51 },
{ -0x6fba50e5, 0x06b4e8bf, -0x58e62dd1, -0x1d007c18, -0x6c2b30ea,
-0x550903d7, 0x1b008b06, 0x73c17202 },
},
{
{ -0x757fd522, 0x2fbf0084, 0x02302e27, -0x1a260131, 0x17703406, 0x113e8471, 0x546d8faf, 0x4275aae2, },
{ 0x49864348, 0x315f5b02, 0x77088381, 0x3ed6b369, 0x6a8deb95, -0x5c5f8aab, 0x29d5c77f, 0x18ab5980, },
{ -0x029f7617, -0x27d4d33b, 0x3282e4a4, 0x031eb4a1, -0x4ae579de, 0x44311199, -0x4ac206b8, 0x3dc65522, },
{ -0x757fd522, 0x2fbf0084, 0x02302e27, -0x1a260131, 0x17703406,
0x113e8471, 0x546d8faf, 0x4275aae2 },
{ 0x49864348, 0x315f5b02, 0x77088381, 0x3ed6b369, 0x6a8deb95,
-0x5c5f8aab, 0x29d5c77f, 0x18ab5980 },
{ -0x029f7617, -0x27d4d33b, 0x3282e4a4, 0x031eb4a1, -0x4ae579de,
0x44311199, -0x4ac206b8, 0x3dc65522 },
},
{
{ -0x5dff8093, -0x408f3dde, -0x4a432125, -0x407b4c66, -0x04f845f9, 0x537a0e12, -0x3cb90dbf, 0x234fd7ee, },
{ 0x327fbf93, 0x506f013b, -0x64889095, -0x51031437, -0x5552a698, -0x62ed4dce, 0x176024a7, 0x0267882d, },
{ 0x732ea378, 0x5360a119, -0x20722b8f, 0x2437e6b1, -0x6e581acd, -0x5d10c808, -0x55f6879d, 0x497ba6fd, },
{ -0x5dff8093, -0x408f3dde, -0x4a432125, -0x407b4c66, -0x04f845f9,
0x537a0e12, -0x3cb90dbf, 0x234fd7ee },
{ 0x327fbf93, 0x506f013b, -0x64889095, -0x51031437, -0x5552a698,
-0x62ed4dce, 0x176024a7, 0x0267882d },
{ 0x732ea378, 0x5360a119, -0x20722b8f, 0x2437e6b1, -0x6e581acd,
-0x5d10c808, -0x55f6879d, 0x497ba6fd },
},
{
{ 0x13cfeaa0, 0x24cecc03, 0x189c246d, -0x79b73d73, -0x3e0d2b30, 0x2dbdbdfa, -0x0ed218d5, 0x61e22917, },
{ 0x468ccf0b, 0x040bcd86, 0x2a9910d6, -0x2c7d645c, 0x07b25192, 0x75083008, 0x18d05ebf, 0x43b5cd42, },
{ -0x642f4aea, 0x5d9a762f, 0x373fdeee, -0x14c750b2, -0x6c29bd90, 0x032e5a7d, 0x0ae4d842, 0x511d6121, },
{ 0x13cfeaa0, 0x24cecc03, 0x189c246d, -0x79b73d73, -0x3e0d2b30,
0x2dbdbdfa, -0x0ed218d5, 0x61e22917 },
{ 0x468ccf0b, 0x040bcd86, 0x2a9910d6, -0x2c7d645c, 0x07b25192,
0x75083008, 0x18d05ebf, 0x43b5cd42 },
{ -0x642f4aea, 0x5d9a762f, 0x373fdeee, -0x14c750b2, -0x6c29bd90,
0x032e5a7d, 0x0ae4d842, 0x511d6121 },
},
};
#elif defined(CURVED25519_128BIT)
static const ge_precomp Bi[8] = {
{
{ 0x493c6f58c3b85, 0x0df7181c325f7, 0x0f50b0b3e4cb7, 0x5329385a44c32, 0x07cf9d3a33d4b },
{ 0x03905d740913e, 0x0ba2817d673a2, 0x23e2827f4e67c, 0x133d2e0c21a34, 0x44fd2f9298f81 },
{ 0x11205877aaa68, 0x479955893d579, 0x50d66309b67a0, 0x2d42d0dbee5ee, 0x6f117b689f0c6 },
{ 0x493c6f58c3b85, 0x0df7181c325f7, 0x0f50b0b3e4cb7, 0x5329385a44c32,
0x07cf9d3a33d4b },
{ 0x03905d740913e, 0x0ba2817d673a2, 0x23e2827f4e67c, 0x133d2e0c21a34,
0x44fd2f9298f81 },
{ 0x11205877aaa68, 0x479955893d579, 0x50d66309b67a0, 0x2d42d0dbee5ee,
0x6f117b689f0c6 },
},
{
{ 0x5b0a84cee9730, 0x61d10c97155e4, 0x4059cc8096a10, 0x47a608da8014f, 0x7a164e1b9a80f },
{ 0x11fe8a4fcd265, 0x7bcb8374faacc, 0x52f5af4ef4d4f, 0x5314098f98d10, 0x2ab91587555bd },
{ 0x6933f0dd0d889, 0x44386bb4c4295, 0x3cb6d3162508c, 0x26368b872a2c6, 0x5a2826af12b9b },
{ 0x5b0a84cee9730, 0x61d10c97155e4, 0x4059cc8096a10, 0x47a608da8014f,
0x7a164e1b9a80f },
{ 0x11fe8a4fcd265, 0x7bcb8374faacc, 0x52f5af4ef4d4f, 0x5314098f98d10,
0x2ab91587555bd },
{ 0x6933f0dd0d889, 0x44386bb4c4295, 0x3cb6d3162508c, 0x26368b872a2c6,
0x5a2826af12b9b },
},
{
{ 0x2bc4408a5bb33, 0x078ebdda05442, 0x2ffb112354123, 0x375ee8df5862d, 0x2945ccf146e20 },
{ 0x182c3a447d6ba, 0x22964e536eff2, 0x192821f540053, 0x2f9f19e788e5c, 0x154a7e73eb1b5 },
{ 0x3dbf1812a8285, 0x0fa17ba3f9797, 0x6f69cb49c3820, 0x34d5a0db3858d, 0x43aabe696b3bb },
{ 0x2bc4408a5bb33, 0x078ebdda05442, 0x2ffb112354123, 0x375ee8df5862d,
0x2945ccf146e20 },
{ 0x182c3a447d6ba, 0x22964e536eff2, 0x192821f540053, 0x2f9f19e788e5c,
0x154a7e73eb1b5 },
{ 0x3dbf1812a8285, 0x0fa17ba3f9797, 0x6f69cb49c3820, 0x34d5a0db3858d,
0x43aabe696b3bb },
},
{
{ 0x25cd0944ea3bf, 0x75673b81a4d63, 0x150b925d1c0d4, 0x13f38d9294114, 0x461bea69283c9 },
{ 0x72c9aaa3221b1, 0x267774474f74d, 0x064b0e9b28085, 0x3f04ef53b27c9, 0x1d6edd5d2e531 },
{ 0x36dc801b8b3a2, 0x0e0a7d4935e30, 0x1deb7cecc0d7d, 0x053a94e20dd2c, 0x7a9fbb1c6a0f9 },
{ 0x25cd0944ea3bf, 0x75673b81a4d63, 0x150b925d1c0d4, 0x13f38d9294114,
0x461bea69283c9 },
{ 0x72c9aaa3221b1, 0x267774474f74d, 0x064b0e9b28085, 0x3f04ef53b27c9,
0x1d6edd5d2e531 },
{ 0x36dc801b8b3a2, 0x0e0a7d4935e30, 0x1deb7cecc0d7d, 0x053a94e20dd2c,
0x7a9fbb1c6a0f9 },
},
{
{ 0x6678aa6a8632f, 0x5ea3788d8b365, 0x21bd6d6994279, 0x7ace75919e4e3, 0x34b9ed338add7 },
{ 0x6217e039d8064, 0x6dea408337e6d, 0x57ac112628206, 0x647cb65e30473, 0x49c05a51fadc9 },
{ 0x4e8bf9045af1b, 0x514e33a45e0d6, 0x7533c5b8bfe0f, 0x583557b7e14c9, 0x73c172021b008 },
{ 0x6678aa6a8632f, 0x5ea3788d8b365, 0x21bd6d6994279, 0x7ace75919e4e3,
0x34b9ed338add7 },
{ 0x6217e039d8064, 0x6dea408337e6d, 0x57ac112628206, 0x647cb65e30473,
0x49c05a51fadc9 },
{ 0x4e8bf9045af1b, 0x514e33a45e0d6, 0x7533c5b8bfe0f, 0x583557b7e14c9,
0x73c172021b008 },
},
{
{ 0x700848a802ade, 0x1e04605c4e5f7, 0x5c0d01b9767fb, 0x7d7889f42388b, 0x4275aae2546d8 },
{ 0x75b0249864348, 0x52ee11070262b, 0x237ae54fb5acd, 0x3bfd1d03aaab5, 0x18ab598029d5c },
{ 0x32cc5fd6089e9, 0x426505c949b05, 0x46a18880c7ad2, 0x4a4221888ccda, 0x3dc65522b53df },
{ 0x700848a802ade, 0x1e04605c4e5f7, 0x5c0d01b9767fb, 0x7d7889f42388b,
0x4275aae2546d8 },
{ 0x75b0249864348, 0x52ee11070262b, 0x237ae54fb5acd, 0x3bfd1d03aaab5,
0x18ab598029d5c },
{ 0x32cc5fd6089e9, 0x426505c949b05, 0x46a18880c7ad2, 0x4a4221888ccda,
0x3dc65522b53df },
},
{
{ 0x0c222a2007f6d, 0x356b79bdb77ee, 0x41ee81efe12ce, 0x120a9bd07097d, 0x234fd7eec346f },
{ 0x7013b327fbf93, 0x1336eeded6a0d, 0x2b565a2bbf3af, 0x253ce89591955, 0x0267882d17602 },
{ 0x0a119732ea378, 0x63bf1ba8e2a6c, 0x69f94cc90df9a, 0x431d1779bfc48, 0x497ba6fdaa097 },
{ 0x0c222a2007f6d, 0x356b79bdb77ee, 0x41ee81efe12ce, 0x120a9bd07097d,
0x234fd7eec346f },
{ 0x7013b327fbf93, 0x1336eeded6a0d, 0x2b565a2bbf3af, 0x253ce89591955,
0x0267882d17602 },
{ 0x0a119732ea378, 0x63bf1ba8e2a6c, 0x69f94cc90df9a, 0x431d1779bfc48,
0x497ba6fdaa097 },
},
{
{ 0x6cc0313cfeaa0, 0x1a313848da499, 0x7cb534219230a, 0x39596dedefd60, 0x61e22917f12de },
{ 0x3cd86468ccf0b, 0x48553221ac081, 0x6c9464b4e0a6e, 0x75fba84180403, 0x43b5cd4218d05 },
{ 0x2762f9bd0b516, 0x1c6e7fbddcbb3, 0x75909c3ace2bd, 0x42101972d3ec9, 0x511d61210ae4d },
{ 0x6cc0313cfeaa0, 0x1a313848da499, 0x7cb534219230a, 0x39596dedefd60,
0x61e22917f12de },
{ 0x3cd86468ccf0b, 0x48553221ac081, 0x6c9464b4e0a6e, 0x75fba84180403,
0x43b5cd4218d05 },
{ 0x2762f9bd0b516, 0x1c6e7fbddcbb3, 0x75909c3ace2bd, 0x42101972d3ec9,
0x511d61210ae4d },
},
};
#else
static const ge_precomp Bi[8] = {
{
{ 25967493,-14356035,29566456,3660896,-12694345,4014787,27544626,-11754271,-6079156,2047605 },
{ -12545711,934262,-2722910,3049990,-727428,9406986,12720692,5043384,19500929,-15469378 },
{ -8738181,4489570,9688441,-14785194,10184609,-12363380,29287919,11864899,-24514362,-4438546 },
},
{
{ 15636291,-9688557,24204773,-7912398,616977,-16685262,27787600,-14772189,28944400,-1550024 },
{ 16568933,4717097,-11556148,-1102322,15682896,-11807043,16354577,-11775962,7689662,11199574 },
{ 30464156,-5976125,-11779434,-15670865,23220365,15915852,7512774,10017326,-17749093,-9920357 },
},
{
{ 10861363,11473154,27284546,1981175,-30064349,12577861,32867885,14515107,-15438304,10819380 },
{ 4708026,6336745,20377586,9066809,-11272109,6594696,-25653668,12483688,-12668491,5581306 },
{ 19563160,16186464,-29386857,4097519,10237984,-4348115,28542350,13850243,-23678021,-15815942 },
},
{
{ 5153746,9909285,1723747,-2777874,30523605,5516873,19480852,5230134,-23952439,-15175766 },
{ -30269007,-3463509,7665486,10083793,28475525,1649722,20654025,16520125,30598449,7715701 },
{ 28881845,14381568,9657904,3680757,-20181635,7843316,-31400660,1370708,29794553,-1409300 },
},
{
{ -22518993,-6692182,14201702,-8745502,-23510406,8844726,18474211,-1361450,-13062696,13821877 },
{ -6455177,-7839871,3374702,-4740862,-27098617,-10571707,31655028,-7212327,18853322,-14220951 },
{ 4566830,-12963868,-28974889,-12240689,-7602672,-2830569,-8514358,-10431137,2207753,-3209784 },
},
{
{ -25154831,-4185821,29681144,7868801,-6854661,-9423865,-12437364,-663000,-31111463,-16132436 },
{ 25576264,-2703214,7349804,-11814844,16472782,9300885,3844789,15725684,171356,6466918 },
{ 23103977,13316479,9739013,-16149481,817875,-15038942,8965339,-14088058,-30714912,16193877 },
},
{
{ -33521811,3180713,-2394130,14003687,-16903474,-16270840,17238398,4729455,-18074513,9256800 },
{ -25182317,-4174131,32336398,5036987,-21236817,11360617,22616405,9761698,-19827198,630305 },
{ -13720693,2639453,-24237460,-7406481,9494427,-5774029,-6554551,-15960994,-2449256,-14291300 },
},
{
{ -3151181,-5046075,9282714,6866145,-31907062,-863023,-18940575,15033784,25105118,-7894876 },
{ -24326370,15950226,-31801215,-14592823,-11662737,-5090925,1573892,-2625887,2198790,-15804619 },
{ -3099351,10324967,-2241613,7453183,-5446979,-2735503,-13812022,-16236442,-32461234,-12290683 },
},
} ;
{
{ 0x18c3b85, -0x0db0e43, 0x1c325f8, 0x037dc60, -0x0c1b349,
0x03d42c3, 0x1a44c32, -0x0b35b1f, -0x05cc2b4, 0x01f3e75 },
{ -0x0bf6eaf, 0x00e4176, -0x0298c5e, 0x02e8a06, -0x00b1984,
0x08f8a0a, 0x0c21a34, 0x04cf4b8, 0x1298f81, -0x0ec0b42 },
{ -0x0855585, 0x0448162, 0x093d579, -0x0e19aaa, 0x09b67a1,
-0x0bca674, 0x1bee5ef, 0x0b50b43, -0x1760f3a, -0x043ba12 },
},
{
{ 0x0ee9743, -0x093d5ed, 0x17155e5, -0x078bbce, 0x0096a11,
-0x0fe98ce, 0x1a80150, -0x0e167dd, 0x1b9a810, -0x017a6c8 },
{ 0x0fcd265, 0x047fa29, -0x0b05534, -0x010d1f2, 0x0ef4d50,
-0x0b42943, 0x0f98d11, -0x0b3afda, 0x07555be, 0x0aae456 },
{ 0x1d0d89c, -0x05b303d, -0x0b3bd6a, -0x0ef1e51, 0x162508d,
0x0f2db4c, 0x072a2c6, 0x098da2e, -0x10ed465, -0x0975f65 },
},
{
{ 0x0a5bb33, 0x0af1102, 0x1a05442, 0x01e3af7, -0x1cabedd,
0x0bfec45, 0x1f5862d, 0x0dd7ba3, -0x0eb91e0, 0x0a51734 },
{ 0x047d6ba, 0x060b0e9, 0x136eff2, 0x08a5939, -0x0abffad,
0x064a088, -0x18771a4, 0x0be7c68, -0x0c14e4b, 0x05529fa },
{ 0x12a8298, 0x0f6fc60, -0x1c06869, 0x03e85ef, 0x09c3820,
-0x04258d3, 0x1b3858e, 0x0d35683, -0x1694c45, -0x0f15506 },
},
{
{ 0x04ea3d2, 0x0973425, 0x01a4d63, -0x02a6312, 0x1d1c0d5,
0x0542e49, 0x1294114, 0x04fce36, -0x16d7c37, -0x0e79056 },
{ -0x1cdde4f, -0x034d955, 0x074f74e, 0x099ddd1, 0x1b28085,
0x0192c3a, 0x13b27c9, 0x0fc13bd, 0x1d2e531, 0x075bb75 },
{ 0x1b8b3b5, 0x0db7200, 0x0935e30, 0x03829f5, -0x133f283,
0x077adf4, -0x1df22d4, 0x014ea54, 0x1c6a0f9, -0x0158114 },
},
{
{ -0x1579cd1, -0x0661d56, 0x0d8b366, -0x085721e, -0x166bd86,
0x086f5b6, 0x119e4e3, -0x014c62a, -0x0c75228, 0x0d2e7b5 },
{ -0x0627f89, -0x077a07f, 0x0337e6e, -0x04856fe, -0x19d7df9,
-0x0a14fbb, 0x1e30474, -0x06e0d27, 0x11fadca, -0x0d8fe97 },
{ 0x045af2e, -0x0c5d01c, -0x1ba1f29, -0x0bac731, -0x07401f0,
-0x02b30e9, -0x081eb36, -0x09f2aa1, 0x021b009, -0x030fa38 },
},
{
{ -0x17fd50f, -0x03fdedd, 0x1c4e5f8, 0x0781181, -0x0689805,
-0x08fcbf9, -0x0bdc774, -0x00a1dd8, -0x1dab927, -0x0f62954 },
{ 0x1864348, -0x0293f6e, 0x070262c, -0x0b447bc, 0x0fb5ace,
0x08deb95, 0x03aaab5, 0x0eff474, 0x0029d5c, 0x062ad66 },
{ 0x16089e9, 0x0cb317f, 0x0949b05, -0x0f66be9, 0x00c7ad3,
-0x0e579de, 0x088ccdb, -0x0d6f77a, -0x1d4ac20, 0x0f71955 },
},
{
{ -0x1ff8093, 0x03088a9, -0x0248812, 0x0d5ade7, -0x101ed32,
-0x0f845f8, 0x107097e, 0x0482a6f, -0x113cb91, 0x08d3f60 },
{ -0x180406d, -0x03fb133, 0x1ed6a0e, 0x04cdbbb, -0x1440c51,
0x0ad5969, 0x1591955, 0x094f3a2, -0x12e89fe, 0x0099e21 },
{ -0x0d15c75, 0x028465d, -0x171d594, -0x0710391, 0x090df9b,
-0x0581acd, -0x06403b7, -0x0f38ba2, -0x0255f68, -0x0da1164 },
},
{
{ -0x030154d, -0x04cff3b, 0x08da49a, 0x068c4e1, -0x1e6dcf6,
-0x00d2b2f, -0x121029f, 0x0e565b8, 0x17f12de, -0x078775c },
{ -0x17330e2, 0x0f36192, -0x1e53f7f, -0x0deab37, -0x0b1f591,
-0x04dae6d, 0x0180404, -0x028115f, 0x0218d06, -0x0f128cb },
{ -0x02f4ad7, 0x09d8be7, -0x022344d, 0x071b9ff, -0x0531d43,
-0x029bd8f, -0x0d2c136, -0x0f7bf9a, -0x1ef51b2, -0x0bb8a7b },
},
};
#endif
@@ -9405,7 +9696,7 @@ int ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a,
#else
signed char aslide[SLIDE_SIZE];
signed char bslide[SLIDE_SIZE];
ge_cached Ai[8]; /* A,3A,5A,7A,9A,11A,13A,15A */
ge_cached Ai[16]; /* A,3A,5A,7A,9A,11A,13A,15A */
ge_p1p1 t[1];
ge_p3 u[1];
@@ -9416,7 +9707,7 @@ int ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a,
#if defined(WOLFSSL_SMALL_STACK) && !defined(WOLFSSL_NO_MALLOC)
if (((aslide = (signed char *)XMALLOC(SLIDE_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER))== NULL) ||
((bslide = (signed char *)XMALLOC(SLIDE_SIZE, NULL, DYNAMIC_TYPE_TMP_BUFFER))== NULL) ||
((Ai = (ge_cached *)XMALLOC(8 * sizeof(*Ai), NULL, DYNAMIC_TYPE_TMP_BUFFER))== NULL) ||
((Ai = (ge_cached *)XMALLOC(16 * sizeof(*Ai), NULL, DYNAMIC_TYPE_TMP_BUFFER))== NULL) ||
((t = (ge_p1p1 *)XMALLOC(sizeof(*t), NULL, DYNAMIC_TYPE_TMP_BUFFER))== NULL) ||
((u = (ge_p3 *)XMALLOC(sizeof(*u), NULL, DYNAMIC_TYPE_TMP_BUFFER))== NULL) ||
((A2 = (ge_p3 *)XMALLOC(sizeof(*A2), NULL, DYNAMIC_TYPE_TMP_BUFFER))== NULL))
@@ -9427,8 +9718,12 @@ int ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a,
ret = 0;
#endif
slide(aslide,a);
slide(bslide,b);
slide(aslide,a,15);
#ifdef CURVED25519_ASM_64BIT
slide(bslide,b,63);
#else
slide(bslide,b,15);
#endif
ge_p3_to_cached(&Ai[0],A);
ge_p3_dbl(t,A); ge_p1p1_to_p3(A2,t);
@@ -9442,8 +9737,60 @@ int ge_double_scalarmult_vartime(ge_p2 *r, const unsigned char *a,
ge_p2_0(r);
for (i = 255;i >= 0;--i) {
if (aslide[i] || bslide[i]) break;
for (i = SLIDE_SIZE-1;i >= 0;--i) {
if (aslide[i] || bslide[i]) {
#ifdef CURVED25519_ASM_64BIT
if (aslide[i] > 0) {
fe_copy(t->Z, Ai[aslide[i]/2].YplusX);
fe_copy(t->Y, Ai[aslide[i]/2].YminusX);
fe_sub(t->X,t->Z,t->Y);
fe_add(t->Y,t->Z,t->Y);
fe_add(t->T,Ai[aslide[i]/2].Z, Ai[aslide[i]/2].Z);
fe_copy(t->Z,t->T);
} else if (aslide[i] < 0) {
fe_copy(t->Z, Ai[aslide[i]/2].YminusX);
fe_copy(t->Y, Ai[aslide[i]/2].YplusX);
fe_sub(t->X,t->Z,t->Y);
fe_add(t->Y,t->Z,t->Y);
fe_add(t->T,Ai[aslide[i]/2].Z, Ai[aslide[i]/2].Z);
fe_copy(t->Z,t->T);
}
if (bslide[i] > 0) {
if (aslide[i] != 0) {
ge_p1p1_to_p3(u,t);
ge_madd(t,u,&Bi[bslide[i]/2]);
} else {
fe_copy(t->Z,Bi[bslide[i]/2].yplusx);
fe_copy(t->Y,Bi[bslide[i]/2].yminusx);
fe_sub(t->X,t->Z,t->Y);
fe_add(t->Y,t->Z,t->Y);
fe_0(t->T);
t->T[0] = 0x2;
fe_0(t->Z);
t->Z[0] = 0x2;
}
} else if (bslide[i] < 0) {
if (aslide[i] != 0) {
ge_p1p1_to_p3(u,t);
ge_msub(t,u,&Bi[(-bslide[i])/2]);
} else {
fe_copy(t->Z,Bi[bslide[i]/2].yminusx);
fe_copy(t->Y,Bi[bslide[i]/2].yplusx);
fe_sub(t->X,t->Z,t->Y);
fe_add(t->Y,t->Z,t->Y);
fe_0(t->T);
t->T[0] = 0x2;
fe_0(t->Z);
t->Z[0] = 0x2;
}
}
ge_p1p1_to_p2(r,t);
--i;
#endif
break;
}
}
for (;i >= 0;--i) {
@@ -9556,6 +9903,11 @@ int ge_frombytes_negate_vartime(ge_p3 *h,const unsigned char *s)
fe_mul(h->X,h->X,u); /* x = uv^7 */
fe_pow22523(h->X,h->X); /* x = (uv^7)^((q-5)/8) */
/* Alternative if inversion very fast.
* x^2^252 * invert(x^3)
* = x^2^252 * x^-3
* = x^(2^252 - 3)
*/
fe_mul(h->X,h->X,v3);
fe_mul(h->X,h->X,u); /* x = uv^3(uv^7)^((q-5)/8) */
@@ -9823,6 +10175,26 @@ void ge_tobytes(unsigned char *s,const ge_p2 *h)
s[31] ^= (unsigned char)((unsigned char)fe_isnegative(x) << 7);
}
#ifdef HAVE_ED25519_VERIFY
#ifndef CURVED25519_ASM_64BIT
#define fe_invert_nct fe_invert
#endif
/* ge tobytes */
void ge_tobytes_nct(unsigned char *s,const ge_p2 *h)
{
ge recip;
ge x;
ge y;
fe_invert_nct(recip,h->Z);
fe_mul(x,h->X,recip);
fe_mul(y,h->Y,recip);
fe_tobytes(s,y);
s[31] ^= (unsigned char)((unsigned char)fe_isnegative(x) << 7);
}
#endif
#endif /* !ED25519_SMALL */
/* if HAVE_ED25519 but not HAVE_CURVE25519, and an asm implementation is built,

View File

@@ -555,6 +555,253 @@ _fe_cmov_table:
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl fe_invert_nct
.type fe_invert_nct,@function
.align 2
fe_invert_nct:
#else
.section __TEXT,__text
.globl _fe_invert_nct
.p2align 2
_fe_invert_nct:
#endif /* __APPLE__ */
stp x29, x30, [sp, #-80]!
add x29, sp, #0
stp x17, x19, [x29, #24]
stp x20, x21, [x29, #40]
stp x22, x23, [x29, #56]
str x24, [x29, #72]
mov x19, #-19
mov x20, #-1
mov x21, #0x7fffffffffffffff
ldr x6, [x1]
ldr x7, [x1, #8]
ldr x8, [x1, #16]
ldr x9, [x1, #24]
mov x2, x19
mov x3, x20
mov x4, x20
mov x5, x21
mov x10, xzr
mov x11, xzr
mov x12, xzr
mov x13, xzr
mov x14, #1
mov x15, xzr
mov x16, xzr
mov x17, xzr
mov x22, #0xff
cmp x9, #0
beq L_fe_invert_nct_num_bits_init_v_0
mov x24, #0x100
clz x23, x9
sub x23, x24, x23
b L_fe_invert_nct_num_bits_init_v_3
L_fe_invert_nct_num_bits_init_v_0:
cmp x8, #0
beq L_fe_invert_nct_num_bits_init_v_1
mov x24, #0xc0
clz x23, x8
sub x23, x24, x23
b L_fe_invert_nct_num_bits_init_v_3
L_fe_invert_nct_num_bits_init_v_1:
cmp x7, #0
beq L_fe_invert_nct_num_bits_init_v_2
mov x24, #0x80
clz x23, x7
sub x23, x24, x23
b L_fe_invert_nct_num_bits_init_v_3
L_fe_invert_nct_num_bits_init_v_2:
mov x24, #0x40
clz x23, x6
sub x23, x24, x23
L_fe_invert_nct_num_bits_init_v_3:
tst x6, #1
bne L_fe_invert_nct_loop
L_fe_invert_nct_even_init_v_0:
extr x6, x7, x6, #1
extr x7, x8, x7, #1
extr x8, x9, x8, #1
lsr x9, x9, #1
sub x23, x23, #1
ands x24, x14, #1
beq L_fe_invert_nct_even_init_v_1
adds x14, x14, x19
adcs x15, x15, x20
adcs x16, x16, x20
adcs x17, x17, x21
cset x24, cs
L_fe_invert_nct_even_init_v_1:
extr x14, x15, x14, #1
extr x15, x16, x15, #1
extr x16, x17, x16, #1
extr x17, x24, x17, #1
tst x6, #1
beq L_fe_invert_nct_even_init_v_0
L_fe_invert_nct_loop:
cmp x22, #1
beq L_fe_invert_nct_u_done
cmp x23, #1
beq L_fe_invert_nct_v_done
cmp x22, x23
bhi L_fe_invert_nct_u_larger
bcc L_fe_invert_nct_v_larger
cmp x5, x9
bhi L_fe_invert_nct_u_larger
bcc L_fe_invert_nct_v_larger
cmp x4, x8
bhi L_fe_invert_nct_u_larger
bcc L_fe_invert_nct_v_larger
cmp x3, x7
bhi L_fe_invert_nct_u_larger
bcc L_fe_invert_nct_v_larger
cmp x2, x6
bcc L_fe_invert_nct_v_larger
L_fe_invert_nct_u_larger:
subs x2, x2, x6
sbcs x3, x3, x7
sbcs x4, x4, x8
sbc x5, x5, x9
subs x10, x10, x14
sbcs x11, x11, x15
sbcs x12, x12, x16
sbcs x13, x13, x17
bcs L_fe_invert_nct_sub_uv
adds x10, x10, x19
adcs x11, x11, x20
adcs x12, x12, x20
adc x13, x13, x21
L_fe_invert_nct_sub_uv:
cmp x5, #0
beq L_fe_invert_nct_nct_num_bits_u_0
mov x24, #0x100
clz x22, x5
sub x22, x24, x22
b L_fe_invert_nct_nct_num_bits_u_3
L_fe_invert_nct_nct_num_bits_u_0:
cmp x4, #0
beq L_fe_invert_nct_nct_num_bits_u_1
mov x24, #0xc0
clz x22, x4
sub x22, x24, x22
b L_fe_invert_nct_nct_num_bits_u_3
L_fe_invert_nct_nct_num_bits_u_1:
cmp x3, #0
beq L_fe_invert_nct_nct_num_bits_u_2
mov x24, #0x80
clz x22, x3
sub x22, x24, x22
b L_fe_invert_nct_nct_num_bits_u_3
L_fe_invert_nct_nct_num_bits_u_2:
mov x24, #0x40
clz x22, x2
sub x22, x24, x22
L_fe_invert_nct_nct_num_bits_u_3:
L_fe_invert_nct_even_u_0:
extr x2, x3, x2, #1
extr x3, x4, x3, #1
extr x4, x5, x4, #1
lsr x5, x5, #1
sub x22, x22, #1
ands x24, x10, #1
beq L_fe_invert_nct_even_u_1
adds x10, x10, x19
adcs x11, x11, x20
adcs x12, x12, x20
adcs x13, x13, x21
cset x24, cs
L_fe_invert_nct_even_u_1:
extr x10, x11, x10, #1
extr x11, x12, x11, #1
extr x12, x13, x12, #1
extr x13, x24, x13, #1
tst x2, #1
beq L_fe_invert_nct_even_u_0
b L_fe_invert_nct_loop
L_fe_invert_nct_v_larger:
subs x6, x6, x2
sbcs x7, x7, x3
sbcs x8, x8, x4
sbc x9, x9, x5
subs x14, x14, x10
sbcs x15, x15, x11
sbcs x16, x16, x12
sbcs x17, x17, x13
bcs L_fe_invert_nct_sub_vu
adds x14, x14, x19
adcs x15, x15, x20
adcs x16, x16, x20
adc x17, x17, x21
L_fe_invert_nct_sub_vu:
cmp x9, #0
beq L_fe_invert_nct_nct_num_bits_v_0
mov x24, #0x100
clz x23, x9
sub x23, x24, x23
b L_fe_invert_nct_nct_num_bits_v_3
L_fe_invert_nct_nct_num_bits_v_0:
cmp x8, #0
beq L_fe_invert_nct_nct_num_bits_v_1
mov x24, #0xc0
clz x23, x8
sub x23, x24, x23
b L_fe_invert_nct_nct_num_bits_v_3
L_fe_invert_nct_nct_num_bits_v_1:
cmp x7, #0
beq L_fe_invert_nct_nct_num_bits_v_2
mov x24, #0x80
clz x23, x7
sub x23, x24, x23
b L_fe_invert_nct_nct_num_bits_v_3
L_fe_invert_nct_nct_num_bits_v_2:
mov x24, #0x40
clz x23, x6
sub x23, x24, x23
L_fe_invert_nct_nct_num_bits_v_3:
L_fe_invert_nct_even_v_0:
extr x6, x7, x6, #1
extr x7, x8, x7, #1
extr x8, x9, x8, #1
lsr x9, x9, #1
sub x23, x23, #1
ands x24, x14, #1
beq L_fe_invert_nct_even_v_1
adds x14, x14, x19
adcs x15, x15, x20
adcs x16, x16, x20
adcs x17, x17, x21
cset x24, cs
L_fe_invert_nct_even_v_1:
extr x14, x15, x14, #1
extr x15, x16, x15, #1
extr x16, x17, x16, #1
extr x17, x24, x17, #1
tst x6, #1
beq L_fe_invert_nct_even_v_0
b L_fe_invert_nct_loop
L_fe_invert_nct_u_done:
str x10, [x0]
str x11, [x0, #8]
str x12, [x0, #16]
str x13, [x0, #24]
b L_fe_invert_nct_done
L_fe_invert_nct_v_done:
str x14, [x0]
str x15, [x0, #8]
str x16, [x0, #16]
str x17, [x0, #24]
L_fe_invert_nct_done:
ldp x17, x19, [x29, #24]
ldp x20, x21, [x29, #40]
ldp x22, x23, [x29, #56]
ldr x24, [x29, #72]
ldp x29, x30, [sp], #0x50
ret
#ifndef __APPLE__
.size fe_invert_nct,.-fe_invert_nct
#endif /* __APPLE__ */
#ifndef __APPLE__
.text
.globl fe_mul
.type fe_mul,@function
.align 2

View File

@@ -471,6 +471,263 @@ void fe_cmov_table(fe* r, fe* base, signed char b)
);
}
void fe_invert_nct(word64* r, const word64* a)
{
__asm__ __volatile__ (
"mov x19, #-19\n\t"
"mov x20, #-1\n\t"
"mov x21, #0x7fffffffffffffff\n\t"
"ldr x6, [%x[a]]\n\t"
"ldr x7, [%x[a], #8]\n\t"
"ldr x8, [%x[a], #16]\n\t"
"ldr x9, [%x[a], #24]\n\t"
"mov x2, x19\n\t"
"mov x3, x20\n\t"
"mov x4, x20\n\t"
"mov x5, x21\n\t"
"mov x10, xzr\n\t"
"mov x11, xzr\n\t"
"mov x12, xzr\n\t"
"mov x13, xzr\n\t"
"mov x14, #1\n\t"
"mov x15, xzr\n\t"
"mov x16, xzr\n\t"
"mov x17, xzr\n\t"
"mov x22, #0xff\n\t"
"cmp x9, #0\n\t"
"b.eq L_fe_invert_nct_num_bits_init_v_0_%=\n\t"
"mov x24, #0x100\n\t"
"clz x23, x9\n\t"
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_num_bits_init_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_0_%=: \n\t"
"cmp x8, #0\n\t"
"b.eq L_fe_invert_nct_num_bits_init_v_1_%=\n\t"
"mov x24, #0xc0\n\t"
"clz x23, x8\n\t"
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_num_bits_init_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_1_%=: \n\t"
"cmp x7, #0\n\t"
"b.eq L_fe_invert_nct_num_bits_init_v_2_%=\n\t"
"mov x24, #0x80\n\t"
"clz x23, x7\n\t"
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_num_bits_init_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_2_%=: \n\t"
"mov x24, #0x40\n\t"
"clz x23, x6\n\t"
"sub x23, x24, x23\n\t"
"\n"
"L_fe_invert_nct_num_bits_init_v_3_%=: \n\t"
"tst x6, #1\n\t"
"b.ne L_fe_invert_nct_loop_%=\n\t"
"\n"
"L_fe_invert_nct_even_init_v_0_%=: \n\t"
"extr x6, x7, x6, #1\n\t"
"extr x7, x8, x7, #1\n\t"
"extr x8, x9, x8, #1\n\t"
"lsr x9, x9, #1\n\t"
"sub x23, x23, #1\n\t"
"ands x24, x14, #1\n\t"
"b.eq L_fe_invert_nct_even_init_v_1_%=\n\t"
"adds x14, x14, x19\n\t"
"adcs x15, x15, x20\n\t"
"adcs x16, x16, x20\n\t"
"adcs x17, x17, x21\n\t"
"cset x24, cs\n\t"
"\n"
"L_fe_invert_nct_even_init_v_1_%=: \n\t"
"extr x14, x15, x14, #1\n\t"
"extr x15, x16, x15, #1\n\t"
"extr x16, x17, x16, #1\n\t"
"extr x17, x24, x17, #1\n\t"
"tst x6, #1\n\t"
"b.eq L_fe_invert_nct_even_init_v_0_%=\n\t"
"\n"
"L_fe_invert_nct_loop_%=: \n\t"
"cmp x22, #1\n\t"
"b.eq L_fe_invert_nct_u_done_%=\n\t"
"cmp x23, #1\n\t"
"b.eq L_fe_invert_nct_v_done_%=\n\t"
"cmp x22, x23\n\t"
"bhi L_fe_invert_nct_u_larger_%=\n\t"
"bcc L_fe_invert_nct_v_larger_%=\n\t"
"cmp x5, x9\n\t"
"bhi L_fe_invert_nct_u_larger_%=\n\t"
"bcc L_fe_invert_nct_v_larger_%=\n\t"
"cmp x4, x8\n\t"
"bhi L_fe_invert_nct_u_larger_%=\n\t"
"bcc L_fe_invert_nct_v_larger_%=\n\t"
"cmp x3, x7\n\t"
"bhi L_fe_invert_nct_u_larger_%=\n\t"
"bcc L_fe_invert_nct_v_larger_%=\n\t"
"cmp x2, x6\n\t"
"bcc L_fe_invert_nct_v_larger_%=\n\t"
"\n"
"L_fe_invert_nct_u_larger_%=: \n\t"
"subs x2, x2, x6\n\t"
"sbcs x3, x3, x7\n\t"
"sbcs x4, x4, x8\n\t"
"sbc x5, x5, x9\n\t"
"subs x10, x10, x14\n\t"
"sbcs x11, x11, x15\n\t"
"sbcs x12, x12, x16\n\t"
"sbcs x13, x13, x17\n\t"
"bcs L_fe_invert_nct_sub_uv_%=\n\t"
"adds x10, x10, x19\n\t"
"adcs x11, x11, x20\n\t"
"adcs x12, x12, x20\n\t"
"adc x13, x13, x21\n\t"
"\n"
"L_fe_invert_nct_sub_uv_%=: \n\t"
"cmp x5, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_u_0_%=\n\t"
"mov x24, #0x100\n\t"
"clz x22, x5\n\t"
"sub x22, x24, x22\n\t"
"b L_fe_invert_nct_nct_num_bits_u_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_0_%=: \n\t"
"cmp x4, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_u_1_%=\n\t"
"mov x24, #0xc0\n\t"
"clz x22, x4\n\t"
"sub x22, x24, x22\n\t"
"b L_fe_invert_nct_nct_num_bits_u_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_1_%=: \n\t"
"cmp x3, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_u_2_%=\n\t"
"mov x24, #0x80\n\t"
"clz x22, x3\n\t"
"sub x22, x24, x22\n\t"
"b L_fe_invert_nct_nct_num_bits_u_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_2_%=: \n\t"
"mov x24, #0x40\n\t"
"clz x22, x2\n\t"
"sub x22, x24, x22\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_u_3_%=: \n\t"
"\n"
"L_fe_invert_nct_even_u_0_%=: \n\t"
"extr x2, x3, x2, #1\n\t"
"extr x3, x4, x3, #1\n\t"
"extr x4, x5, x4, #1\n\t"
"lsr x5, x5, #1\n\t"
"sub x22, x22, #1\n\t"
"ands x24, x10, #1\n\t"
"b.eq L_fe_invert_nct_even_u_1_%=\n\t"
"adds x10, x10, x19\n\t"
"adcs x11, x11, x20\n\t"
"adcs x12, x12, x20\n\t"
"adcs x13, x13, x21\n\t"
"cset x24, cs\n\t"
"\n"
"L_fe_invert_nct_even_u_1_%=: \n\t"
"extr x10, x11, x10, #1\n\t"
"extr x11, x12, x11, #1\n\t"
"extr x12, x13, x12, #1\n\t"
"extr x13, x24, x13, #1\n\t"
"tst x2, #1\n\t"
"b.eq L_fe_invert_nct_even_u_0_%=\n\t"
"b L_fe_invert_nct_loop_%=\n\t"
"\n"
"L_fe_invert_nct_v_larger_%=: \n\t"
"subs x6, x6, x2\n\t"
"sbcs x7, x7, x3\n\t"
"sbcs x8, x8, x4\n\t"
"sbc x9, x9, x5\n\t"
"subs x14, x14, x10\n\t"
"sbcs x15, x15, x11\n\t"
"sbcs x16, x16, x12\n\t"
"sbcs x17, x17, x13\n\t"
"bcs L_fe_invert_nct_sub_vu_%=\n\t"
"adds x14, x14, x19\n\t"
"adcs x15, x15, x20\n\t"
"adcs x16, x16, x20\n\t"
"adc x17, x17, x21\n\t"
"\n"
"L_fe_invert_nct_sub_vu_%=: \n\t"
"cmp x9, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_v_0_%=\n\t"
"mov x24, #0x100\n\t"
"clz x23, x9\n\t"
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_nct_num_bits_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_0_%=: \n\t"
"cmp x8, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_v_1_%=\n\t"
"mov x24, #0xc0\n\t"
"clz x23, x8\n\t"
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_nct_num_bits_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_1_%=: \n\t"
"cmp x7, #0\n\t"
"b.eq L_fe_invert_nct_nct_num_bits_v_2_%=\n\t"
"mov x24, #0x80\n\t"
"clz x23, x7\n\t"
"sub x23, x24, x23\n\t"
"b L_fe_invert_nct_nct_num_bits_v_3_%=\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_2_%=: \n\t"
"mov x24, #0x40\n\t"
"clz x23, x6\n\t"
"sub x23, x24, x23\n\t"
"\n"
"L_fe_invert_nct_nct_num_bits_v_3_%=: \n\t"
"\n"
"L_fe_invert_nct_even_v_0_%=: \n\t"
"extr x6, x7, x6, #1\n\t"
"extr x7, x8, x7, #1\n\t"
"extr x8, x9, x8, #1\n\t"
"lsr x9, x9, #1\n\t"
"sub x23, x23, #1\n\t"
"ands x24, x14, #1\n\t"
"b.eq L_fe_invert_nct_even_v_1_%=\n\t"
"adds x14, x14, x19\n\t"
"adcs x15, x15, x20\n\t"
"adcs x16, x16, x20\n\t"
"adcs x17, x17, x21\n\t"
"cset x24, cs\n\t"
"\n"
"L_fe_invert_nct_even_v_1_%=: \n\t"
"extr x14, x15, x14, #1\n\t"
"extr x15, x16, x15, #1\n\t"
"extr x16, x17, x16, #1\n\t"
"extr x17, x24, x17, #1\n\t"
"tst x6, #1\n\t"
"b.eq L_fe_invert_nct_even_v_0_%=\n\t"
"b L_fe_invert_nct_loop_%=\n\t"
"\n"
"L_fe_invert_nct_u_done_%=: \n\t"
"str x10, [%x[r]]\n\t"
"str x11, [%x[r], #8]\n\t"
"str x12, [%x[r], #16]\n\t"
"str x13, [%x[r], #24]\n\t"
"b L_fe_invert_nct_done_%=\n\t"
"\n"
"L_fe_invert_nct_v_done_%=: \n\t"
"str x14, [%x[r]]\n\t"
"str x15, [%x[r], #8]\n\t"
"str x16, [%x[r], #16]\n\t"
"str x17, [%x[r], #24]\n\t"
"\n"
"L_fe_invert_nct_done_%=: \n\t"
: [r] "+r" (r)
: [a] "r" (a)
: "memory", "cc", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10",
"x11", "x12", "x13", "x14", "x15", "x16", "x17", "x19", "x20",
"x21", "x22", "x23", "x24"
);
}
void fe_mul(fe r, const fe a, const fe b)
{
__asm__ __volatile__ (

View File

@@ -49,7 +49,8 @@
#endif
#if (defined(CURVED25519_ASM_64BIT) || defined(HAVE_ED25519)) && \
!defined(WOLFSSL_CURVE25519_BLINDING)
!defined(WOLFSSL_CURVE25519_BLINDING) && \
!defined(WOLFSSL_CURVE25519_NOT_USE_ED25519)
#undef WOLFSSL_CURVE25519_USE_ED25519
#define WOLFSSL_CURVE25519_USE_ED25519
#endif
@@ -133,6 +134,8 @@ WOLFSSL_LOCAL void fe_pow22523(fe out,const fe z);
#ifdef CURVED25519_ASM
WOLFSSL_LOCAL void fe_cmov_table(fe* r, fe* base, signed char b);
WOLFSSL_LOCAL void fe_invert_nct(fe r, const fe a);
#endif /* CURVED25519_ASM */
#endif /* !CURVE25519_SMALL || !ED25519_SMALL */

View File

@@ -85,6 +85,11 @@ WOLFSSL_LOCAL void sc_reduce(byte* s);
WOLFSSL_LOCAL void sc_muladd(byte* s, const byte* a, const byte* b,
const byte* c);
WOLFSSL_LOCAL void ge_tobytes(unsigned char *s,const ge_p2 *h);
#ifndef ED25519_SMALL
WOLFSSL_LOCAL void ge_tobytes_nct(unsigned char *s,const ge_p2 *h);
#else
#define ge_tobytes_nct ge_tobytes
#endif
#ifndef GE_P3_TOBYTES_IMPL
#define ge_p3_tobytes(s, h) ge_tobytes((s), (const ge_p2 *)(h))
#else