43 lines
1.0 KiB
ArmAsm
43 lines
1.0 KiB
ArmAsm
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (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
|