日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux Kernel aarch64 Crypto原理和框架介绍

發布時間:2025/3/21 linux 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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的鏈接.

#ifdef USE_V8_CRYPTO_EXTENSIONS #define MODE "ce" #define PRIO 300 #define aes_setkey ce_aes_setkey #define aes_expandkey ce_aes_expandkey #define aes_ecb_encrypt ce_aes_ecb_encrypt #define aes_ecb_decrypt ce_aes_ecb_decrypt #define aes_cbc_encrypt ce_aes_cbc_encrypt #define aes_cbc_decrypt ce_aes_cbc_decrypt #define aes_ctr_encrypt ce_aes_ctr_encrypt #define aes_xts_encrypt ce_aes_xts_encrypt #define aes_xts_decrypt ce_aes_xts_decrypt MODULE_DESCRIPTION("AES-ECB/CBC/CTR/XTS using ARMv8 Crypto Extensions"); #else #define MODE "neon" #define PRIO 200 #define aes_setkey crypto_aes_set_key #define aes_expandkey crypto_aes_expand_key #define aes_ecb_encrypt neon_aes_ecb_encrypt #define aes_ecb_decrypt neon_aes_ecb_decrypt #define aes_cbc_encrypt neon_aes_cbc_encrypt #define aes_cbc_decrypt neon_aes_cbc_decrypt #define aes_ctr_encrypt neon_aes_ctr_encrypt #define aes_xts_encrypt neon_aes_xts_encrypt #define aes_xts_decrypt neon_aes_xts_decrypt MODULE_DESCRIPTION("AES-ECB/CBC/CTR/XTS using ARMv8 NEON"); MODULE_ALIAS_CRYPTO("ecb(aes)"); MODULE_ALIAS_CRYPTO("cbc(aes)"); MODULE_ALIAS_CRYPTO("ctr(aes)"); MODULE_ALIAS_CRYPTO("xts(aes)"); #endif

在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.o

2、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原理和框架介绍的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。