Сижу я значит спокойно, никого не трогаю, починяю примус, и вдруг как захочется сгенерировать SHA-256 целиком внутри процессора без обращения к памяти, что прям места себе не нахожу.
В итоге к памяти все таки пришлось обращаться за самим сообщением, константами и сохранять начальное значение hesh блока, а в остальном смотрите ниже.
Чтобы код имел хоть какай-то практический смысл, я скомпилировал его в статическую библиотеку и написал для него с++ имплементирующий класс, который разместил в заголовочном файле.