Skip to content

Commit add0b41

Browse files
committed
Perform memcpy in RunCode 'manually'
1 parent e152eb3 commit add0b41

File tree

2 files changed

+106
-3
lines changed

2 files changed

+106
-3
lines changed

Classes/FCryptoEC_Prime.uc

Lines changed: 79 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -253,11 +253,87 @@ static final function int RunCode(
253253
*/
254254
// memcpy(t[P1x], P1->c, 3 * I15_LEN * sizeof(uint16_t));
255255
// memcpy(t[P2x], P2->c, 3 * I15_LEN * sizeof(uint16_t));
256-
// TODO: need static memcpy for these array sizes.
256+
// class'FCryptoMemory'.static.MemCpy_Jacobian_Monty(T[`P1x], P1.C, 222);
257+
// class'FCryptoMemory'.static.MemCpy_Jacobian_Monty(T[`P2x], P2.C, 222);
258+
T[`P1x].X[ 0] = P1.C[0].X[ 0]; T[`P1y].X[ 0] = P1.C[1].X[ 0]; T[`P1z].X[ 0] = P1.C[2].X[ 0];
259+
T[`P1x].X[ 1] = P1.C[0].X[ 1]; T[`P1y].X[ 1] = P1.C[1].X[ 1]; T[`P1z].X[ 1] = P1.C[2].X[ 1];
260+
T[`P1x].X[ 2] = P1.C[0].X[ 2]; T[`P1y].X[ 2] = P1.C[1].X[ 2]; T[`P1z].X[ 2] = P1.C[2].X[ 2];
261+
T[`P1x].X[ 3] = P1.C[0].X[ 3]; T[`P1y].X[ 3] = P1.C[1].X[ 3]; T[`P1z].X[ 3] = P1.C[2].X[ 3];
262+
T[`P1x].X[ 4] = P1.C[0].X[ 4]; T[`P1y].X[ 4] = P1.C[1].X[ 4]; T[`P1z].X[ 4] = P1.C[2].X[ 4];
263+
T[`P1x].X[ 5] = P1.C[0].X[ 5]; T[`P1y].X[ 5] = P1.C[1].X[ 5]; T[`P1z].X[ 5] = P1.C[2].X[ 5];
264+
T[`P1x].X[ 6] = P1.C[0].X[ 6]; T[`P1y].X[ 6] = P1.C[1].X[ 6]; T[`P1z].X[ 6] = P1.C[2].X[ 6];
265+
T[`P1x].X[ 7] = P1.C[0].X[ 7]; T[`P1y].X[ 7] = P1.C[1].X[ 7]; T[`P1z].X[ 7] = P1.C[2].X[ 7];
266+
T[`P1x].X[ 8] = P1.C[0].X[ 8]; T[`P1y].X[ 8] = P1.C[1].X[ 8]; T[`P1z].X[ 8] = P1.C[2].X[ 8];
267+
T[`P1x].X[ 9] = P1.C[0].X[ 9]; T[`P1y].X[ 9] = P1.C[1].X[ 9]; T[`P1z].X[ 9] = P1.C[2].X[ 9];
268+
T[`P1x].X[10] = P1.C[0].X[10]; T[`P1y].X[10] = P1.C[1].X[10]; T[`P1z].X[10] = P1.C[2].X[10];
269+
T[`P1x].X[11] = P1.C[0].X[11]; T[`P1y].X[11] = P1.C[1].X[11]; T[`P1z].X[11] = P1.C[2].X[11];
270+
T[`P1x].X[12] = P1.C[0].X[12]; T[`P1y].X[12] = P1.C[1].X[12]; T[`P1z].X[12] = P1.C[2].X[12];
271+
T[`P1x].X[13] = P1.C[0].X[13]; T[`P1y].X[13] = P1.C[1].X[13]; T[`P1z].X[13] = P1.C[2].X[13];
272+
T[`P1x].X[14] = P1.C[0].X[14]; T[`P1y].X[14] = P1.C[1].X[14]; T[`P1z].X[14] = P1.C[2].X[14];
273+
T[`P1x].X[15] = P1.C[0].X[15]; T[`P1y].X[15] = P1.C[1].X[15]; T[`P1z].X[15] = P1.C[2].X[15];
274+
T[`P1x].X[16] = P1.C[0].X[16]; T[`P1y].X[16] = P1.C[1].X[16]; T[`P1z].X[16] = P1.C[2].X[16];
275+
T[`P1x].X[17] = P1.C[0].X[17]; T[`P1y].X[17] = P1.C[1].X[17]; T[`P1z].X[17] = P1.C[2].X[17];
276+
T[`P1x].X[18] = P1.C[0].X[18]; T[`P1y].X[18] = P1.C[1].X[18]; T[`P1z].X[18] = P1.C[2].X[18];
277+
T[`P1x].X[19] = P1.C[0].X[19]; T[`P1y].X[19] = P1.C[1].X[19]; T[`P1z].X[19] = P1.C[2].X[19];
278+
T[`P1x].X[20] = P1.C[0].X[20]; T[`P1y].X[20] = P1.C[1].X[20]; T[`P1z].X[20] = P1.C[2].X[20];
279+
T[`P1x].X[21] = P1.C[0].X[21]; T[`P1y].X[21] = P1.C[1].X[21]; T[`P1z].X[21] = P1.C[2].X[21];
280+
T[`P1x].X[22] = P1.C[0].X[22]; T[`P1y].X[22] = P1.C[1].X[22]; T[`P1z].X[22] = P1.C[2].X[22];
281+
T[`P1x].X[23] = P1.C[0].X[23]; T[`P1y].X[23] = P1.C[1].X[23]; T[`P1z].X[23] = P1.C[2].X[23];
282+
T[`P1x].X[24] = P1.C[0].X[24]; T[`P1y].X[24] = P1.C[1].X[24]; T[`P1z].X[24] = P1.C[2].X[24];
283+
T[`P1x].X[25] = P1.C[0].X[25]; T[`P1y].X[25] = P1.C[1].X[25]; T[`P1z].X[25] = P1.C[2].X[25];
284+
T[`P1x].X[26] = P1.C[0].X[26]; T[`P1y].X[26] = P1.C[1].X[26]; T[`P1z].X[26] = P1.C[2].X[26];
285+
T[`P1x].X[27] = P1.C[0].X[27]; T[`P1y].X[27] = P1.C[1].X[27]; T[`P1z].X[27] = P1.C[2].X[27];
286+
T[`P1x].X[28] = P1.C[0].X[28]; T[`P1y].X[28] = P1.C[1].X[28]; T[`P1z].X[28] = P1.C[2].X[28];
287+
T[`P1x].X[29] = P1.C[0].X[29]; T[`P1y].X[29] = P1.C[1].X[29]; T[`P1z].X[29] = P1.C[2].X[29];
288+
T[`P1x].X[30] = P1.C[0].X[30]; T[`P1y].X[30] = P1.C[1].X[30]; T[`P1z].X[30] = P1.C[2].X[30];
289+
T[`P1x].X[31] = P1.C[0].X[31]; T[`P1y].X[31] = P1.C[1].X[31]; T[`P1z].X[31] = P1.C[2].X[31];
290+
T[`P1x].X[32] = P1.C[0].X[32]; T[`P1y].X[32] = P1.C[1].X[32]; T[`P1z].X[32] = P1.C[2].X[32];
291+
T[`P1x].X[33] = P1.C[0].X[33]; T[`P1y].X[33] = P1.C[1].X[33]; T[`P1z].X[33] = P1.C[2].X[33];
292+
T[`P1x].X[34] = P1.C[0].X[34]; T[`P1y].X[34] = P1.C[1].X[34]; T[`P1z].X[34] = P1.C[2].X[34];
293+
T[`P1x].X[35] = P1.C[0].X[35]; T[`P1y].X[35] = P1.C[1].X[35]; T[`P1z].X[35] = P1.C[2].X[35];
294+
T[`P1x].X[36] = P1.C[0].X[36]; T[`P1y].X[36] = P1.C[1].X[36]; T[`P1z].X[36] = P1.C[2].X[36];
295+
296+
T[`P2x].X[ 0] = P2.C[0].X[ 0]; T[`P2y].X[ 0] = P2.C[1].X[ 0]; T[`P2z].X[ 0] = P2.C[2].X[ 0];
297+
T[`P2x].X[ 1] = P2.C[0].X[ 1]; T[`P2y].X[ 1] = P2.C[1].X[ 1]; T[`P2z].X[ 1] = P2.C[2].X[ 1];
298+
T[`P2x].X[ 2] = P2.C[0].X[ 2]; T[`P2y].X[ 2] = P2.C[1].X[ 2]; T[`P2z].X[ 2] = P2.C[2].X[ 2];
299+
T[`P2x].X[ 3] = P2.C[0].X[ 3]; T[`P2y].X[ 3] = P2.C[1].X[ 3]; T[`P2z].X[ 3] = P2.C[2].X[ 3];
300+
T[`P2x].X[ 4] = P2.C[0].X[ 4]; T[`P2y].X[ 4] = P2.C[1].X[ 4]; T[`P2z].X[ 4] = P2.C[2].X[ 4];
301+
T[`P2x].X[ 5] = P2.C[0].X[ 5]; T[`P2y].X[ 5] = P2.C[1].X[ 5]; T[`P2z].X[ 5] = P2.C[2].X[ 5];
302+
T[`P2x].X[ 6] = P2.C[0].X[ 6]; T[`P2y].X[ 6] = P2.C[1].X[ 6]; T[`P2z].X[ 6] = P2.C[2].X[ 6];
303+
T[`P2x].X[ 7] = P2.C[0].X[ 7]; T[`P2y].X[ 7] = P2.C[1].X[ 7]; T[`P2z].X[ 7] = P2.C[2].X[ 7];
304+
T[`P2x].X[ 8] = P2.C[0].X[ 8]; T[`P2y].X[ 8] = P2.C[1].X[ 8]; T[`P2z].X[ 8] = P2.C[2].X[ 8];
305+
T[`P2x].X[ 9] = P2.C[0].X[ 9]; T[`P2y].X[ 9] = P2.C[1].X[ 9]; T[`P2z].X[ 9] = P2.C[2].X[ 9];
306+
T[`P2x].X[10] = P2.C[0].X[10]; T[`P2y].X[10] = P2.C[1].X[10]; T[`P2z].X[10] = P2.C[2].X[10];
307+
T[`P2x].X[11] = P2.C[0].X[11]; T[`P2y].X[11] = P2.C[1].X[11]; T[`P2z].X[11] = P2.C[2].X[11];
308+
T[`P2x].X[12] = P2.C[0].X[12]; T[`P2y].X[12] = P2.C[1].X[12]; T[`P2z].X[12] = P2.C[2].X[12];
309+
T[`P2x].X[13] = P2.C[0].X[13]; T[`P2y].X[13] = P2.C[1].X[13]; T[`P2z].X[13] = P2.C[2].X[13];
310+
T[`P2x].X[14] = P2.C[0].X[14]; T[`P2y].X[14] = P2.C[1].X[14]; T[`P2z].X[14] = P2.C[2].X[14];
311+
T[`P2x].X[15] = P2.C[0].X[15]; T[`P2y].X[15] = P2.C[1].X[15]; T[`P2z].X[15] = P2.C[2].X[15];
312+
T[`P2x].X[16] = P2.C[0].X[16]; T[`P2y].X[16] = P2.C[1].X[16]; T[`P2z].X[16] = P2.C[2].X[16];
313+
T[`P2x].X[17] = P2.C[0].X[17]; T[`P2y].X[17] = P2.C[1].X[17]; T[`P2z].X[17] = P2.C[2].X[17];
314+
T[`P2x].X[18] = P2.C[0].X[18]; T[`P2y].X[18] = P2.C[1].X[18]; T[`P2z].X[18] = P2.C[2].X[18];
315+
T[`P2x].X[19] = P2.C[0].X[19]; T[`P2y].X[19] = P2.C[1].X[19]; T[`P2z].X[19] = P2.C[2].X[19];
316+
T[`P2x].X[20] = P2.C[0].X[20]; T[`P2y].X[20] = P2.C[1].X[20]; T[`P2z].X[20] = P2.C[2].X[20];
317+
T[`P2x].X[21] = P2.C[0].X[21]; T[`P2y].X[21] = P2.C[1].X[21]; T[`P2z].X[21] = P2.C[2].X[21];
318+
T[`P2x].X[22] = P2.C[0].X[22]; T[`P2y].X[22] = P2.C[1].X[22]; T[`P2z].X[22] = P2.C[2].X[22];
319+
T[`P2x].X[23] = P2.C[0].X[23]; T[`P2y].X[23] = P2.C[1].X[23]; T[`P2z].X[23] = P2.C[2].X[23];
320+
T[`P2x].X[24] = P2.C[0].X[24]; T[`P2y].X[24] = P2.C[1].X[24]; T[`P2z].X[24] = P2.C[2].X[24];
321+
T[`P2x].X[25] = P2.C[0].X[25]; T[`P2y].X[25] = P2.C[1].X[25]; T[`P2z].X[25] = P2.C[2].X[25];
322+
T[`P2x].X[26] = P2.C[0].X[26]; T[`P2y].X[26] = P2.C[1].X[26]; T[`P2z].X[26] = P2.C[2].X[26];
323+
T[`P2x].X[27] = P2.C[0].X[27]; T[`P2y].X[27] = P2.C[1].X[27]; T[`P2z].X[27] = P2.C[2].X[27];
324+
T[`P2x].X[28] = P2.C[0].X[28]; T[`P2y].X[28] = P2.C[1].X[28]; T[`P2z].X[28] = P2.C[2].X[28];
325+
T[`P2x].X[29] = P2.C[0].X[29]; T[`P2y].X[29] = P2.C[1].X[29]; T[`P2z].X[29] = P2.C[2].X[29];
326+
T[`P2x].X[30] = P2.C[0].X[30]; T[`P2y].X[30] = P2.C[1].X[30]; T[`P2z].X[30] = P2.C[2].X[30];
327+
T[`P2x].X[31] = P2.C[0].X[31]; T[`P2y].X[31] = P2.C[1].X[31]; T[`P2z].X[31] = P2.C[2].X[31];
328+
T[`P2x].X[32] = P2.C[0].X[32]; T[`P2y].X[32] = P2.C[1].X[32]; T[`P2z].X[32] = P2.C[2].X[32];
329+
T[`P2x].X[33] = P2.C[0].X[33]; T[`P2y].X[33] = P2.C[1].X[33]; T[`P2z].X[33] = P2.C[2].X[33];
330+
T[`P2x].X[34] = P2.C[0].X[34]; T[`P2y].X[34] = P2.C[1].X[34]; T[`P2z].X[34] = P2.C[2].X[34];
331+
T[`P2x].X[35] = P2.C[0].X[35]; T[`P2y].X[35] = P2.C[1].X[35]; T[`P2z].X[35] = P2.C[2].X[35];
332+
T[`P2x].X[36] = P2.C[0].X[36]; T[`P2y].X[36] = P2.C[1].X[36]; T[`P2z].X[36] = P2.C[2].X[36];
257333

258334
/*
259-
* Run formulas.
260-
*/
335+
* Run formulas.
336+
*/
261337
for (U = 0; True; ++U)
262338
{
263339
Op = Code[U];

Classes/FCryptoMemory.uc

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -175,3 +175,30 @@ static final function MemSet_SBytes64(
175175
S[ByteIndex] = C;
176176
}
177177
}
178+
179+
// TODO: is this even needed?
180+
// // Specialized for FCryptoEC_Prime.Jacobian 2D arrays.
181+
// static final function MemCpy_Jacobian_Monty(
182+
// out FCryptoEC_Prime._Monty Dst,
183+
// const out FCryptoEC_Prime._Monty Src[3],
184+
// int NumBytes
185+
// )
186+
// {
187+
// local int DstIdx;
188+
// local int SrcIdx_0;
189+
// local int SrcIdx_1;
190+
191+
// // Start with first sub-array, copy items until NumBytes
192+
// // satisfied, moving to next sub-array as needed.
193+
194+
// // TODO: probably also need a temporary byte array for this.
195+
196+
// DstIdx = 0;
197+
// SrcIdx_0 = 0;
198+
// SrcIdx_1 = 0;
199+
// while (NumBytes > 0)
200+
// {
201+
// Dst.X[DstIdx++] = Src[SrcIdx_0].X[SrcIdx_1];
202+
// --NumBytes;
203+
// }
204+
// }

0 commit comments

Comments
 (0)