// Copyright (c) 2026 Petr Balvín (https://petrbalvin.org) // SPDX-License-Identifier: BSD-3-Clause // Differential kernel for the arm64 cryptographic extension: the AES round // instructions and the SHA1, SHA256 and SHA512 families. Every function is // byte-compared against go tool asm. #include "textflag.h" // func aesRound() TEXT ·aesRound(SB), NOSPLIT, $0-0 AESE V31.B16, V29.B16 AESD V22.B16, V19.B16 AESMC V14.B16, V28.B16 AESIMC V12.B16, V27.B16 RET // func sha1Round() TEXT ·sha1Round(SB), NOSPLIT, $0-0 SHA1C V8.S4, V8, V2 SHA1P V3.S4, V20, V27 SHA1M V0.S4, V27, V27 SHA1H V17, V25 SHA1SU0 V17.S4, V13.S4, V16.S4 SHA1SU1 V24.S4, V23.S4 RET // func sha256Round() TEXT ·sha256Round(SB), NOSPLIT, $0-0 SHA256H V4.S4, V2, V11 SHA256H2 V6.S4, V16, V11 SHA256SU0 V0.S4, V16.S4 SHA256SU1 V31.S4, V3.S4, V15.S4 RET // func sha512Round() TEXT ·sha512Round(SB), NOSPLIT, $0-0 SHA512H V2.D2, V1, V0 SHA512H2 V4.D2, V3, V2 SHA512SU0 V9.D2, V8.D2 SHA512SU1 V7.D2, V6.D2, V5.D2 RET