From 0561a26a008d236d161df126a0b8fa71ad0303ef Mon Sep 17 00:00:00 2001 From: Chris Duncan Date: Fri, 10 Jan 2025 15:13:24 -0800 Subject: [PATCH] Rename compute shader and remove old version. --- package.json | 1 - .../{gpu-compute.wgsl => compute.wgsl} | 0 src/shaders/gpu-compute.ts | 7668 ----------------- src/shaders/index.ts | 6 +- 4 files changed, 3 insertions(+), 7672 deletions(-) rename src/shaders/{gpu-compute.wgsl => compute.wgsl} (100%) delete mode 100644 src/shaders/gpu-compute.ts diff --git a/package.json b/package.json index dc81fa6..8565097 100644 --- a/package.json +++ b/package.json @@ -43,7 +43,6 @@ "build": "rm -rf dist && tsc && node esbuild.mjs" }, "imports": { - "#dist/*": "./dist/*", "#classes": "./src/classes/index.js", "#shaders": "./src/shaders/index.js" }, diff --git a/src/shaders/gpu-compute.wgsl b/src/shaders/compute.wgsl similarity index 100% rename from src/shaders/gpu-compute.wgsl rename to src/shaders/compute.wgsl diff --git a/src/shaders/gpu-compute.ts b/src/shaders/gpu-compute.ts deleted file mode 100644 index cee367c..0000000 --- a/src/shaders/gpu-compute.ts +++ /dev/null @@ -1,7668 +0,0 @@ -export const NanoPowGpuComputeShader = ` -struct UBO { - blockhash: array, 2>, - random: u32, - threshold: u32 -}; -@group(0) @binding(0) var ubo: UBO; - -struct WORK { - nonce: vec2, - found: atomic -}; -@group(0) @binding(1) var work: WORK; - -/** -* Defined separately from uint v[32] below as the original value is required -* to calculate the second uint32 of the digest for threshold comparison -*/ -const BLAKE2B_IV32_1: u32 = 0x6A09E667u; - -/** -* Main compute function -* A random u32 provided by the UBO is copied to form a pair. Each component of -* this 8-byte value is then XOR'd with a different dimensional index from -* the thread identifier. -*/ -@compute @workgroup_size(256) -fn main(@builtin(global_invocation_id) id: vec3) { - if (atomicLoad(&work.found) != 0u) { return; } - - let threshold: u32 = ubo.threshold; - - /** - * Initialize (nonce||blockhash) concatenation - */ - var m0: u32 = ubo.random ^ id.x; - var m1: u32 = ubo.random ^ id.y; - var m2: u32 = ubo.blockhash[0u].x; - var m3: u32 = ubo.blockhash[0u].y; - var m4: u32 = ubo.blockhash[0u].z; - var m5: u32 = ubo.blockhash[0u].w; - var m6: u32 = ubo.blockhash[1u].x; - var m7: u32 = ubo.blockhash[1u].y; - var m8: u32 = ubo.blockhash[1u].z; - var m9: u32 = ubo.blockhash[1u].w; - - /** - * Compression buffer intialized to 2 instances of initialization vector - * The following values have been modified from the BLAKE2B_IV: - * OUTLEN is constant 8 bytes - * v[0u] ^= 0x01010000u ^ uint(OUTLEN); - * INLEN is constant 40 bytes: work value (8) + block hash (32) - * v[24u] ^= uint(INLEN); - * It is always the "last" compression at this INLEN - * v[28u] = ~v[28u]; - * v[29u] = ~v[29u]; - */ - var v0: u32 = 0xF2BDC900u; - var v1: u32 = 0x6A09E667u; - var v2: u32 = 0x84CAA73Bu; - var v3: u32 = 0xBB67AE85u; - var v4: u32 = 0xFE94F82Bu; - var v5: u32 = 0x3C6EF372u; - var v6: u32 = 0x5F1D36F1u; - var v7: u32 = 0xA54FF53Au; - var v8: u32 = 0xADE682D1u; - var v9: u32 = 0x510E527Fu; - var v10: u32 = 0x2B3E6C1Fu; - var v11: u32 = 0x9B05688Cu; - var v12: u32 = 0xFB41BD6Bu; - var v13: u32 = 0x1F83D9ABu; - var v14: u32 = 0x137E2179u; - var v15: u32 = 0x5BE0CD19u; - var v16: u32 = 0xF3BCC908u; - var v17: u32 = 0x6A09E667u; - var v18: u32 = 0x84CAA73Bu; - var v19: u32 = 0xBB67AE85u; - var v20: u32 = 0xFE94F82Bu; - var v21: u32 = 0x3C6EF372u; - var v22: u32 = 0x5F1D36F1u; - var v23: u32 = 0xA54FF53Au; - var v24: u32 = 0xADE682F9u; - var v25: u32 = 0x510E527Fu; - var v26: u32 = 0x2B3E6C1Fu; - var v27: u32 = 0x9B05688Cu; - var v28: u32 = 0x04BE4294u; - var v29: u32 = 0xE07C2654u; - var v30: u32 = 0x137E2179u; - var v31: u32 = 0x5BE0CD19u; - - - - - - /** - * Twelve rounds of G mixing as part of BLAKE2b compression step. - * Each sigma r index correlates with the reference implementation, but each - * sigma i index, and each v index, is doubled due to using two u32 array - * elements to represent one uint64_t. - */ - var o0: u32; - var o1: u32; - var xor0: u32; - var xor1: u32; - - /**************************************************************************** - * ROUND(0) * - ****************************************************************************/ - - /** - * r=0, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m0; - o1 = v1 + m1; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v0 + m2; - o1 = v1 + m3; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=0, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m4; - o1 = v3 + m5; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m6; - o1 = v3 + m7; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=0, i=2(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v4 + m8; - o1 = v5 + m9; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=0, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=0, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=0, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=0, i=6(x2), a=v[4-6], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=0, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(1) * - ****************************************************************************/ - - /** - * r=1, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=1, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m8; - o1 = v3 + m9; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=1, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=1, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=1, i=4(x2), a=v[0-1], b=v[11-12], c=v[21-22], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m2; - o1 = v1 + m3; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=1, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m0; - o1 = v3 + m1; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m4; - o1 = v3 + m5; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=1, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=1, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v6 + m6; - o1 = v7 + m7; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(2) * - ****************************************************************************/ - - /** - * r=2, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=2, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m0; - o1 = v3 + m1; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=2, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m4; - o1 = v5 + m5; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=2, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=2, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=2, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m6; - o1 = v3 + m7; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=2, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m2; - o1 = v5 + m3; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=2, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v6 + m8; - o1 = v7 + m9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(3) * - ****************************************************************************/ - - /** - * r=3, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=3, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m6; - o1 = v3 + m7; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m2; - o1 = v3 + m3; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=3, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=3, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=3, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m4; - o1 = v1 + m5; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=3, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=3, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v4 + m8; - o1 = v5 + m9; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m0; - o1 = v5 + m1; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=3, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(4) * - ****************************************************************************/ - - /** - * r=4, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v0 + m0; - o1 = v1 + m1; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=4, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=4, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v4 + m4; - o1 = v5 + m5; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m8; - o1 = v5 + m9; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=4, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=4, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v0 + m2; - o1 = v1 + m3; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=4, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=4, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=4, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v6 + m6; - o1 = v7 + m7; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(5) * - ****************************************************************************/ - - /** - * r=5, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m4; - o1 = v1 + m5; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=5, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=5, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v4 + m0; - o1 = v5 + m1; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=5, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v6 + m6; - o1 = v7 + m7; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=5, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m8; - o1 = v1 + m9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=5, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=5, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=5, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v6 + m2; - o1 = v7 + m3; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(6) * - ****************************************************************************/ - - /** - * r=6, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=6, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m2; - o1 = v3 + m3; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=6, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=6, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v6 + m8; - o1 = v7 + m9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=6, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m0; - o1 = v1 + m1; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=6, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m6; - o1 = v3 + m7; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=6, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m4; - o1 = v5 + m5; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=6, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(7) * - ****************************************************************************/ - - /** - * r=7, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=7, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=7, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m2; - o1 = v5 + m3; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=7, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v6 + m6; - o1 = v7 + m7; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=7, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v0 + m0; - o1 = v1 + m1; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=7, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m8; - o1 = v3 + m9; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=7, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=7, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v6 + m4; - o1 = v7 + m5; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(8) * - ****************************************************************************/ - - /** - * r=8, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=8, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=8, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m6; - o1 = v5 + m7; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=8, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v6 + m0; - o1 = v7 + m1; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=8, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v0 + m4; - o1 = v1 + m5; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=8, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=8, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v4 + m2; - o1 = v5 + m3; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v4 + m8; - o1 = v5 + m9; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=8, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(9) * - ****************************************************************************/ - - /** - * r=9, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v0 + m4; - o1 = v1 + m5; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=9, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m8; - o1 = v3 + m9; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=9, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=9, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v6 + m2; - o1 = v7 + m3; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=9, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=9, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=9, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v4 + m6; - o1 = v5 + m7; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=9, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v6 + m0; - o1 = v7 + m1; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(10) * - ****************************************************************************/ - - /** - * r=10, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m0; - o1 = v1 + m1; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v0 + m2; - o1 = v1 + m3; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=10, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m4; - o1 = v3 + m5; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m6; - o1 = v3 + m7; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=10, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v4 + m8; - o1 = v5 + m9; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=10, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=10, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=10, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=10, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=10, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * ROUND(11) * - ****************************************************************************/ - - /** - * r=11, i=0(x2), a=v[0-1], b=v[8-9], c=v[16-17], d=v[24-25] - */ - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v8; - o1 = v1 + v9; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v0; - xor1 = v25 ^ v1; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v24; - o1 = v17 + v25; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v16; - xor1 = v9 ^ v17; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=11, i=1(x2), a=v[2-3], b=v[10-11], c=v[18-19], d=v[26-27] - */ - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m8; - o1 = v3 + m9; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v10; - o1 = v3 + v11; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v2 + 0u; - // o1 = v3 + 0u; - // if (v2 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v2 = o0; - // v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v2; - xor1 = v27 ^ v3; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v26; - o1 = v19 + v27; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v18; - xor1 = v11 ^ v19; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=11, i=2(x2), a=v[4-5], b=v[12-13], c=v[20-21], d=v[28-29] - */ - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v12; - o1 = v5 + v13; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v4; - xor1 = v29 ^ v5; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v28; - o1 = v21 + v29; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v20; - xor1 = v13 ^ v21; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=11, i=3(x2), a=v[6-7], b=v[14-15], c=v[22-23], d=v[30-31] - */ - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v14; - o1 = v7 + v15; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v6; - xor1 = v31 ^ v7; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v30; - o1 = v23 + v31; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v22; - xor1 = v15 ^ v23; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=11, i=4(x2), a=v[0-1], b=v[10-11], c=v[20-21], d=v[30-31] - */ - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v0 + m2; - o1 = v1 + m3; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = xor1; - v31 = xor0; - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor0 >> 24u) ^ (xor1 << 8u); - v11 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v0 + v10; - o1 = v1 + v11; - o1 = o1 + select(0u, 1u, o0 < v0); - v0 = o0; - v1 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v0 + 0u; - // o1 = v1 + 0u; - // if (v0 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v0 = o0; - // v1 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v30 ^ v0; - xor1 = v31 ^ v1; - v30 = (xor0 >> 16u) ^ (xor1 << 16u); - v31 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v20 + v30; - o1 = v21 + v31; - o1 = o1 + select(0u, 1u, o0 < v20); - v20 = o0; - v21 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v10 ^ v20; - xor1 = v11 ^ v21; - v10 = (xor1 >> 31u) ^ (xor0 << 1u); - v11 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=11, i=5(x2), a=v[2-3], b=v[12-13], c=v[22-23], d=v[24-25] - */ - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+0]] - o0 = v2 + m0; - o1 = v3 + m1; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = xor1; - v25 = xor0; - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor0 >> 24u) ^ (xor1 << 8u); - v13 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v2 + v12; - o1 = v3 + v13; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v2 + m4; - o1 = v3 + m5; - o1 = o1 + select(0u, 1u, o0 < v2); - v2 = o0; - v3 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v24 ^ v2; - xor1 = v25 ^ v3; - v24 = (xor0 >> 16u) ^ (xor1 << 16u); - v25 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v22 + v24; - o1 = v23 + v25; - o1 = o1 + select(0u, 1u, o0 < v22); - v22 = o0; - v23 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v12 ^ v22; - xor1 = v13 ^ v23; - v12 = (xor1 >> 31u) ^ (xor0 << 1u); - v13 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=11, i=6(x2), a=v[4-5], b=v[14-15], c=v[16-17], d=v[26-27] - */ - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = xor1; - v27 = xor0; - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor0 >> 24u) ^ (xor1 << 8u); - v15 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v4 + v14; - o1 = v5 + v15; - o1 = o1 + select(0u, 1u, o0 < v4); - v4 = o0; - v5 = o1; - - // // a = a + m[sigma[r][2*i+1]] - // // skip since adding 0u does nothing - // o0 = v4 + 0u; - // o1 = v5 + 0u; - // if (v4 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v4 = o0; - // v5 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v26 ^ v4; - xor1 = v27 ^ v5; - v26 = (xor0 >> 16u) ^ (xor1 << 16u); - v27 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v16 + v26; - o1 = v17 + v27; - o1 = o1 + select(0u, 1u, o0 < v16); - v16 = o0; - v17 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v14 ^ v16; - xor1 = v15 ^ v17; - v14 = (xor1 >> 31u) ^ (xor0 << 1u); - v15 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /** - * r=11, i=7(x2), a=v[6-7], b=v[8-9], c=v[18-19], d=v[28-29] - */ - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // // a = a + m[sigma[r][2*i+0]] - // // skip since adding 0u does nothing - // o0 = v6 + 0u; - // o1 = v7 + 0u; - // if (v6 > 0xFFFFFFFFu - 0u) { - // o1 = o1 + 1u; - // } - // v6 = o0; - // v7 = o1; - - // d = rotr64(d ^ a, 32) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = xor1; - v29 = xor0; - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 24) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor0 >> 24u) ^ (xor1 << 8u); - v9 = (xor1 >> 24u) ^ (xor0 << 8u); - - // a = a + b - o0 = v6 + v8; - o1 = v7 + v9; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // a = a + m[sigma[r][2*i+1]] - o0 = v6 + m6; - o1 = v7 + m7; - o1 = o1 + select(0u, 1u, o0 < v6); - v6 = o0; - v7 = o1; - - // d = rotr64(d ^ a, 16) - xor0 = v28 ^ v6; - xor1 = v29 ^ v7; - v28 = (xor0 >> 16u) ^ (xor1 << 16u); - v29 = (xor1 >> 16u) ^ (xor0 << 16u); - - // c = c + d - o0 = v18 + v28; - o1 = v19 + v29; - o1 = o1 + select(0u, 1u, o0 < v18); - v18 = o0; - v19 = o1; - - // b = rotr64(b ^ c, 63) - xor0 = v8 ^ v18; - xor1 = v9 ^ v19; - v8 = (xor1 >> 31u) ^ (xor0 << 1u); - v9 = (xor0 >> 31u) ^ (xor1 << 1u); - - - - - - /**************************************************************************** - * NONCE CHECK * - ****************************************************************************/ - - /** - * Set nonce if it passes the threshold and no other thread has set it - */ - if ((BLAKE2B_IV32_1 ^ v1 ^ v17) > threshold && atomicLoad(&work.found) == 0u) { - atomicStore(&work.found, 1u); - work.nonce.x = m0; - work.nonce.y = m1; - } - return; -} -` diff --git a/src/shaders/index.ts b/src/shaders/index.ts index 208a280..5be438e 100644 --- a/src/shaders/index.ts +++ b/src/shaders/index.ts @@ -1,9 +1,9 @@ // SPDX-FileCopyrightText: 2025 Chris Duncan // SPDX-License-Identifier: GPL-3.0-or-later -import { default as NanoPowGpuComputeShader } from "./gpu-compute.wgsl" -import { NanoPowGlFragmentShader } from "./gl-fragment" -import { NanoPowGlVertexShader } from "./gl-vertex" +import { default as NanoPowGpuComputeShader } from "./compute.wgsl" +import { NanoPowGlFragmentShader } from "./gl-fragment.js" +import { NanoPowGlVertexShader } from "./gl-vertex.js" export { NanoPowGpuComputeShader, -- 2.34.1