#include #include #define XOR ^ void verse_poly1305_c_portable_incremental(uint64_t(*bPtr)[2], uint64_t cTr, uint64_t v0[3], uint64_t v1[2]) { auto uint64_t v2; auto uint64_t v3; auto uint64_t v4; auto uint64_t v5; auto uint64_t v6; auto uint64_t v7; auto uint64_t v8; auto uint64_t v9; auto uint64_t v10; auto uint64_t v11; auto uint64_t v12; auto uint64_t v13; auto uint64_t v14; auto uint64_t v15; auto uint64_t v16; v3 = v0[0]; v2 = v3 & 0x00000000ffffffffULL; v3 >>= 32; v5 = v0[1]; v4 = v5 & 0x00000000ffffffffULL; v5 >>= 32; v6 = v0[2]; v8 = v1[0]; v7 = v8 & 0x00000000ffffffffULL; v8 >>= 32; v10 = v1[1]; v9 = v10 & 0x00000000ffffffffULL; v10 >>= 32; while (cTr > 0) { v16 = verse_from_le64((*bPtr)[0]); v15 = v16 & 0x00000000ffffffffULL; v16 >>= 32; v2 += v15; v3 += v16; v16 = verse_from_le64((*bPtr)[1]); v15 = v16 & 0x00000000ffffffffULL; v16 >>= 32; v4 += v15; v5 += v16; v6 += 0x0000000000000001ULL; v13 = v2 * v10; v15 = v3 * v9; v13 += v15; v15 = v4 * v8; v13 += v15; v15 = v5 * v7; v13 += v15; v12 = v2 * v9; v15 = v3 * v8; v12 += v15; v15 = v4 * v7; v12 += v15; v11 = v2 * v8; v15 = v3 * v7; v11 += v15; v2 *= v7; v15 = v10 >> 2; v15 += v10; v16 = v3 * v15; v2 += v16; v16 = v4 * v15; v3 = v11 + v16; v16 = v5 * v15; v12 += v16; v16 = v6 * v15; v13 += v16; v15 = v9 >> 2; v15 += v9; v16 = v4 * v15; v2 += v16; v16 = v5 * v15; v3 += v16; v16 = v6 * v15; v4 = v12 + v16; v15 = v8 >> 2; v15 += v8; v16 = v5 * v15; v2 += v16; v16 = v6 * v15; v3 += v16; v15 = v7 >> 2; v15 *= 0x0000000000000005ULL; v16 = v6 * v15; v2 += v16; v5 = v13; v14 = v7 & 0x0000000000000003ULL; v6 *= v14; v15 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v15; v15 = v6 >> 2; v6 &= 0x0000000000000003ULL; v15 *= 0x0000000000000005ULL; v2 += v15; v15 = v2 >> 32; v2 &= 0x00000000ffffffffULL; v3 += v15; v15 = v3 >> 32; v3 &= 0x00000000ffffffffULL; v4 += v15; v15 = v4 >> 32; v4 &= 0x00000000ffffffffULL; v5 += v15; v15 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v15; ++bPtr; --cTr; }; v3 <<= 32; v3 |= v2; v0[0] = v3; v5 <<= 32; v5 |= v4; v0[1] = v5; v0[2] = v6; } void verse_poly1305_c_portable_blockmac(uint64_t(*bPtr)[2], uint64_t cTr, uint64_t v0[3], uint64_t v1[2], uint64_t v2[2]) { auto uint64_t v3; auto uint64_t v4; auto uint64_t v5; auto uint64_t v6; auto uint64_t v7; auto uint64_t v8; auto uint64_t v9; auto uint64_t v10; auto uint64_t v11; auto uint64_t v12; auto uint64_t v13; auto uint64_t v14; auto uint64_t v15; auto uint64_t v16; auto uint64_t v17; v4 = v0[0]; v3 = v4 & 0x00000000ffffffffULL; v4 >>= 32; v6 = v0[1]; v5 = v6 & 0x00000000ffffffffULL; v6 >>= 32; v7 = v0[2]; v9 = v1[0]; v8 = v9 & 0x00000000ffffffffULL; v9 >>= 32; v11 = v1[1]; v10 = v11 & 0x00000000ffffffffULL; v11 >>= 32; while (cTr > 0) { v17 = verse_from_le64((*bPtr)[0]); v16 = v17 & 0x00000000ffffffffULL; v17 >>= 32; v3 += v16; v4 += v17; v17 = verse_from_le64((*bPtr)[1]); v16 = v17 & 0x00000000ffffffffULL; v17 >>= 32; v5 += v16; v6 += v17; v7 += 0x0000000000000001ULL; v14 = v3 * v11; v16 = v4 * v10; v14 += v16; v16 = v5 * v9; v14 += v16; v16 = v6 * v8; v14 += v16; v13 = v3 * v10; v16 = v4 * v9; v13 += v16; v16 = v5 * v8; v13 += v16; v12 = v3 * v9; v16 = v4 * v8; v12 += v16; v3 *= v8; v16 = v11 >> 2; v16 += v11; v17 = v4 * v16; v3 += v17; v17 = v5 * v16; v4 = v12 + v17; v17 = v6 * v16; v13 += v17; v17 = v7 * v16; v14 += v17; v16 = v10 >> 2; v16 += v10; v17 = v5 * v16; v3 += v17; v17 = v6 * v16; v4 += v17; v17 = v7 * v16; v5 = v13 + v17; v16 = v9 >> 2; v16 += v9; v17 = v6 * v16; v3 += v17; v17 = v7 * v16; v4 += v17; v16 = v8 >> 2; v16 *= 0x0000000000000005ULL; v17 = v7 * v16; v3 += v17; v6 = v14; v15 = v8 & 0x0000000000000003ULL; v7 *= v15; v16 = v6 >> 32; v6 &= 0x00000000ffffffffULL; v7 += v16; v16 = v7 >> 2; v7 &= 0x0000000000000003ULL; v16 *= 0x0000000000000005ULL; v3 += v16; v16 = v3 >> 32; v3 &= 0x00000000ffffffffULL; v4 += v16; v16 = v4 >> 32; v4 &= 0x00000000ffffffffULL; v5 += v16; v16 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v16; v16 = v6 >> 32; v6 &= 0x00000000ffffffffULL; v7 += v16; ++bPtr; --cTr; }; v16 = v7 >> 2; v7 &= 0x0000000000000003ULL; v16 *= 0x0000000000000005ULL; v3 += v16; v16 = v3 + 0x0000000000000005ULL; v16 >>= 32; v16 += v4; v16 >>= 32; v16 += v5; v16 >>= 32; v16 += v6; v16 >>= 32; v16 += v7; v16 >>= 2; v16 = v16 * 0x0000000000000005ULL; v3 += v16; v16 = v3 >> 32; v3 &= 0x00000000ffffffffULL; v4 += v16; v16 = v4 >> 32; v4 &= 0x00000000ffffffffULL; v5 += v16; v16 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v16; v16 = v6 >> 32; v6 &= 0x00000000ffffffffULL; v7 += v16; v17 = v2[0]; v16 = v17 & 0x00000000ffffffffULL; v17 >>= 32; v3 += v16; v4 += v17; v17 = v2[1]; v16 = v17 & 0x00000000ffffffffULL; v17 >>= 32; v5 += v16; v6 += v17; v16 = v3 >> 32; v3 &= 0x00000000ffffffffULL; v4 += v16; v16 = v4 >> 32; v4 &= 0x00000000ffffffffULL; v5 += v16; v16 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v16; v16 = v6 >> 32; v6 &= 0x00000000ffffffffULL; v7 += v16; v4 <<= 32; v4 |= v3; v0[0] = v4; v6 <<= 32; v6 |= v5; v0[1] = v6; v0[2] = v7; } void verse_poly1305_c_portable_partialmac(uint64_t v0[2], uint64_t v1[3], uint64_t v2[2], uint64_t v3[2]) { auto uint64_t v4; auto uint64_t v5; auto uint64_t v6; auto uint64_t v7; auto uint64_t v8; auto uint64_t v9; auto uint64_t v10; auto uint64_t v11; auto uint64_t v12; auto uint64_t v13; auto uint64_t v14; auto uint64_t v15; auto uint64_t v16; auto uint64_t v17; auto uint64_t v18; v5 = v1[0]; v4 = v5 & 0x00000000ffffffffULL; v5 >>= 32; v7 = v1[1]; v6 = v7 & 0x00000000ffffffffULL; v7 >>= 32; v8 = v1[2]; v10 = v2[0]; v9 = v10 & 0x00000000ffffffffULL; v10 >>= 32; v12 = v2[1]; v11 = v12 & 0x00000000ffffffffULL; v12 >>= 32; v18 = verse_from_le64(v0[0]); v17 = v18 & 0x00000000ffffffffULL; v18 >>= 32; v4 += v17; v5 += v18; v18 = verse_from_le64(v0[1]); v17 = v18 & 0x00000000ffffffffULL; v18 >>= 32; v6 += v17; v7 += v18; v15 = v4 * v12; v17 = v5 * v11; v15 += v17; v17 = v6 * v10; v15 += v17; v17 = v7 * v9; v15 += v17; v14 = v4 * v11; v17 = v5 * v10; v14 += v17; v17 = v6 * v9; v14 += v17; v13 = v4 * v10; v17 = v5 * v9; v13 += v17; v4 *= v9; v17 = v12 >> 2; v17 += v12; v18 = v5 * v17; v4 += v18; v18 = v6 * v17; v5 = v13 + v18; v18 = v7 * v17; v14 += v18; v18 = v8 * v17; v15 += v18; v17 = v11 >> 2; v17 += v11; v18 = v6 * v17; v4 += v18; v18 = v7 * v17; v5 += v18; v18 = v8 * v17; v6 = v14 + v18; v17 = v10 >> 2; v17 += v10; v18 = v7 * v17; v4 += v18; v18 = v8 * v17; v5 += v18; v17 = v9 >> 2; v17 *= 0x0000000000000005ULL; v18 = v8 * v17; v4 += v18; v7 = v15; v16 = v9 & 0x0000000000000003ULL; v8 *= v16; v17 = v7 >> 32; v7 &= 0x00000000ffffffffULL; v8 += v17; v17 = v8 >> 2; v8 &= 0x0000000000000003ULL; v17 *= 0x0000000000000005ULL; v4 += v17; v17 = v4 >> 32; v4 &= 0x00000000ffffffffULL; v5 += v17; v17 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v17; v17 = v6 >> 32; v6 &= 0x00000000ffffffffULL; v7 += v17; v17 = v7 >> 32; v7 &= 0x00000000ffffffffULL; v8 += v17; v17 = v8 >> 2; v8 &= 0x0000000000000003ULL; v17 *= 0x0000000000000005ULL; v4 += v17; v17 = v4 + 0x0000000000000005ULL; v17 >>= 32; v17 += v5; v17 >>= 32; v17 += v6; v17 >>= 32; v17 += v7; v17 >>= 32; v17 += v8; v17 >>= 2; v17 = v17 * 0x0000000000000005ULL; v4 += v17; v17 = v4 >> 32; v4 &= 0x00000000ffffffffULL; v5 += v17; v17 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v17; v17 = v6 >> 32; v6 &= 0x00000000ffffffffULL; v7 += v17; v17 = v7 >> 32; v7 &= 0x00000000ffffffffULL; v8 += v17; v18 = v3[0]; v17 = v18 & 0x00000000ffffffffULL; v18 >>= 32; v4 += v17; v5 += v18; v18 = v3[1]; v17 = v18 & 0x00000000ffffffffULL; v18 >>= 32; v6 += v17; v7 += v18; v17 = v4 >> 32; v4 &= 0x00000000ffffffffULL; v5 += v17; v17 = v5 >> 32; v5 &= 0x00000000ffffffffULL; v6 += v17; v17 = v6 >> 32; v6 &= 0x00000000ffffffffULL; v7 += v17; v17 = v7 >> 32; v7 &= 0x00000000ffffffffULL; v8 += v17; v5 <<= 32; v5 |= v4; v1[0] = v5; v7 <<= 32; v7 |= v6; v1[1] = v7; v1[2] = v8; } void verse_poly1305_c_portable_clamp(uint64_t(*bPtr)[2], uint64_t cTr) { auto uint64_t v0; while (cTr > 0) { v0 = (*bPtr)[0]; v0 &= 0x0ffffffc0fffffffULL; (*bPtr)[0] = v0; v0 = (*bPtr)[1]; v0 &= 0x0ffffffc0ffffffcULL; (*bPtr)[1] = v0; ++bPtr; --cTr; }; }