commonware-cryptography 2026.9.0

Generate keys, sign arbitrary messages, and deterministically verify signatures.
Documentation
// Inputs:
// v0-v1   first state
// v2-v3   second state
// v4-v7   first message schedule
// v8-v11  second message schedule
// k       SHA-256 round constants

.irp i,0,1,2,3
    ld1.4s {{v16}}, [{k}], #16
    add.4s v12, v4, v16
    add.4s v13, v8, v16
    mov.16b v14, v0
    mov.16b v15, v2
    sha256h.4s q0, q1, v12
    sha256h2.4s q1, q14, v12
    sha256h.4s q2, q3, v13
    sha256h2.4s q3, q15, v13

    .if \i != 3
        sha256su0.4s v4, v5
        sha256su0.4s v8, v9
        sha256su1.4s v4, v6, v7
        sha256su1.4s v8, v10, v11
    .endif

    ld1.4s {{v16}}, [{k}], #16
    add.4s v12, v5, v16
    add.4s v13, v9, v16
    mov.16b v14, v0
    mov.16b v15, v2
    sha256h.4s q0, q1, v12
    sha256h2.4s q1, q14, v12
    sha256h.4s q2, q3, v13
    sha256h2.4s q3, q15, v13

    .if \i != 3
        sha256su0.4s v5, v6
        sha256su0.4s v9, v10
        sha256su1.4s v5, v7, v4
        sha256su1.4s v9, v11, v8
    .endif

    ld1.4s {{v16}}, [{k}], #16
    add.4s v12, v6, v16
    add.4s v13, v10, v16
    mov.16b v14, v0
    mov.16b v15, v2
    sha256h.4s q0, q1, v12
    sha256h2.4s q1, q14, v12
    sha256h.4s q2, q3, v13
    sha256h2.4s q3, q15, v13

    .if \i != 3
        sha256su0.4s v6, v7
        sha256su0.4s v10, v11
        sha256su1.4s v6, v4, v5
        sha256su1.4s v10, v8, v9
    .endif

    ld1.4s {{v16}}, [{k}], #16
    add.4s v12, v7, v16
    add.4s v13, v11, v16
    mov.16b v14, v0
    mov.16b v15, v2
    sha256h.4s q0, q1, v12
    sha256h2.4s q1, q14, v12
    sha256h.4s q2, q3, v13
    sha256h2.4s q3, q15, v13

    .if \i != 3
        sha256su0.4s v7, v4
        sha256su0.4s v11, v8
        sha256su1.4s v7, v5, v6
        sha256su1.4s v11, v9, v10
    .endif
.endr