From: Chris Duncan Date: Sun, 5 Jan 2025 23:31:19 +0000 (-0800) Subject: Document addition steps using structure from blake reference material. X-Git-Url: https://zoso.dev/?a=commitdiff_plain;h=c38ae68bce5b6de9c17332e55b9a5bc7d13015f9;p=libnemo.git Document addition steps using structure from blake reference material. --- diff --git a/src/lib/workers/powgpu.ts b/src/lib/workers/powgpu.ts index 67b5105..a72f631 100644 --- a/src/lib/workers/powgpu.ts +++ b/src/lib/workers/powgpu.ts @@ -110,8 +110,10 @@ export class PowGpu extends WorkerInterface { fn G (v: ptr>, m: ptr>, a: u32, b: u32, c: u32, d: u32, ix: u32, iy: u32) { var o0: u32; var o1: u32; + var xor0: u32; + var xor1: u32; - // add_uint64(v, a, (*v)[b], (*v)[b+1u]); + // a = a + b; o0 = (*v)[a] + (*v)[b]; o1 = (*v)[a+1u] + (*v)[b+1u]; if ((*v)[a] > 0xFFFFFFFFu - (*v)[b]) { @@ -120,7 +122,7 @@ export class PowGpu extends WorkerInterface { (*v)[a] = o0; (*v)[a+1u] = o1; - // add_uint64(v, a, (*m)[ix], (*m)[ix+1u]); + // a = a + m[sigma[r][2*i+0]]; o0 = (*v)[a] + (*m)[ix]; o1 = (*v)[a+1u] + (*m)[ix+1u]; if ((*v)[a] > 0xFFFFFFFFu - (*m)[ix]) { @@ -129,17 +131,13 @@ export class PowGpu extends WorkerInterface { (*v)[a] = o0; (*v)[a+1u] = o1; - - - // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated to the right by 32 bits - var xor0: u32 = (*v)[d] ^ (*v)[a]; - var xor1: u32 = (*v)[d+1u] ^ (*v)[a+1u]; + // d = rotr64(d ^ a, 32); + xor0 = (*v)[d] ^ (*v)[a]; + xor1 = (*v)[d+1u] ^ (*v)[a+1u]; (*v)[d] = xor1; (*v)[d+1u] = xor0; - - - // add_uint64(v, c, (*v)[d], (*v)[d+1u]); + // c = c + d; o0 = (*v)[c] + (*v)[d]; o1 = (*v)[c+1u] + (*v)[d+1u]; if ((*v)[c] > 0xFFFFFFFFu - (*v)[d]) { @@ -148,17 +146,13 @@ export class PowGpu extends WorkerInterface { (*v)[c] = o0; (*v)[c+1u] = o1; - - - // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 24 bits + // b = rotr64(b ^ c, 24); xor0 = (*v)[b] ^ (*v)[c]; xor1 = (*v)[b+1u] ^ (*v)[c+1u]; (*v)[b] = (xor0 >> 24u) ^ (xor1 << 8u); (*v)[b+1u] = (xor1 >> 24u) ^ (xor0 << 8u); - - - // add_uint64(v, a, (*v)[b], (*v)[b+1u]); + // a = a + b; o0 = (*v)[a] + (*v)[b]; o1 = (*v)[a+1u] + (*v)[b+1u]; if ((*v)[a] > 0xFFFFFFFFu - (*v)[b]) { @@ -167,7 +161,7 @@ export class PowGpu extends WorkerInterface { (*v)[a] = o0; (*v)[a+1u] = o1; - // add_uint64(v, a, (*m)[iy], (*m)[iy+1u]); + // a = a + m[sigma[r][2*i+1]]; o0 = (*v)[a] + (*m)[iy]; o1 = (*v)[a+1u] + (*m)[iy+1u]; if ((*v)[a] > 0xFFFFFFFFu - (*m)[iy]) { @@ -176,17 +170,13 @@ export class PowGpu extends WorkerInterface { (*v)[a] = o0; (*v)[a+1u] = o1; - - - // v[d,d+1] = (v[d,d+1] xor v[a,a+1]) rotated right by 16 bits + // d = rotr64(d ^ a, 16) xor0 = (*v)[d] ^ (*v)[a]; xor1 = (*v)[d+1u] ^ (*v)[a+1u]; (*v)[d] = (xor0 >> 16u) ^ (xor1 << 16u); (*v)[d+1u] = (xor1 >> 16u) ^ (xor0 << 16u); - - - // add_uint64(v, c, (*v)[d], (*v)[d+1u]); + // c = c + d; o0 = (*v)[c] + (*v)[d]; o1 = (*v)[c+1u] + (*v)[d+1u]; if ((*v)[c] > 0xFFFFFFFFu - (*v)[d]) { @@ -195,9 +185,7 @@ export class PowGpu extends WorkerInterface { (*v)[c] = o0; (*v)[c+1u] = o1; - - - // v[b,b+1] = (v[b,b+1] xor v[c,c+1]) rotated right by 63 bits + // b = rotr64(b ^ c, 63) xor0 = (*v)[b] ^ (*v)[c]; xor1 = (*v)[b+1u] ^ (*v)[c+1u]; (*v)[b] = (xor1 >> 31u) ^ (xor0 << 1u);