Linux Kernel aarch64 Crypto原理和框架介绍
快速鏈接:
.
👉👉👉 個人博客筆記導讀目錄(全部) 👈👈👈
相關推薦:
The Armv8 Cryptographic Extension在Linux Kernel中的應用
Armv8 Cryptographic Extension介紹
Linux kernel內核調用crypto算法的方法
Linux Kernel aarch64的ARM-CE aes-ecb的底層代碼解析
說明: 在無特別的說明下,本文講述得都是armv8-aarch64體系、linux kernel 4.14 arm64軟件環境!
文章目錄
- 1、Linux的aarch64 crypto配置介紹
- 2、Linux的aarch64 crypto的總結:
- (1)、開啟ARM-CE
- (2)、開啟ARM-NEON
- (3)、純軟實現
- 3、比較硬件實現和純軟實現
1、Linux的aarch64 crypto配置介紹
開啟ARM-CE或ARM-Neon,編譯aes-glue.c文件,aes-glue.c是Linux kernel crypto aarch32/64下ARM-CE或ARM-NEON加解密調用的頂級文件。
- CONFIG_CRYPTO_AES_ARM64_CE_BLK
- CONFIG_CRYPTO_AES_ARM64_NEON_BLK
注意,如果開啟的是ARM-CE,則加入USE_V8_CRYPTO_EXTENSIONS宏定義
在aes-glue.c中,使用USE_V8_CRYPTO_EXTENSIONS宏控制的底層aes的鏈接.
在Kconfig中可以看出,在開啟CONFIG_CRYPTO_AES_ARM64_CE_BLK或CONFIG_CRYPTO_AES_ARM64_NEON_BLK,還需要再次選擇底層的算法。
config CRYPTO_AES_ARM64_CE_BLKtristate "AES in ECB/CBC/CTR/XTS modes using ARMv8 Crypto Extensions"depends on KERNEL_MODE_NEONselect CRYPTO_BLKCIPHERselect CRYPTO_AES_ARM64_CEselect CRYPTO_AES_ARM64select CRYPTO_SIMD config CRYPTO_AES_ARM64_NEON_BLKtristate "AES in ECB/CBC/CTR/XTS modes using NEON instructions"depends on KERNEL_MODE_NEONselect CRYPTO_BLKCIPHERselect CRYPTO_AES_ARM64select CRYPTO_AESselect CRYPTO_SIMD如選擇ARM-CE的aes,除了打開CONFIG_CRYPTO_AES_ARM64_CE_BLK,還需要再次開啟CONFIG_CRYPTO_AES_ARM64_CE,編譯aes-ce-cipher.S,該文件實現了ARM-CE的底層邏輯;
obj-$(CONFIG_CRYPTO_AES_ARM64_CE) += aes-ce-cipher.o CFLAGS_aes-ce-cipher.o += -march=armv8-a+crypto如選擇ARM-NEON的aes,除了打開CONFIG_CRYPTO_AES_ARM64_NEON_BLK,不需要在額外增加別的宏了,因為在aes-neon.S中已經實現了ARM-NEON的底層邏輯;
obj-$(CONFIG_CRYPTO_AES_ARM64_NEON_BLK) += aes-neon-blk.o aes-neon-blk-y := aes-glue-neon.o aes-neon.o2、Linux的aarch64 crypto的總結:
(1)、開啟ARM-CE
如果開啟ARM-CE,則需要打開:
CONFIG_CRYPTO_AES_ARM64_CE_BLK
CONFIG_CRYPTO_AES_ARM64_CE
接口實現:aes-glue.c
底層實現:aes-modes.S
接口形式:
#define MODE "ce" (同步) .cra_name = "__ecb-aes-" MODE, .cra_name = "__cbc-aes-" MODE, .cra_name = "__ctr-aes-" MODE, .cra_name = "__xts-aes-" MODE, (異步) .cra_driver_name = "ecb-aes-" MODE, .cra_driver_name = "cbc-aes-" MODE, .cra_driver_name = "ctr-aes-" MODE, .cra_driver_name = "xts-aes-" MODE,(2)、開啟ARM-NEON
如果開啟ARM-NEON,則需要打開:
CONFIG_CRYPTO_AES_ARM64_NEON_BLK
接口實現:aes-glue.c
底層實現:aes-neon.S
接口形式:
#define MODE "neon" (同步) .cra_name = "__ecb-aes-" MODE, .cra_name = "__cbc-aes-" MODE, .cra_name = "__ctr-aes-" MODE, .cra_name = "__xts-aes-" MODE, (異步) .cra_driver_name = "ecb-aes-" MODE, .cra_driver_name = "cbc-aes-" MODE, .cra_driver_name = "ctr-aes-" MODE, .cra_driver_name = "xts-aes-" MODE,(3)、純軟實現
如果以上都不開,則走純軟實現
接口實現:
linux/crypto$ ls ecb.c cbc.c ctr.c xts.c
cbc.c ctr.c ecb.c xts.c
接口形式:
.name = "ecb", .name = "cbc", .name = "ctr", .name = "xts",3、比較硬件實現和純軟實現
其實如果是芯片SOC的實現,方法也類似:
總結
以上是生活随笔為你收集整理的Linux Kernel aarch64 Crypto原理和框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [architecture]-Armv8
- 下一篇: Linux kernel内核调用cryp