commonware-cryptography 2026.9.0

Generate keys, sign arbitrary messages, and deterministically verify signatures.
Documentation
            .macro LOAD_STATE state, abef, cdgh, tmp0, tmp1
            movdqu \tmp0, xmmword ptr [\state]
            movdqu \tmp1, xmmword ptr [\state + 16]
            pshufd \tmp0, \tmp0, 177
            pshufd \tmp1, \tmp1, 27
            movdqa \abef, \tmp0
            palignr \abef, \tmp1, 8
            pblendw \tmp1, \tmp0, 240
            movdqa \cdgh, \tmp1
            .endm

            .macro STORE_DIGEST output, abef, cdgh, tmp0, tmp1, tmp2
            pshufd \tmp0, \abef, 27
            pshufd \tmp1, \cdgh, 177
            movdqa \tmp2, \tmp0
            pblendw \tmp2, \tmp1, 240
            palignr \tmp1, \tmp0, 8
            pshufb \tmp2, xmmword ptr [{mask}]
            pshufb \tmp1, xmmword ptr [{mask}]
            movdqu xmmword ptr [\output], \tmp2
            movdqu xmmword ptr [\output + 16], \tmp1
            .endm

            .macro ROUNDS4 abef, cdgh, schedule, offset
            vpaddd xmm0, \schedule, xmmword ptr [{k} + \offset]
            sha256rnds2 \cdgh, \abef, xmm0
            vpshufd xmm0, xmm0, 14
            sha256rnds2 \abef, \cdgh, xmm0
            .endm

            .macro SCHEDULE dst, next, prev2, prev3, tmp
            sha256msg1 \dst, \next
            movdqa \tmp, \prev3
            palignr \tmp, \prev2, 4
            paddd \dst, \tmp
            sha256msg2 \dst, \prev3
            .endm

            .macro PAIR_ROUNDS4 left_schedule, right_schedule, offset
            ROUNDS4 xmm1, xmm2, \left_schedule, \offset
            ROUNDS4 xmm3, xmm4, \right_schedule, \offset
            .endm

            .macro ROUNDS_64
            PAIR_ROUNDS4 xmm5, xmm9, 0
            PAIR_ROUNDS4 xmm6, xmm10, 16
            PAIR_ROUNDS4 xmm7, xmm11, 32
            PAIR_ROUNDS4 xmm8, xmm12, 48

            SCHEDULE xmm5, xmm6, xmm7, xmm8, xmm13
            SCHEDULE xmm9, xmm10, xmm11, xmm12, xmm13
            PAIR_ROUNDS4 xmm5, xmm9, 64

            SCHEDULE xmm6, xmm7, xmm8, xmm5, xmm13
            SCHEDULE xmm10, xmm11, xmm12, xmm9, xmm13
            PAIR_ROUNDS4 xmm6, xmm10, 80

            SCHEDULE xmm7, xmm8, xmm5, xmm6, xmm13
            SCHEDULE xmm11, xmm12, xmm9, xmm10, xmm13
            PAIR_ROUNDS4 xmm7, xmm11, 96

            SCHEDULE xmm8, xmm5, xmm6, xmm7, xmm13
            SCHEDULE xmm12, xmm9, xmm10, xmm11, xmm13
            PAIR_ROUNDS4 xmm8, xmm12, 112

            SCHEDULE xmm5, xmm6, xmm7, xmm8, xmm13
            SCHEDULE xmm9, xmm10, xmm11, xmm12, xmm13
            PAIR_ROUNDS4 xmm5, xmm9, 128

            SCHEDULE xmm6, xmm7, xmm8, xmm5, xmm13
            SCHEDULE xmm10, xmm11, xmm12, xmm9, xmm13
            PAIR_ROUNDS4 xmm6, xmm10, 144

            SCHEDULE xmm7, xmm8, xmm5, xmm6, xmm13
            SCHEDULE xmm11, xmm12, xmm9, xmm10, xmm13
            PAIR_ROUNDS4 xmm7, xmm11, 160

            SCHEDULE xmm8, xmm5, xmm6, xmm7, xmm13
            SCHEDULE xmm12, xmm9, xmm10, xmm11, xmm13
            PAIR_ROUNDS4 xmm8, xmm12, 176

            SCHEDULE xmm5, xmm6, xmm7, xmm8, xmm13
            SCHEDULE xmm9, xmm10, xmm11, xmm12, xmm13
            PAIR_ROUNDS4 xmm5, xmm9, 192

            SCHEDULE xmm6, xmm7, xmm8, xmm5, xmm13
            SCHEDULE xmm10, xmm11, xmm12, xmm9, xmm13
            PAIR_ROUNDS4 xmm6, xmm10, 208

            SCHEDULE xmm7, xmm8, xmm5, xmm6, xmm13
            SCHEDULE xmm11, xmm12, xmm9, xmm10, xmm13
            PAIR_ROUNDS4 xmm7, xmm11, 224

            SCHEDULE xmm8, xmm5, xmm6, xmm7, xmm13
            SCHEDULE xmm12, xmm9, xmm10, xmm11, xmm13
            PAIR_ROUNDS4 xmm8, xmm12, 240
            .endm