32 #define TRACE_LEVEL CRYPTO_TRACE_LEVEL
49 #if (PIC32MZ_CRYPTO_PKC_SUPPORT == ENABLED) && defined(_PMD1_BA414MD_MASK)
52 static const uint32_t ucode[] =
54 0x10032004, 0x48013E00, 0x5A800D20, 0x09A80202, 0x011A8090, 0x60287805, 0xBA022780, 0xB2E02FA8,
55 0x0CEE0070, 0x8021E00A, 0xD8039A00, 0xF5802D60, 0x13C8023A, 0x013D8050, 0x60141804, 0xF2013E80,
56 0x50201408, 0x14460540, 0x8070E01D, 0x48078205, 0x8C804FE0, 0x13F804FE, 0x013F8050, 0x2059B804,
57 0xF6035A80, 0xF3204118, 0x11B603AF, 0x8167E059, 0xF8167E05, 0x9E712014, 0x00144011, 0x10854441,
58 0x80001702, 0x41C51100, 0x10000017, 0x0A490012, 0x4024A005, 0x17200000, 0x010000A0, 0x03678918,
59 0x40007893, 0x44001730, 0x01F30209, 0xB1800015, 0x00040002, 0x800D9E24, 0x610001E2, 0x4D10005C,
60 0xC007CE08, 0x26C60000, 0x54001000, 0x0A003640, 0xE45C580A, 0x80E9C29A, 0x7AB18C38, 0x07AD1CC3,
61 0x8173001C, 0x8007AB2C, 0x23C67AD3, 0x023C67EA, 0x080D4B7A, 0xC6C0D4B0, 0x00054001, 0x0000A003,
62 0x640E45C5, 0x80A80E9E, 0x11330E01, 0xE11430E0, 0x5E115026, 0x51C2927C, 0x4080A920, 0x00054001,
63 0x00009C29, 0xA4086A00, 0x3640E460, 0x05D50004, 0x000270A4, 0x90212800, 0xD9039180, 0x1CD40010,
64 0x000A0036, 0x40001E24, 0x610005E2, 0x4D10001C, 0xC007D808, 0x26C60000, 0x54001000, 0x09C58078,
65 0x93440057, 0x89184004, 0x73001F40, 0x609B1800, 0x01802994, 0x0014044A, 0x003E4401, 0x90092444,
66 0x1A004600, 0x00400027, 0x0A490212, 0x8026DCC0, 0x0A02D140, 0x015057C0, 0x00270A49, 0x02123401,
67 0x5C580789, 0x34000078, 0x91840047, 0x3001F406, 0x09B19CC0, 0x0A02D100, 0x158040CD, 0x00044015,
68 0x00804045, 0xA0046730, 0x0240B430, 0x05910054, 0x42191106, 0x80145000, 0x04421911, 0x0640E469,
69 0x073E4175, 0x10044421, 0x91106801, 0x19120680, 0x26DC8003, 0x000200A6, 0x7300250E, 0x40000540,
70 0x0174A180, 0x00100009, 0x00158040, 0xCC01570A, 0x49C80030, 0x249FA863, 0x0A11EB1B, 0x30A11C80,
71 0x030000C0, 0x90500040, 0x00240056, 0x01033005, 0x5C292720, 0x00C0927C, 0x418C2847, 0x2000C000,
72 0x30240000, 0x150005D2, 0x8072001E, 0x24610001, 0xE24D1000, 0x1CC0078E, 0x4C26C672, 0x000C0137,
73 0x89180013, 0x73001F38, 0x009B19C8, 0x0000004C, 0x00030241, 0x01005025, 0xD4001000, 0x09C580A8,
74 0x0E903917, 0x0A490016, 0x7C400839, 0x244021F1, 0x0030E111, 0x08020439, 0xF1093000, 0x51089284,
75 0x01E88020, 0xE4AB59C7, 0x46148001, 0x20441C90, 0x072401C9, 0x0072401C, 0x98028400, 0xA0007E81,
76 0x80900000, 0x05400150, 0x00540015, 0x00054001, 0x50005400, 0x17EA0048, 0x8172001F, 0xB0812224,
77 0x00018050, 0x9EDC6022, 0x69FB1002, 0x269C8000, 0x0005C580, 0xA80E9C29, 0xA4021221, 0x5B442263,
78 0x15B00041, 0x00844004, 0xA0142000, 0x05EAC612, 0x205EB470, 0x2201C800, 0x78F2C234, 0x77AB180D,
79 0x4B7EC040, 0xD4B00004, 0x00027300, 0x1C800D45, 0xB4000150, 0x00540430, 0x000A014F, 0xAD675108,
80 0x44010E01, 0x48442110, 0x01480509, 0x00434030, 0xF624798B, 0x450096D8, 0x85262BF4, 0x005A0142,
81 0x4010D00C, 0x34045362, 0x9298C150, 0x098D8852, 0x62BF4006, 0x20142004, 0x02B59D74, 0x615C8002,
82 0x00048120, 0x8467711A, 0xD72E01C8, 0x0028400A, 0x0004010D, 0x1086D885, 0x262BF000, 0x0601BD50,
83 0x00500434, 0x030F6247, 0x98B47624, 0x798B4771, 0xA99C6AD0, 0x900D8A4A, 0x63050000, 0x50043000,
84 0x05004C00, 0x00771AF0, 0x00050043, 0x42201F20, 0x010005F2, 0x0810025E, 0xDC602269, 0xFB100226,
85 0xAC59D000, 0x80000150, 0x11DC8000, 0x002200A6, 0x44C3A00A, 0x60000400, 0x02020011, 0x00440201,
86 0x011B8014, 0x5CC00720, 0x0341D344, 0x02200517, 0x3001C800, 0xD074C000, 0x15000540, 0x0B000080,
87 0x80040005, 0x00804046, 0xE0051730, 0x01C80094, 0x77C00015, 0x0005400F, 0x00008080, 0x04001100,
88 0x804046E0, 0x05173001, 0xC800D084, 0x91008801, 0x45CC0072, 0x00342129, 0x883E014F, 0x40449E24,
89 0x610009E2, 0x4710029E, 0x34B08D19, 0xE34C08F1, 0xDEDCD097, 0x2DEB4B09, 0x72DE34C0, 0x8F31EACB,
90 0x08D2DEB4, 0xC09931C3, 0x4E78D342, 0x64C78D2C, 0x264B70D3, 0x9E34C09B, 0x2DCC0072, 0x00252128,
91 0x083C0002, 0x00005400, 0x14001140, 0x1B7B72CC, 0x8107AD18, 0xC8107300, 0x1C800946, 0xF1EDCB32,
92 0x041EB472, 0x2119CC00, 0x7200251B, 0xC7D00463, 0x007D0246, 0x38800004, 0x00028053, 0xD1084401,
93 0x0E014240, 0x44900437, 0x8930400A, 0x7AB2CC00, 0x07AD18C1, 0x007AB2C8, 0x04B7AD1C, 0xC40878D2,
94 0xC234B70D, 0x35E34B09, 0x731C34D7, 0x8F1825C7, 0x8059C000, 0x28053D10, 0x844010E0, 0x1484030D,
95 0xC80078D3, 0x4C48978D, 0x18C0817A, 0xB3484CD7, 0xAD38C891, 0x7AB1826C, 0x67AD1C26, 0xCD7AB2CC,
96 0x0817AD34, 0x274E78D1, 0xC23C778D, 0x3025CB7B, 0x738094D7, 0xAD34094D, 0x78D30264, 0xB78D3823,
97 0x4678D2C2, 0x6CC78D34, 0xC489A49F, 0x392827CE, 0x00274C72, 0x001E3CE2, 0x0119C800, 0x7EA4088C,
98 0xD7AD3027, 0x4B72001F, 0x38808F30, 0x00014421, 0xA0214806, 0xF540017F, 0x62025CB7, 0xAD3025CB,
99 0x72000000, 0x17AB3025, 0xCB7EC202, 0x5CB00004, 0x00028053, 0xD1084401, 0x0E014844, 0x21500148,
100 0x05090043, 0x4030D011, 0x47AB34C8, 0x917AD1CC, 0x88A7AB18, 0x814D7AD1, 0xC26C778F, 0x2C80C678,
101 0xF3084C77, 0xAB1825CB, 0x7AD38264, 0xC7AB1C25, 0xC67AD348, 0x0C67CE00, 0x23CE78D3, 0x826CD7F6,
102 0x2084C77A, 0xD1884C77, 0xCE006700, 0x72001E3C, 0x720135FA, 0x902232DE, 0xB4D0991D, 0xC8007CE2,
103 0x0234D000, 0x05108680, 0x85201BD5, 0x0005EDCC, 0x32041EB4, 0x632041CC, 0x00720025, 0x1BC7D004,
104 0xC8007D02, 0x46308000, 0x04000280, 0x53D10844, 0x010E0148, 0x4030DC80, 0x07AB18C8, 0x917AD1CC,
105 0x0817AB2C, 0x23467EC4, 0x023C6730, 0x01C80094, 0x6F1EAC60, 0x272DEB47, 0x08F1DEAC, 0xB31225EB,
106 0x4C12441F, 0x30008F19, 0xE34B08D2, 0xDEDCD221, 0x19EB4622, 0x119E3470, 0x9731C800, 0x7B72C804,
107 0x77AD2C80, 0x477CC202, 0x5C600005, 0x108680AF, 0xD4001000, 0x0A014F44, 0x21100438, 0x05211085,
108 0x40052014, 0x24010D00, 0xC340451E, 0xAC632245, 0xEB473220, 0x9EACB215, 0x19EB4602, 0x519E3472,
109 0x031DE34B, 0x2132DEAC, 0xC2231DEB, 0x4708F1DE, 0x34609919, 0xC8007AB1, 0x823477EC, 0x40264C73,
110 0x001C8009, 0x46F1EACC, 0x0992DEB4, 0xB0972DE3, 0x4609919E, 0xAC730441, 0xEB4D3144, 0x1F30008D,
111 0x2DC80078, 0xD1C80477, 0x8D2C804D, 0x7AB1823C, 0xC7AD1C88, 0x4B72001F, 0x30808F18, 0x00014421,
112 0xA02BF500, 0x04000280, 0x53D10844, 0x010E0142, 0x40449004, 0x37893040, 0x0A7AB2CC, 0x0007AD18,
113 0xC1007AB2, 0xC804B7AD, 0x1880467A, 0xB1CC4087, 0xAD34C400, 0x78D2C234, 0xB78D1C26, 0xC778D2C2,
114 0x5CC70D39, 0xE3C60971, 0xE0167716, 0x02A03A70, 0xA69E24A0, 0x0069CC00, 0x78F2C254, 0xA4005110,
115 0x847EA004, 0x8817EC20, 0x48894010, 0xD01457EA, 0x0048817E, 0xC20089A7, 0xEA08089A, 0x7EC2808C,
116 0xB4005001, 0x0074615C, 0x80020004, 0x8120DCEA, 0x673AC80E, 0x11CB8072, 0x000A1002, 0x80010145,
117 0x44219F40, 0x13140940, 0x0178D28C, 0x48178F2C, 0xC4817AB3, 0x0254A7AD, 0x3425CB78, 0xD38C5027,
118 0x8F1CC502, 0x7AB3825C, 0xE7AD1C23, 0xCA78F282, 0x6CC7EA04, 0x26CC7AD2, 0xC650878D, 0x3423CE78,
119 0xF3823CE7, 0xEA0826CD, 0x7AD1C274, 0xE78D3025, 0xCC7EA288, 0x0477EC24, 0x264A0000, 0x500C3405,
120 0x14000140, 0x31501430, 0x00040002, 0x71602A03, 0xA70A4DEA, 0x9412211E, 0xB1512231, 0xEAC70285,
121 0x1EB4802A, 0x55EACC02, 0x229EB4D0, 0x911DEACE, 0x0224DEB4, 0xC09B31E3, 0xC708F21E, 0x34809939,
122 0xCC0078F1, 0xC2447442, 0x12016700, 0x009C580A, 0x80E9C293, 0x7AA50088, 0x87AC4808, 0x8A7AB300,
123 0xA147AD2C, 0x08937AB3, 0x4261278F, 0x3025CC78, 0xD3425CD7, 0xAB3826CD, 0x73001EAC, 0xE09B39CC,
124 0x007AA542, 0x74E7AA50, 0x26957AA5, 0x026147AC, 0x54274C78, 0x93800137, 0x3001EA94, 0x09C51CC0,
125 0x00002102, 0x1440A110, 0x31440E46, 0x011E7200, 0x000087AA, 0x5008947A, 0xA540A157, 0xAB380A95,
126 0x73001EAC, 0xE09B39CC, 0x0078D382, 0x64E73001, 0xC800D503, 0x5EA86016, 0x55CC0050, 0x005EA860,
127 0x2655CC00, 0x50004000, 0x271602A0, 0x3A70A4DE, 0xAA20224D, 0x10044030, 0xE04DD401, 0x0D109040,
128 0x52D11928, 0x12F90043, 0x44241011, 0x64464A04, 0xF94012D1, 0x09040469, 0x1192813E, 0x51004403,
129 0x0E04DD40, 0x10D10904, 0x052D1192, 0x812F9004, 0x34424101, 0x1644649F, 0x20010009, 0xF2081002,
130 0x9F201100, 0x0DF20910, 0x02D004B4, 0x42410143, 0x4464A04A, 0x04012D10, 0x90404791, 0x192813E5,
131 0x004B4424, 0x1F380044, 0x89F20800, 0x089F2010, 0x0089F389, 0x04489004, 0xB4424101, 0x124464A0,
132 0x4F94012D, 0x10900040, 0x1D185720, 0x00800120, 0x481014B4, 0x464A04BE, 0x812F9090, 0x04464A04,
133 0xA072E01C, 0x80028400, 0xA0004012, 0xD1086814, 0x18000150, 0x00400027, 0x1602A03A, 0x70A4DEAA,
134 0x20224D02, 0x0240A110, 0x30A8105D, 0x020640A1, 0x5030C810, 0x5D020840, 0xA31030E8, 0x1239000A,
135 0x40239011, 0x480145CC, 0x00720035, 0x11544021, 0x10894045, 0x20051730, 0x01C800D4, 0x45540014,
136 0x401500CB, 0x81375004, 0xB4032E04, 0xE8440110, 0x0C381375, 0x00434424, 0x1014B446, 0x4A04A040,
137 0x10D10868, 0x14180001, 0x78D1CC00, 0x878F20C0, 0x087AB1C8, 0x1477AD20, 0x85487AB2, 0x4C5897AD,
138 0x28C1817C, 0xC2424477, 0x8F1C2447, 0x78F2024C, 0xA78D2424, 0xCA7EA002, 0x4477EC20, 0x64897EA0,
139 0x424C87EC, 0x24638973, 0x00000017, 0x8D1CC008, 0x78F20C00, 0x87AB2823, 0xC77AD242, 0x4477AB1C,
140 0xC4817AD2, 0x0C08178D, 0x1C23C778, 0xD2024487, 0x3001E3C8, 0x09321E3C, 0xA08F29FA, 0x820911DF,
141 0xB0309321, 0xFA8A0952, 0x5FB0B095, 0x1DCC0000, 0x005FA811, 0x2201FB09, 0x12221111, 0x17C80800,
142 0x227EA28C, 0x48173000, 0x000178D1, 0xCC0087CE, 0x24C00878, 0xF2023C77, 0xCC042447, 0x44041109,
143 0x17CC04C0, 0x0073001F, 0xA8910221, 0xCC000000, 0x5FA8B102, 0x25CC0000, 0x021F3023, 0x0021F38A,
144 0x30021F30, 0x330205CC, 0x00000200, 0x00144441, 0xF20A0008, 0x9E414304, 0x29FA8112, 0x801FB091,
145 0x2821CC00, 0x00004000, 0x28053D02, 0x0240A1D0, 0x30E805C5, 0xC8000200, 0x0C001716, 0x01C09271,
146 0x44CC0924, 0x0039009A, 0x40429039, 0x38017DCC, 0x00944550, 0x21A40A1D, 0x030D8026, 0xDCC00400,
147 0x19008A40, 0x42D03938, 0x017DCC00, 0x00021000, 0xC4022D01, 0x0B80119C, 0xC0000021, 0x000D4022,
148 0xD010B801, 0x7DCC0094, 0x454C0003, 0x02414001, 0x00008080, 0x070A68C0, 0x0171601C, 0x0927144C,
149 0xC0924086, 0x9028B40C, 0x36009B73, 0x001000C4, 0x0235011C, 0x40E4E005, 0xF7300100, 0x0A402350,
150 0x11B8017D, 0xCC000300, 0x0C000302, 0x42014F40, 0x821029B4, 0x0C7A0171, 0x72001020, 0x240A7103,
151 0x1C805C5C, 0x80040271, 0x00438052, 0x1009E400, 0x52014240, 0x10D00C34, 0x04536292, 0x98C15008,
152 0xED885262, 0xBF720000, 0x80030005, 0xC5807024, 0x9C513302, 0x49000E40, 0x269011C4, 0x0E4E005F,
153 0x73000000, 0x84007100, 0x8A4046E0, 0x05173001, 0xC800D445, 0x4C000302, 0x41400100, 0x00808008,
154 0x078A01D6, 0x40009008, 0x04046E01, 0xC8030010, 0x0824010E, 0x0142D88B, 0x26340500, 0x05400100,
155 0x00400015, 0x00054001
169 volatile uint32_t *dest;
174 dest = KVA0_TO_KVA1(__CRYPTO1UCM_BASE);
177 for(i = 0; i <
arraysize(ucode) / 9; i++)
180 dest[0] = src[0] >> 14;
181 dest[1] = src[0] << 4;
182 dest[1] |= src[1] >> 28;
183 dest[2] = src[1] >> 10;
184 dest[3] = src[1] << 8;
185 dest[3] |= src[2] >> 24;
186 dest[4] = src[2] >> 6;
187 dest[5] = src[2] << 12;
188 dest[5] |= src[3] >> 20;
189 dest[6] = src[3] >> 2;
190 dest[7] = src[3] << 16;
191 dest[7] |= src[4] >> 16;
192 dest[8] = src[4] << 2;
193 dest[8] |= src[5] >> 30;
194 dest[9] = src[5] >> 12;
195 dest[10] = src[5] << 6;
196 dest[10] |= src[6] >> 26;
197 dest[11] = src[6] >> 8;
198 dest[12] = src[6] << 10;
199 dest[12] |= src[7] >> 22;
200 dest[13] = src[7] >> 4;
201 dest[14] = src[7] << 14;
202 dest[14] |= src[8] >> 18;
206 for(j = 0; j < 16; j++)
231 volatile uint32_t *
p;
234 p = (uint32_t *) __CRYPTO1SCM_BASE;
237 for(i = 0; i < 608; i++)
251 void ba414eImportArray(
const uint8_t *src,
size_t length,
uint_t slot)
256 volatile uint32_t *
p;
262 for(i = 0, j = 0; i <
length; i++)
267 temp = src[
length - i - 1];
270 temp |= src[
length - i - 1] << 8;
273 temp |= src[
length - i - 1] << 16;
276 temp |= src[
length - i - 1] << 24;
310 volatile uint32_t *
p;
316 for(i = 0; i <
length; i++)
336 void ba414eImportMpi(
const Mpi *src,
uint_t slot)
340 volatile uint32_t *
p;
349 for(i = 0; i <
length && i < 16; i++)
373 volatile uint32_t *
p;
379 for(i = 0; i <
length; i++)
398 volatile uint32_t *
p;
415 for(i = 0; i <
length; i++)
417 dest->
data[i] =
p[i];
421 for(; i < dest->
size; i++)
435 #if (MPI_SUPPORT == ENABLED)
462 if(
mpiIsOdd(
p) && pLen <= 16 && aLen <= pLen && eLen <= pLen)
498 PKCONTROL = _PKCONTROL_START_MASK;
501 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
522 #if (EC_SUPPORT == ENABLED)
559 modLen = (curve->fieldSize + 31) / 32;
561 orderLen = (curve->orderSize + 31) / 32;
564 if(modLen <= 4 && orderLen <= 4)
568 else if(modLen <= 8 && orderLen <= 8)
572 else if(modLen <= 16 && orderLen <= 16)
607 PKCONTROL = _PKCONTROL_START_MASK;
610 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
615 if((PKSTATUS & _PKSTATUS_PXINF_MASK) != 0)
660 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
666 #if (CRYPTO_STATIC_MEM_SUPPORT == DISABLED)
677 state->
curve = curve;
701 #if (ECDSA_SUPPORT == ENABLED)
715 const EcPrivateKey *privateKey,
const uint8_t *digest,
size_t digestLen,
726 if(privateKey == NULL || digest == NULL || signature == NULL)
730 if(privateKey->
curve == NULL)
734 curve = privateKey->
curve;
737 modLen = (curve->fieldSize + 31) / 32;
739 orderLen = (curve->orderSize + 31) / 32;
742 if(modLen <= 4 && orderLen <= 4)
746 else if(modLen <= 8 && orderLen <= 8)
750 else if(modLen <= 16 && orderLen <= 16)
782 digestLen =
MIN(digestLen, (curve->orderSize + 7) / 8);
791 PKCONTROL = _PKCONTROL_START_MASK;
794 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
799 if((PKSTATUS & (_PKSTATUS_SIGINVAL_MASK | _PKSTATUS_CPLINVAL_MASK |
800 _PKSTATUS_PXINF_MASK | _PKSTATUS_PXNOC_MASK)) == 0)
803 signature->
curve = curve;
838 const uint8_t *digest,
size_t digestLen,
const EcdsaSignature *signature)
847 if(publicKey == NULL || digest == NULL || signature == NULL)
851 if(publicKey->
curve == NULL)
877 curve = publicKey->
curve;
880 modLen = (curve->fieldSize + 31) / 32;
882 orderLen = (curve->orderSize + 31) / 32;
885 if(modLen <= 4 && orderLen <= 4)
889 else if(modLen <= 8 && orderLen <= 8)
893 else if(modLen <= 16 && orderLen <= 16)
921 digestLen =
MIN(digestLen, (curve->orderSize + 7) / 8);
930 PKCONTROL = _PKCONTROL_START_MASK;
933 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
938 if((PKSTATUS & (_PKSTATUS_SIGINVAL_MASK | _PKSTATUS_CPLINVAL_MASK |
939 _PKSTATUS_PXINF_MASK | _PKSTATUS_PXNOC_MASK)) == 0)
956 #if (X25519_SUPPORT == ENABLED)
968 volatile uint32_t *arg;
999 arg[7] &= 0x7FFFFFFF;
1026 arg[0] &= 0xFFFFFFF8;
1027 arg[7] &= 0x7FFFFFFF;
1028 arg[7] |= 0x40000000;
1040 PKCONTROL = _PKCONTROL_START_MASK;
1043 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
1066 #if (ED25519_SUPPORT == ENABLED)
1079 volatile uint32_t *arg;
1089 arg[0] = 0xFFFFFFED;
1090 arg[1] = 0xFFFFFFFF;
1091 arg[2] = 0xFFFFFFFF;
1092 arg[3] = 0xFFFFFFFF;
1093 arg[4] = 0xFFFFFFFF;
1094 arg[5] = 0xFFFFFFFF;
1095 arg[6] = 0xFFFFFFFF;
1096 arg[7] = 0x7FFFFFFF;
1100 arg[0] = 0xBE8FD3F4;
1101 arg[1] = 0x01DB17FD;
1102 arg[2] = 0x5F8C52E7;
1103 arg[3] = 0x21430EEF;
1104 arg[4] = 0x78310D20;
1105 arg[5] = 0xCB27240F;
1106 arg[6] = 0xE53F8A4D;
1107 arg[7] = 0x590456B4;
1111 arg[0] = (
p->x[1] << 29) |
p->x[0];
1112 arg[1] = (
p->x[2] << 26) | (
p->x[1] >> 3);
1113 arg[2] = (
p->x[3] << 23) | (
p->x[2] >> 6);
1114 arg[3] = (
p->x[4] << 20) | (
p->x[3] >> 9);
1115 arg[4] = (
p->x[5] << 17) | (
p->x[4] >> 12);
1116 arg[5] = (
p->x[6] << 14) | (
p->x[5] >> 15);
1117 arg[6] = (
p->x[7] << 11) | (
p->x[6] >> 18);
1118 arg[7] = (
p->x[8] << 8) | (
p->x[7] >> 21);
1122 arg[0] = (
p->y[1] << 29) |
p->y[0];
1123 arg[1] = (
p->y[2] << 26) | (
p->y[1] >> 3);
1124 arg[2] = (
p->y[3] << 23) | (
p->y[2] >> 6);
1125 arg[3] = (
p->y[4] << 20) | (
p->y[3] >> 9);
1126 arg[4] = (
p->y[5] << 17) | (
p->y[4] >> 12);
1127 arg[5] = (
p->y[6] << 14) | (
p->y[5] >> 15);
1128 arg[6] = (
p->y[7] << 11) | (
p->y[6] >> 18);
1129 arg[7] = (
p->y[8] << 8) | (
p->y[7] >> 21);
1152 PKCONTROL = _PKCONTROL_START_MASK;
1155 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
1161 r->x[0] = arg[0] & 0x1FFFFFFF;
1162 r->x[1] = (arg[0] >> 29) | ((arg[1] << 3) & 0x1FFFFFFF);
1163 r->x[2] = (arg[1] >> 26) | ((arg[2] << 6) & 0x1FFFFFFF);
1164 r->x[3] = (arg[2] >> 23) | ((arg[3] << 9) & 0x1FFFFFFF);
1165 r->x[4] = (arg[3] >> 20) | ((arg[4] << 12) & 0x1FFFFFFF);
1166 r->x[5] = (arg[4] >> 17) | ((arg[5] << 15) & 0x1FFFFFFF);
1167 r->x[6] = (arg[5] >> 14) | ((arg[6] << 18) & 0x1FFFFFFF);
1168 r->x[7] = (arg[6] >> 11) | ((arg[7] << 21) & 0x1FFFFFFF);
1169 r->x[8] = arg[7] >> 8;
1173 r->y[0] = arg[0] & 0x1FFFFFFF;
1174 r->y[1] = (arg[0] >> 29) | ((arg[1] << 3) & 0x1FFFFFFF);
1175 r->y[2] = (arg[1] >> 26) | ((arg[2] << 6) & 0x1FFFFFFF);
1176 r->y[3] = (arg[2] >> 23) | ((arg[3] << 9) & 0x1FFFFFFF);
1177 r->y[4] = (arg[3] >> 20) | ((arg[4] << 12) & 0x1FFFFFFF);
1178 r->y[5] = (arg[4] >> 17) | ((arg[5] << 15) & 0x1FFFFFFF);
1179 r->y[6] = (arg[5] >> 14) | ((arg[6] << 18) & 0x1FFFFFFF);
1180 r->y[7] = (arg[6] >> 11) | ((arg[7] << 21) & 0x1FFFFFFF);
1181 r->y[8] = arg[7] >> 8;
1203 const uint8_t *k1,
const Ed25519Point *
p,
const uint8_t *k2,