Files
2026-05-27 23:03:00 +08:00

1045 lines
28 KiB
Go

// Copyright (c) 2022 xdx. All Rights Reserved.
//
// Written by xdx (xdx@xdx.jelly).
package sm3
import (
"encoding/binary"
)
// Size is the bytes of digest
const Size = 32
// BlockSize is the bytes of each block
const BlockSize = 64
const (
chunk = 64
init0 = 0x7380166f
init1 = 0x4914b2b9
init2 = 0x172442d7
init3 = 0xda8a0600
init4 = 0xa96f30bc
init5 = 0x163138aa
init6 = 0xe38dee4d
init7 = 0xb0fb0e4e
)
const (
magic = "xdx-SM3\x00\x00\x00\x00\x00"
marshaledSize = len(magic) + 4*8 + chunk + 8
)
func appendUint64(b []byte, x uint64) []byte {
a := [8]byte{
byte(x >> 56),
byte(x >> 48),
byte(x >> 40),
byte(x >> 32),
byte(x >> 24),
byte(x >> 16),
byte(x >> 8),
byte(x),
}
return append(b, a[:]...)
}
func appendUint32(b []byte, x uint32) []byte {
a := [4]byte{
byte(x >> 24),
byte(x >> 16),
byte(x >> 8),
byte(x),
}
return append(b, a[:]...)
}
func consumeUint64(b []byte) ([]byte, uint64) {
_ = b[7]
x := uint64(b[7]) | uint64(b[6])<<8 | uint64(b[5])<<16 | uint64(b[4])<<24 |
uint64(b[3])<<32 | uint64(b[2])<<40 | uint64(b[1])<<48 | uint64(b[0])<<56
return b[8:], x
}
func consumeUint32(b []byte) ([]byte, uint32) {
_ = b[3]
x := uint32(b[3]) | uint32(b[2])<<8 | uint32(b[1])<<16 | uint32(b[0])<<24
return b[4:], x
}
func (d *digest) checkSum() [Size]byte {
// Write will change d.len
length := d.len << 3
var buf [chunk * 2]byte
n := copy(buf[:], d.x[:d.nx])
buf[n] = 0x80
n++
nn := chunk
if n > chunk-8 {
nn += chunk
}
binary.BigEndian.PutUint64(buf[nn-8:nn], length)
block(d, buf[:nn])
var result [Size]byte
for i, s := range d.h {
binary.BigEndian.PutUint32(result[i*4:], s)
}
return result
}
// Block functions
func blockGeneric(dig *digest, p []byte) {
var a, b, c, d, e, f, g, h uint32
var w00, w01, w02, w03, w04, w05, w06, w07,
w08, w09, w10, w11, w12, w13, w14, w15 uint32
for len(p) >= chunk {
a = dig.h[0]
b = dig.h[1]
c = dig.h[2]
d = dig.h[3]
e = dig.h[4]
f = dig.h[5]
g = dig.h[6]
h = dig.h[7]
w00 = uint32(p[3]) | uint32(p[2])<<8 | uint32(p[1])<<16 | uint32(p[0])<<24
w01 = uint32(p[7]) | uint32(p[6])<<8 | uint32(p[5])<<16 | uint32(p[4])<<24
w02 = uint32(p[11]) | uint32(p[10])<<8 | uint32(p[9])<<16 | uint32(p[8])<<24
w03 = uint32(p[15]) | uint32(p[14])<<8 | uint32(p[13])<<16 | uint32(p[12])<<24
w04 = uint32(p[19]) | uint32(p[18])<<8 | uint32(p[17])<<16 | uint32(p[16])<<24
w05 = uint32(p[23]) | uint32(p[22])<<8 | uint32(p[21])<<16 | uint32(p[20])<<24
w06 = uint32(p[27]) | uint32(p[26])<<8 | uint32(p[25])<<16 | uint32(p[24])<<24
w07 = uint32(p[31]) | uint32(p[30])<<8 | uint32(p[29])<<16 | uint32(p[28])<<24
w08 = uint32(p[35]) | uint32(p[34])<<8 | uint32(p[33])<<16 | uint32(p[32])<<24
w09 = uint32(p[39]) | uint32(p[38])<<8 | uint32(p[37])<<16 | uint32(p[36])<<24
w10 = uint32(p[43]) | uint32(p[42])<<8 | uint32(p[41])<<16 | uint32(p[40])<<24
w11 = uint32(p[47]) | uint32(p[46])<<8 | uint32(p[45])<<16 | uint32(p[44])<<24
w12 = uint32(p[51]) | uint32(p[50])<<8 | uint32(p[49])<<16 | uint32(p[48])<<24
w13 = uint32(p[55]) | uint32(p[54])<<8 | uint32(p[53])<<16 | uint32(p[52])<<24
w14 = uint32(p[59]) | uint32(p[58])<<8 | uint32(p[57])<<16 | uint32(p[56])<<24
w15 = uint32(p[63]) | uint32(p[62])<<8 | uint32(p[61])<<16 | uint32(p[60])<<24
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x79cc4519
SS1 = SS1<<7 | SS1>>25
TT1 := a ^ b ^ c + d + (SS2 ^ SS1) + (w00 ^ w04)
TT2 := e ^ f ^ g + h + SS1 + w00
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w00 ^ w07 ^ (w13<<15 | w13>>17)
w00 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w03<<7 | w03>>25) ^ w10
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0xf3988a32
SS1 = SS1<<7 | SS1>>25
TT1 := d ^ a ^ b + c + (SS2 ^ SS1) + (w01 ^ w05)
TT2 := h ^ e ^ f + g + SS1 + w01
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w01 ^ w08 ^ (w14<<15 | w14>>17)
w01 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w04<<7 | w04>>25) ^ w11
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0xe7311465
SS1 = SS1<<7 | SS1>>25
TT1 := c ^ d ^ a + b + (SS2 ^ SS1) + (w02 ^ w06)
TT2 := g ^ h ^ e + f + SS1 + w02
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w02 ^ w09 ^ (w15<<15 | w15>>17)
w02 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w05<<7 | w05>>25) ^ w12
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xce6228cb
SS1 = SS1<<7 | SS1>>25
TT1 := b ^ c ^ d + a + (SS2 ^ SS1) + (w03 ^ w07)
TT2 := f ^ g ^ h + e + SS1 + w03
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w03 ^ w10 ^ (w00<<15 | w00>>17)
w03 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w06<<7 | w06>>25) ^ w13
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x9cc45197
SS1 = SS1<<7 | SS1>>25
TT1 := a ^ b ^ c + d + (SS2 ^ SS1) + (w04 ^ w08)
TT2 := e ^ f ^ g + h + SS1 + w04
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w04 ^ w11 ^ (w01<<15 | w01>>17)
w04 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w07<<7 | w07>>25) ^ w14
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x3988a32f
SS1 = SS1<<7 | SS1>>25
TT1 := d ^ a ^ b + c + (SS2 ^ SS1) + (w05 ^ w09)
TT2 := h ^ e ^ f + g + SS1 + w05
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w05 ^ w12 ^ (w02<<15 | w02>>17)
w05 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w08<<7 | w08>>25) ^ w15
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x7311465e
SS1 = SS1<<7 | SS1>>25
TT1 := c ^ d ^ a + b + (SS2 ^ SS1) + (w06 ^ w10)
TT2 := g ^ h ^ e + f + SS1 + w06
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w06 ^ w13 ^ (w03<<15 | w03>>17)
w06 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w09<<7 | w09>>25) ^ w00
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xe6228cbc
SS1 = SS1<<7 | SS1>>25
TT1 := b ^ c ^ d + a + (SS2 ^ SS1) + (w07 ^ w11)
TT2 := f ^ g ^ h + e + SS1 + w07
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w07 ^ w14 ^ (w04<<15 | w04>>17)
w07 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w10<<7 | w10>>25) ^ w01
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0xcc451979
SS1 = SS1<<7 | SS1>>25
TT1 := a ^ b ^ c + d + (SS2 ^ SS1) + (w08 ^ w12)
TT2 := e ^ f ^ g + h + SS1 + w08
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w08 ^ w15 ^ (w05<<15 | w05>>17)
w08 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w11<<7 | w11>>25) ^ w02
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x988a32f3
SS1 = SS1<<7 | SS1>>25
TT1 := d ^ a ^ b + c + (SS2 ^ SS1) + (w09 ^ w13)
TT2 := h ^ e ^ f + g + SS1 + w09
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w09 ^ w00 ^ (w06<<15 | w06>>17)
w09 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w12<<7 | w12>>25) ^ w03
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x311465e7
SS1 = SS1<<7 | SS1>>25
TT1 := c ^ d ^ a + b + (SS2 ^ SS1) + (w10 ^ w14)
TT2 := g ^ h ^ e + f + SS1 + w10
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w10 ^ w01 ^ (w07<<15 | w07>>17)
w10 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w13<<7 | w13>>25) ^ w04
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x6228cbce
SS1 = SS1<<7 | SS1>>25
TT1 := b ^ c ^ d + a + (SS2 ^ SS1) + (w11 ^ w15)
TT2 := f ^ g ^ h + e + SS1 + w11
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w11 ^ w02 ^ (w08<<15 | w08>>17)
w11 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w14<<7 | w14>>25) ^ w05
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0xc451979c
SS1 = SS1<<7 | SS1>>25
TT1 := a ^ b ^ c + d + (SS2 ^ SS1) + (w12 ^ w00)
TT2 := e ^ f ^ g + h + SS1 + w12
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w12 ^ w03 ^ (w09<<15 | w09>>17)
w12 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w15<<7 | w15>>25) ^ w06
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x88a32f39
SS1 = SS1<<7 | SS1>>25
TT1 := d ^ a ^ b + c + (SS2 ^ SS1) + (w13 ^ w01)
TT2 := h ^ e ^ f + g + SS1 + w13
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w13 ^ w04 ^ (w10<<15 | w10>>17)
w13 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w00<<7 | w00>>25) ^ w07
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x11465e73
SS1 = SS1<<7 | SS1>>25
TT1 := c ^ d ^ a + b + (SS2 ^ SS1) + (w14 ^ w02)
TT2 := g ^ h ^ e + f + SS1 + w14
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w14 ^ w05 ^ (w11<<15 | w11>>17)
w14 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w01<<7 | w01>>25) ^ w08
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x228cbce6
SS1 = SS1<<7 | SS1>>25
TT1 := b ^ c ^ d + a + (SS2 ^ SS1) + (w15 ^ w03)
TT2 := f ^ g ^ h + e + SS1 + w15
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w15 ^ w06 ^ (w12<<15 | w12>>17)
w15 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w02<<7 | w02>>25) ^ w09
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x9d8a7a87
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w00 ^ w04)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w00
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w00 ^ w07 ^ (w13<<15 | w13>>17)
w00 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w03<<7 | w03>>25) ^ w10
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x3b14f50f
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w01 ^ w05)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w01
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w01 ^ w08 ^ (w14<<15 | w14>>17)
w01 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w04<<7 | w04>>25) ^ w11
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x7629ea1e
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w02 ^ w06)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w02
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w02 ^ w09 ^ (w15<<15 | w15>>17)
w02 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w05<<7 | w05>>25) ^ w12
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xec53d43c
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w03 ^ w07)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w03
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w03 ^ w10 ^ (w00<<15 | w00>>17)
w03 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w06<<7 | w06>>25) ^ w13
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0xd8a7a879
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w04 ^ w08)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w04
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w04 ^ w11 ^ (w01<<15 | w01>>17)
w04 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w07<<7 | w07>>25) ^ w14
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0xb14f50f3
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w05 ^ w09)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w05
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w05 ^ w12 ^ (w02<<15 | w02>>17)
w05 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w08<<7 | w08>>25) ^ w15
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x629ea1e7
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w06 ^ w10)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w06
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w06 ^ w13 ^ (w03<<15 | w03>>17)
w06 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w09<<7 | w09>>25) ^ w00
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xc53d43ce
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w07 ^ w11)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w07
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w07 ^ w14 ^ (w04<<15 | w04>>17)
w07 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w10<<7 | w10>>25) ^ w01
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x8a7a879d
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w08 ^ w12)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w08
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w08 ^ w15 ^ (w05<<15 | w05>>17)
w08 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w11<<7 | w11>>25) ^ w02
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x14f50f3b
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w09 ^ w13)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w09
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w09 ^ w00 ^ (w06<<15 | w06>>17)
w09 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w12<<7 | w12>>25) ^ w03
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x29ea1e76
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w10 ^ w14)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w10
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w10 ^ w01 ^ (w07<<15 | w07>>17)
w10 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w13<<7 | w13>>25) ^ w04
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x53d43cec
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w11 ^ w15)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w11
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w11 ^ w02 ^ (w08<<15 | w08>>17)
w11 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w14<<7 | w14>>25) ^ w05
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0xa7a879d8
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w12 ^ w00)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w12
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w12 ^ w03 ^ (w09<<15 | w09>>17)
w12 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w15<<7 | w15>>25) ^ w06
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x4f50f3b1
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w13 ^ w01)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w13
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w13 ^ w04 ^ (w10<<15 | w10>>17)
w13 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w00<<7 | w00>>25) ^ w07
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x9ea1e762
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w14 ^ w02)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w14
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w14 ^ w05 ^ (w11<<15 | w11>>17)
w14 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w01<<7 | w01>>25) ^ w08
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x3d43cec5
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w15 ^ w03)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w15
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w15 ^ w06 ^ (w12<<15 | w12>>17)
w15 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w02<<7 | w02>>25) ^ w09
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x7a879d8a
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w00 ^ w04)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w00
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w00 ^ w07 ^ (w13<<15 | w13>>17)
w00 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w03<<7 | w03>>25) ^ w10
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0xf50f3b14
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w01 ^ w05)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w01
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w01 ^ w08 ^ (w14<<15 | w14>>17)
w01 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w04<<7 | w04>>25) ^ w11
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0xea1e7629
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w02 ^ w06)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w02
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w02 ^ w09 ^ (w15<<15 | w15>>17)
w02 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w05<<7 | w05>>25) ^ w12
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xd43cec53
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w03 ^ w07)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w03
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w03 ^ w10 ^ (w00<<15 | w00>>17)
w03 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w06<<7 | w06>>25) ^ w13
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0xa879d8a7
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w04 ^ w08)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w04
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w04 ^ w11 ^ (w01<<15 | w01>>17)
w04 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w07<<7 | w07>>25) ^ w14
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x50f3b14f
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w05 ^ w09)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w05
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w05 ^ w12 ^ (w02<<15 | w02>>17)
w05 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w08<<7 | w08>>25) ^ w15
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0xa1e7629e
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w06 ^ w10)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w06
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w06 ^ w13 ^ (w03<<15 | w03>>17)
w06 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w09<<7 | w09>>25) ^ w00
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x43cec53d
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w07 ^ w11)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w07
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w07 ^ w14 ^ (w04<<15 | w04>>17)
w07 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w10<<7 | w10>>25) ^ w01
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x879d8a7a
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w08 ^ w12)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w08
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w08 ^ w15 ^ (w05<<15 | w05>>17)
w08 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w11<<7 | w11>>25) ^ w02
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x0f3b14f5
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w09 ^ w13)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w09
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w09 ^ w00 ^ (w06<<15 | w06>>17)
w09 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w12<<7 | w12>>25) ^ w03
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x1e7629ea
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w10 ^ w14)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w10
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w10 ^ w01 ^ (w07<<15 | w07>>17)
w10 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w13<<7 | w13>>25) ^ w04
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x3cec53d4
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w11 ^ w15)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w11
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w11 ^ w02 ^ (w08<<15 | w08>>17)
w11 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w14<<7 | w14>>25) ^ w05
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x79d8a7a8
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w12 ^ w00)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w12
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w12 ^ w03 ^ (w09<<15 | w09>>17)
w12 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w15<<7 | w15>>25) ^ w06
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0xf3b14f50
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w13 ^ w01)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w13
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w13 ^ w04 ^ (w10<<15 | w10>>17)
w13 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w00<<7 | w00>>25) ^ w07
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0xe7629ea1
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w14 ^ w02)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w14
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w14 ^ w05 ^ (w11<<15 | w11>>17)
w14 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w01<<7 | w01>>25) ^ w08
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xcec53d43
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w15 ^ w03)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w15
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w15 ^ w06 ^ (w12<<15 | w12>>17)
w15 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w02<<7 | w02>>25) ^ w09
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x9d8a7a87
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w00 ^ w04)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w00
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w00 ^ w07 ^ (w13<<15 | w13>>17)
w00 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w03<<7 | w03>>25) ^ w10
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x3b14f50f
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w01 ^ w05)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w01
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w01 ^ w08 ^ (w14<<15 | w14>>17)
w01 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w04<<7 | w04>>25) ^ w11
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x7629ea1e
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w02 ^ w06)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w02
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w02 ^ w09 ^ (w15<<15 | w15>>17)
w02 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w05<<7 | w05>>25) ^ w12
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xec53d43c
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w03 ^ w07)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w03
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
tw := w03 ^ w10 ^ (w00<<15 | w00>>17)
w03 = tw ^ (tw<<15 | tw>>17) ^ (tw<<23 | tw>>9) ^ (w06<<7 | w06>>25) ^ w13
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0xd8a7a879
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w04 ^ w08)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w04
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0xb14f50f3
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w05 ^ w09)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w05
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x629ea1e7
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w06 ^ w10)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w06
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0xc53d43ce
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w07 ^ w11)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w07
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0x8a7a879d
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w08 ^ w12)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w08
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x14f50f3b
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w09 ^ w13)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w09
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x29ea1e76
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w10 ^ w14)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w10
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x53d43cec
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w11 ^ w15)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w11
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := a<<12 | a>>20
SS1 := SS2 + e + 0xa7a879d8
SS1 = SS1<<7 | SS1>>25
TT1 := ((a & b) | ((a | b) & c)) + d + (SS2 ^ SS1) + (w12 ^ w00)
TT2 := (g ^ (e & (f ^ g))) + SS1 + h + w12
b = b<<9 | b>>23
d = TT1
f = f<<19 | f>>13
h = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := d<<12 | d>>20
SS1 := SS2 + h + 0x4f50f3b1
SS1 = SS1<<7 | SS1>>25
TT1 := ((d & a) | ((d | a) & b)) + c + (SS2 ^ SS1) + (w13 ^ w01)
TT2 := (f ^ (h & (e ^ f))) + SS1 + g + w13
a = a<<9 | a>>23
c = TT1
e = e<<19 | e>>13
g = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := c<<12 | c>>20
SS1 := SS2 + g + 0x9ea1e762
SS1 = SS1<<7 | SS1>>25
TT1 := ((c & d) | ((c | d) & a)) + b + (SS2 ^ SS1) + (w14 ^ w02)
TT2 := (e ^ (g & (h ^ e))) + SS1 + f + w14
d = d<<9 | d>>23
b = TT1
h = h<<19 | h>>13
f = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
{
SS2 := b<<12 | b>>20
SS1 := SS2 + f + 0x3d43cec5
SS1 = SS1<<7 | SS1>>25
TT1 := ((b & c) | ((b | c) & d)) + a + (SS2 ^ SS1) + (w15 ^ w03)
TT2 := (h ^ (f & (g ^ h))) + SS1 + e + w15
c = c<<9 | c>>23
a = TT1
g = g<<19 | g>>13
e = TT2 ^ (TT2<<9 | TT2>>23) ^ (TT2<<17 | TT2>>15)
}
p = p[chunk:]
dig.h[0] ^= a
dig.h[1] ^= b
dig.h[2] ^= c
dig.h[3] ^= d
dig.h[4] ^= e
dig.h[5] ^= f
dig.h[6] ^= g
dig.h[7] ^= h
}
}