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)
644 #if (ECDSA_SUPPORT == ENABLED)
658 const EcPrivateKey *privateKey,
const uint8_t *digest,
size_t digestLen,
669 if(privateKey == NULL || digest == NULL || signature == NULL)
673 if(privateKey->
curve == NULL)
677 curve = privateKey->
curve;
680 modLen = (curve->fieldSize + 31) / 32;
682 orderLen = (curve->orderSize + 31) / 32;
685 if(modLen <= 4 && orderLen <= 4)
689 else if(modLen <= 8 && orderLen <= 8)
693 else if(modLen <= 16 && orderLen <= 16)
725 digestLen =
MIN(digestLen, (curve->orderSize + 7) / 8);
734 PKCONTROL = _PKCONTROL_START_MASK;
737 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
742 if((PKSTATUS & (_PKSTATUS_SIGINVAL_MASK | _PKSTATUS_CPLINVAL_MASK |
743 _PKSTATUS_PXINF_MASK | _PKSTATUS_PXNOC_MASK)) == 0)
746 signature->
curve = curve;
781 const uint8_t *digest,
size_t digestLen,
const EcdsaSignature *signature)
790 if(publicKey == NULL || digest == NULL || signature == NULL)
794 if(publicKey->
curve == NULL)
820 curve = publicKey->
curve;
823 modLen = (curve->fieldSize + 31) / 32;
825 orderLen = (curve->orderSize + 31) / 32;
828 if(modLen <= 4 && orderLen <= 4)
832 else if(modLen <= 8 && orderLen <= 8)
836 else if(modLen <= 16 && orderLen <= 16)
864 digestLen =
MIN(digestLen, (curve->orderSize + 7) / 8);
873 PKCONTROL = _PKCONTROL_START_MASK;
876 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
881 if((PKSTATUS & (_PKSTATUS_SIGINVAL_MASK | _PKSTATUS_CPLINVAL_MASK |
882 _PKSTATUS_PXINF_MASK | _PKSTATUS_PXNOC_MASK)) == 0)
899 #if (X25519_SUPPORT == ENABLED)
911 volatile uint32_t *arg;
942 arg[7] &= 0x7FFFFFFF;
969 arg[0] &= 0xFFFFFFF8;
970 arg[7] &= 0x7FFFFFFF;
971 arg[7] |= 0x40000000;
983 PKCONTROL = _PKCONTROL_START_MASK;
986 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
1009 #if (ED25519_SUPPORT == ENABLED)
1022 volatile uint32_t *arg;
1032 arg[0] = 0xFFFFFFED;
1033 arg[1] = 0xFFFFFFFF;
1034 arg[2] = 0xFFFFFFFF;
1035 arg[3] = 0xFFFFFFFF;
1036 arg[4] = 0xFFFFFFFF;
1037 arg[5] = 0xFFFFFFFF;
1038 arg[6] = 0xFFFFFFFF;
1039 arg[7] = 0x7FFFFFFF;
1043 arg[0] = 0xBE8FD3F4;
1044 arg[1] = 0x01DB17FD;
1045 arg[2] = 0x5F8C52E7;
1046 arg[3] = 0x21430EEF;
1047 arg[4] = 0x78310D20;
1048 arg[5] = 0xCB27240F;
1049 arg[6] = 0xE53F8A4D;
1050 arg[7] = 0x590456B4;
1054 arg[0] = (
p->x[1] << 29) |
p->x[0];
1055 arg[1] = (
p->x[2] << 26) | (
p->x[1] >> 3);
1056 arg[2] = (
p->x[3] << 23) | (
p->x[2] >> 6);
1057 arg[3] = (
p->x[4] << 20) | (
p->x[3] >> 9);
1058 arg[4] = (
p->x[5] << 17) | (
p->x[4] >> 12);
1059 arg[5] = (
p->x[6] << 14) | (
p->x[5] >> 15);
1060 arg[6] = (
p->x[7] << 11) | (
p->x[6] >> 18);
1061 arg[7] = (
p->x[8] << 8) | (
p->x[7] >> 21);
1065 arg[0] = (
p->y[1] << 29) |
p->y[0];
1066 arg[1] = (
p->y[2] << 26) | (
p->y[1] >> 3);
1067 arg[2] = (
p->y[3] << 23) | (
p->y[2] >> 6);
1068 arg[3] = (
p->y[4] << 20) | (
p->y[3] >> 9);
1069 arg[4] = (
p->y[5] << 17) | (
p->y[4] >> 12);
1070 arg[5] = (
p->y[6] << 14) | (
p->y[5] >> 15);
1071 arg[6] = (
p->y[7] << 11) | (
p->y[6] >> 18);
1072 arg[7] = (
p->y[8] << 8) | (
p->y[7] >> 21);
1095 PKCONTROL = _PKCONTROL_START_MASK;
1098 while((PKSTATUS & _PKSTATUS_BUSY_MASK) != 0)
1104 r->x[0] = arg[0] & 0x1FFFFFFF;
1105 r->x[1] = (arg[0] >> 29) | ((arg[1] << 3) & 0x1FFFFFFF);
1106 r->x[2] = (arg[1] >> 26) | ((arg[2] << 6) & 0x1FFFFFFF);
1107 r->x[3] = (arg[2] >> 23) | ((arg[3] << 9) & 0x1FFFFFFF);
1108 r->x[4] = (arg[3] >> 20) | ((arg[4] << 12) & 0x1FFFFFFF);
1109 r->x[5] = (arg[4] >> 17) | ((arg[5] << 15) & 0x1FFFFFFF);
1110 r->x[6] = (arg[5] >> 14) | ((arg[6] << 18) & 0x1FFFFFFF);
1111 r->x[7] = (arg[6] >> 11) | ((arg[7] << 21) & 0x1FFFFFFF);
1112 r->x[8] = arg[7] >> 8;
1116 r->y[0] = arg[0] & 0x1FFFFFFF;
1117 r->y[1] = (arg[0] >> 29) | ((arg[1] << 3) & 0x1FFFFFFF);
1118 r->y[2] = (arg[1] >> 26) | ((arg[2] << 6) & 0x1FFFFFFF);
1119 r->y[3] = (arg[2] >> 23) | ((arg[3] << 9) & 0x1FFFFFFF);
1120 r->y[4] = (arg[3] >> 20) | ((arg[4] << 12) & 0x1FFFFFFF);
1121 r->y[5] = (arg[4] >> 17) | ((arg[5] << 15) & 0x1FFFFFFF);
1122 r->y[6] = (arg[5] >> 14) | ((arg[6] << 18) & 0x1FFFFFFF);
1123 r->y[7] = (arg[6] >> 11) | ((arg[7] << 21) & 0x1FFFFFFF);
1124 r->y[8] = arg[7] >> 8;
1146 const uint8_t *k1,
const Ed25519Point *
p,
const uint8_t *k2,