LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

Linux Crypto(5):算法实现层

算法实现层向框架核心层注册 struct crypto_alg 实例,提供同步或异步的算法运算回调(encrypt/decrypt/digest/sign 等)。

1 算法分类

算法实现层对不同类型算法进行类分类,如下:

类别内核目录示例注册类型关键回调典型算法
SKCIPHER crypto/skcipher/ skcipher_alg encrypt / decrypt AES-CBC, ChaCha20
AEAD crypto/aead/ aead_alg encrypt / decrypt AES-GCM, ChaPoly
HASH crypto/hash/ shash_alg / ahash_alg init / update / final SHA-256, BLAKE2b
HMAC crypto/hmac.c 模板 → shash_alg 同上 HMAC-SHA256
AKCIPHER crypto/akcipher/ akcipher_alg encrypt / decrypt / sign RSA, ECDSA, SM2
KPP crypto/kpp/ kpp_alg generate_public / shared_secret ECDH, DH
COMPRESS crypto/compress/ compress_alg compress / decompress LZ4, DEFLATE
RNG / DRBG crypto/rng/ rng_alg generate CTR-DRBG, HMAC-DRBG
硬件驱动 drivers/crypto/XXX/ 与上述任一类别一致 同上,内部调用硬件寄存器 AES-NI, QCE, CAAM

2 分类算法数据结构和API实现表格

类别核心数据结构注册 API注销 API使用者分配 API典型实现文件完整常用运算 / 参数 API(非 exhaustive,按使用频率列举)
SKCIPHER struct skcipher_alg crypto_register_skcipher() crypto_unregister_skcipher() crypto_alloc_skcipher() crypto/aes.c + crypto/cbc.c

• crypto_skcipher_setkey()

• crypto_skcipher_encrypt() 

• crypto_skcipher_decrypt() 

• crypto_skcipher_get_flags() 

• crypto_skcipher_reqsize() 

• crypto_skcipher_set_flags()

AEAD struct aead_alg crypto_register_aead() crypto_unregister_aead() crypto_alloc_aead() crypto/gcm.c

• crypto_aead_setkey()

• crypto_aead_setauthsize() 

• crypto_aead_encrypt() 

• crypto_aead_decrypt() 

• crypto_aead_getauthsize() 

• crypto_aead_ivsize() 

• crypto_aead_blocksize() 

• crypto_aead_reqsize()

HASH(同步) struct shash_alg crypto_register_shash() crypto_unregister_shash() crypto_alloc_shash() crypto/sha256_generic.c

• crypto_shash_setkey()

• crypto_shash_init() 

• crypto_shash_update() 

• crypto_shash_final() 

• crypto_shash_finup() 

• crypto_shash_digest() 

• crypto_shash_export() 

• crypto_shash_import() 

• crypto_shash_descsize()

AHASH(异步) struct ahash_alg crypto_register_ahash() crypto_unregister_ahash() crypto_alloc_ahash() crypto/sha256_generic.c

• crypto_ahash_setkey() 

• crypto_ahash_init() 

• crypto_ahash_update() 

• crypto_ahash_final() 

• crypto_ahash_finup() 

• crypto_ahash_digest() 

• ahash_request_alloc() 

• ahash_request_set_callback() 

• ahash_request_set_crypt()

HMAC(模板) 模板生成 shash_alg crypto_register_template(&hmac_tmpl) crypto_unregister_template(&hmac_tmpl) crypto_alloc_shash("hmac(sha256)", ...) crypto/hmac.c 复用 HASH 系列 API
AKCIPHER struct akcipher_alg crypto_register_akcipher() crypto_unregister_akcipher() crypto_alloc_akcipher() crypto/rsa.c

• crypto_akcipher_set_pub_key() 

• crypto_akcipher_set_priv_key() 

• crypto_akcipher_sign() 

• crypto_akcipher_verify() 

• crypto_akcipher_encrypt() 

• crypto_akcipher_decrypt() 

• crypto_akcipher_maxsize() 

• crypto_akcipher_reqsize()

KPP struct kpp_alg crypto_register_kpp() crypto_unregister_kpp() crypto_alloc_kpp() crypto/ecc.c

• crypto_kpp_set_secret() 

• crypto_kpp_generate_public_key() 

• crypto_kpp_compute_shared_secret() 

• crypto_kpp_max_secret_size() 

• crypto_kpp_max_public_key_size() 

• kpp_request_alloc() 

• kpp_request_set_callback()

COMPRESS struct compress_alg crypto_register_compress() crypto_unregister_compress() crypto_alloc_compress() crypto/lz4.c

• crypto_compress_compress() 

• crypto_compress_decompress() 

• crypto_compress_get_workspace_size()

RNG / DRBG struct rng_alg crypto_register_rng() crypto_unregister_rng() crypto_alloc_rng() crypto/drbg.c

• crypto_rng_get_bytes() 

• crypto_rng_reset() 

• crypto_rng_seedsize()

3 算法类型细节

3.1 akcipher非对称加解密算法

参考《Linux Crypto:akcipher以及rsa、rsa,sha256算法注册 - ArnoldLu - 博客园》。

3.2 skcipher对称加解密算法

3.3 HASH算法

3.4 RNG算法

posted on 2025-07-24 23:59  ArnoldLu  阅读(104)  评论(0)    收藏  举报

导航