func main() { … } // Wt = Mt; for 0 <= t <= 15 func msgSchedule0(index int) { … } // Wt = SIGMA1(Wt-2) + Wt-7 + SIGMA0(Wt-15) + Wt-16; for 16 <= t <= 63 // // SIGMA0(x) = ROTR(7,x) XOR ROTR(18,x) XOR SHR(3,x) // SIGMA1(x) = ROTR(17,x) XOR ROTR(19,x) XOR SHR(10,x) func msgSchedule1(index int) { … } // Calculate T1 in AX - uses AX, CX and DX registers. // h is also used as an accumulator. Wt is passed in AX. // // T1 = h + BIGSIGMA1(e) + Ch(e, f, g) + Kt + Wt // BIGSIGMA1(x) = ROTR(6,x) XOR ROTR(11,x) XOR ROTR(25,x) // Ch(x, y, z) = (x AND y) XOR (NOT x AND z) func sha256T1(konst uint32, e, f, g, h GPPhysical) { … } // Calculate T2 in BX - uses BX, CX, DX and DI registers. // // T2 = BIGSIGMA0(a) + Maj(a, b, c) // BIGSIGMA0(x) = ROTR(2,x) XOR ROTR(13,x) XOR ROTR(22,x) // Maj(x, y, z) = (x AND y) XOR (x AND z) XOR (y AND z) func sha256T2(a, b, c GPPhysical) { … } // Calculate T1 and T2, then e = d + T1 and a = T1 + T2. // The values for e and a are stored in d and h, ready for rotation. func sha256Round(index int, konst uint32, a, b, c, d, e, f, g, h GPPhysical) { … } func sha256Round0(index int, konst uint32, a, b, c, d, e, f, g, h GPPhysical) { … } func sha256Round1(index int, konst uint32, a, b, c, d, e, f, g, h GPPhysical) { … } func blockAMD64() { … } func rotateRight(slice *[]GPPhysical) []GPPhysical { … } func loop() { … } func end() { … } var _K …