/* SPDX-License-Identifier: GPL-2.0-or-later */
/*
* SM4 helper macros for Crypto Extensions
* Copyright (C) 2022 Tianjia Zhang <tianjia.zhang@linux.alibaba.com>
*/
#define SM4_PREPARE(ptr) \
ld1 {v24.16 b-v27.16 b}, [ptr], #64 ; \
ld1 {v28.16 b-v31.16 b}, [ptr];
#define SM4_CRYPT_BLK_BE(b0) \
sm4e b0.4 s, v24.4 s; \
sm4e b0.4 s, v25.4 s; \
sm4e b0.4 s, v26.4 s; \
sm4e b0.4 s, v27.4 s; \
sm4e b0.4 s, v28.4 s; \
sm4e b0.4 s, v29.4 s; \
sm4e b0.4 s, v30.4 s; \
sm4e b0.4 s, v31.4 s; \
rev64 b0.4 s, b0.4 s; \
ext b0.16 b, b0.16 b, b0.16 b, #8 ; \
rev32 b0.16 b, b0.16 b;
#define SM4_CRYPT_BLK(b0) \
rev32 b0.16 b, b0.16 b; \
SM4_CRYPT_BLK_BE(b0);
#define SM4_CRYPT_BLK2_BE(b0, b1) \
sm4e b0.4 s, v24.4 s; \
sm4e b1.4 s, v24.4 s; \
sm4e b0.4 s, v25.4 s; \
sm4e b1.4 s, v25.4 s; \
sm4e b0.4 s, v26.4 s; \
sm4e b1.4 s, v26.4 s; \
sm4e b0.4 s, v27.4 s; \
sm4e b1.4 s, v27.4 s; \
sm4e b0.4 s, v28.4 s; \
sm4e b1.4 s, v28.4 s; \
sm4e b0.4 s, v29.4 s; \
sm4e b1.4 s, v29.4 s; \
sm4e b0.4 s, v30.4 s; \
sm4e b1.4 s, v30.4 s; \
sm4e b0.4 s, v31.4 s; \
sm4e b1.4 s, v31.4 s; \
rev64 b0.4 s, b0.4 s; \
rev64 b1.4 s, b1.4 s; \
ext b0.16 b, b0.16 b, b0.16 b, #8 ; \
ext b1.16 b, b1.16 b, b1.16 b, #8 ; \
rev32 b0.16 b, b0.16 b; \
rev32 b1.16 b, b1.16 b; \
#define SM4_CRYPT_BLK2(b0, b1) \
rev32 b0.16 b, b0.16 b; \
rev32 b1.16 b, b1.16 b; \
SM4_CRYPT_BLK2_BE(b0, b1);
#define SM4_CRYPT_BLK4_BE(b0, b1, b2, b3) \
sm4e b0.4 s, v24.4 s; \
sm4e b1.4 s, v24.4 s; \
sm4e b2.4 s, v24.4 s; \
sm4e b3.4 s, v24.4 s; \
sm4e b0.4 s, v25.4 s; \
sm4e b1.4 s, v25.4 s; \
sm4e b2.4 s, v25.4 s; \
sm4e b3.4 s, v25.4 s; \
sm4e b0.4 s, v26.4 s; \
sm4e b1.4 s, v26.4 s; \
sm4e b2.4 s, v26.4 s; \
sm4e b3.4 s, v26.4 s; \
sm4e b0.4 s, v27.4 s; \
sm4e b1.4 s, v27.4 s; \
sm4e b2.4 s, v27.4 s; \
sm4e b3.4 s, v27.4 s; \
sm4e b0.4 s, v28.4 s; \
sm4e b1.4 s, v28.4 s; \
sm4e b2.4 s, v28.4 s; \
sm4e b3.4 s, v28.4 s; \
sm4e b0.4 s, v29.4 s; \
sm4e b1.4 s, v29.4 s; \
sm4e b2.4 s, v29.4 s; \
sm4e b3.4 s, v29.4 s; \
sm4e b0.4 s, v30.4 s; \
sm4e b1.4 s, v30.4 s; \
sm4e b2.4 s, v30.4 s; \
sm4e b3.4 s, v30.4 s; \
sm4e b0.4 s, v31.4 s; \
sm4e b1.4 s, v31.4 s; \
sm4e b2.4 s, v31.4 s; \
sm4e b3.4 s, v31.4 s; \
rev64 b0.4 s, b0.4 s; \
rev64 b1.4 s, b1.4 s; \
rev64 b2.4 s, b2.4 s; \
rev64 b3.4 s, b3.4 s; \
ext b0.16 b, b0.16 b, b0.16 b, #8 ; \
ext b1.16 b, b1.16 b, b1.16 b, #8 ; \
ext b2.16 b, b2.16 b, b2.16 b, #8 ; \
ext b3.16 b, b3.16 b, b3.16 b, #8 ; \
rev32 b0.16 b, b0.16 b; \
rev32 b1.16 b, b1.16 b; \
rev32 b2.16 b, b2.16 b; \
rev32 b3.16 b, b3.16 b;
#define SM4_CRYPT_BLK4(b0, b1, b2, b3) \
rev32 b0.16 b, b0.16 b; \
rev32 b1.16 b, b1.16 b; \
rev32 b2.16 b, b2.16 b; \
rev32 b3.16 b, b3.16 b; \
SM4_CRYPT_BLK4_BE(b0, b1, b2, b3);
#define SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7) \
sm4e b0.4 s, v24.4 s; \
sm4e b1.4 s, v24.4 s; \
sm4e b2.4 s, v24.4 s; \
sm4e b3.4 s, v24.4 s; \
sm4e b4.4 s, v24.4 s; \
sm4e b5.4 s, v24.4 s; \
sm4e b6.4 s, v24.4 s; \
sm4e b7.4 s, v24.4 s; \
sm4e b0.4 s, v25.4 s; \
sm4e b1.4 s, v25.4 s; \
sm4e b2.4 s, v25.4 s; \
sm4e b3.4 s, v25.4 s; \
sm4e b4.4 s, v25.4 s; \
sm4e b5.4 s, v25.4 s; \
sm4e b6.4 s, v25.4 s; \
sm4e b7.4 s, v25.4 s; \
sm4e b0.4 s, v26.4 s; \
sm4e b1.4 s, v26.4 s; \
sm4e b2.4 s, v26.4 s; \
sm4e b3.4 s, v26.4 s; \
sm4e b4.4 s, v26.4 s; \
sm4e b5.4 s, v26.4 s; \
sm4e b6.4 s, v26.4 s; \
sm4e b7.4 s, v26.4 s; \
sm4e b0.4 s, v27.4 s; \
sm4e b1.4 s, v27.4 s; \
sm4e b2.4 s, v27.4 s; \
sm4e b3.4 s, v27.4 s; \
sm4e b4.4 s, v27.4 s; \
sm4e b5.4 s, v27.4 s; \
sm4e b6.4 s, v27.4 s; \
sm4e b7.4 s, v27.4 s; \
sm4e b0.4 s, v28.4 s; \
sm4e b1.4 s, v28.4 s; \
sm4e b2.4 s, v28.4 s; \
sm4e b3.4 s, v28.4 s; \
sm4e b4.4 s, v28.4 s; \
sm4e b5.4 s, v28.4 s; \
sm4e b6.4 s, v28.4 s; \
sm4e b7.4 s, v28.4 s; \
sm4e b0.4 s, v29.4 s; \
sm4e b1.4 s, v29.4 s; \
sm4e b2.4 s, v29.4 s; \
sm4e b3.4 s, v29.4 s; \
sm4e b4.4 s, v29.4 s; \
sm4e b5.4 s, v29.4 s; \
sm4e b6.4 s, v29.4 s; \
sm4e b7.4 s, v29.4 s; \
sm4e b0.4 s, v30.4 s; \
sm4e b1.4 s, v30.4 s; \
sm4e b2.4 s, v30.4 s; \
sm4e b3.4 s, v30.4 s; \
sm4e b4.4 s, v30.4 s; \
sm4e b5.4 s, v30.4 s; \
sm4e b6.4 s, v30.4 s; \
sm4e b7.4 s, v30.4 s; \
sm4e b0.4 s, v31.4 s; \
sm4e b1.4 s, v31.4 s; \
sm4e b2.4 s, v31.4 s; \
sm4e b3.4 s, v31.4 s; \
sm4e b4.4 s, v31.4 s; \
sm4e b5.4 s, v31.4 s; \
sm4e b6.4 s, v31.4 s; \
sm4e b7.4 s, v31.4 s; \
rev64 b0.4 s, b0.4 s; \
rev64 b1.4 s, b1.4 s; \
rev64 b2.4 s, b2.4 s; \
rev64 b3.4 s, b3.4 s; \
rev64 b4.4 s, b4.4 s; \
rev64 b5.4 s, b5.4 s; \
rev64 b6.4 s, b6.4 s; \
rev64 b7.4 s, b7.4 s; \
ext b0.16 b, b0.16 b, b0.16 b, #8 ; \
ext b1.16 b, b1.16 b, b1.16 b, #8 ; \
ext b2.16 b, b2.16 b, b2.16 b, #8 ; \
ext b3.16 b, b3.16 b, b3.16 b, #8 ; \
ext b4.16 b, b4.16 b, b4.16 b, #8 ; \
ext b5.16 b, b5.16 b, b5.16 b, #8 ; \
ext b6.16 b, b6.16 b, b6.16 b, #8 ; \
ext b7.16 b, b7.16 b, b7.16 b, #8 ; \
rev32 b0.16 b, b0.16 b; \
rev32 b1.16 b, b1.16 b; \
rev32 b2.16 b, b2.16 b; \
rev32 b3.16 b, b3.16 b; \
rev32 b4.16 b, b4.16 b; \
rev32 b5.16 b, b5.16 b; \
rev32 b6.16 b, b6.16 b; \
rev32 b7.16 b, b7.16 b;
#define SM4_CRYPT_BLK8(b0, b1, b2, b3, b4, b5, b6, b7) \
rev32 b0.16 b, b0.16 b; \
rev32 b1.16 b, b1.16 b; \
rev32 b2.16 b, b2.16 b; \
rev32 b3.16 b, b3.16 b; \
rev32 b4.16 b, b4.16 b; \
rev32 b5.16 b, b5.16 b; \
rev32 b6.16 b, b6.16 b; \
rev32 b7.16 b, b7.16 b; \
SM4_CRYPT_BLK8_BE(b0, b1, b2, b3, b4, b5, b6, b7);
Messung V0.5 in Prozent C=87 H=88 G=87
¤ Dauer der Verarbeitung: 0.10 Sekunden
(vorverarbeitet am 2026-06-07)
¤
*© Formatika GbR, Deutschland