Skip to content

Commit 2a9269e

Browse files
authored
Merge pull request #8796 from philljj/linuxkm_rsa_sig
linuxkm rsa: add sig_alg support for linux 6.13
2 parents 8ce0a3b + da94105 commit 2a9269e

3 files changed

Lines changed: 1925 additions & 908 deletions

File tree

linuxkm/linuxkm_wc_port.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -298,6 +298,9 @@
298298
#include <crypto/internal/skcipher.h>
299299
#include <crypto/internal/akcipher.h>
300300
#include <crypto/internal/kpp.h>
301+
#if LINUX_VERSION_CODE >= KERNEL_VERSION(6, 13, 0)
302+
#include <crypto/internal/sig.h>
303+
#endif /* linux ver >= 6.13 */
301304

302305
/* the LKCAPI assumes that expanded encrypt and decrypt keys will stay
303306
* loaded simultaneously, and the Linux in-tree implementations have two

linuxkm/lkcapi_glue.c

Lines changed: 90 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -544,23 +544,50 @@ static int linuxkm_lkcapi_register(void)
544544
#endif /* LINUXKM_LKCAPI_REGISTER_ECDH */
545545

546546
#ifdef LINUXKM_LKCAPI_REGISTER_RSA
547-
#ifdef WOLFSSL_SHA224
548-
REGISTER_ALG(pkcs1_sha224, akcipher, linuxkm_test_pkcs1_sha224);
549-
#endif /* WOLFSSL_SHA224 */
550-
#ifndef NO_SHA256
551-
REGISTER_ALG(pkcs1_sha256, akcipher, linuxkm_test_pkcs1_sha256);
552-
#endif /* !NO_SHA256 */
553-
#ifdef WOLFSSL_SHA384
554-
REGISTER_ALG(pkcs1_sha384, akcipher, linuxkm_test_pkcs1_sha384);
555-
#endif /* WOLFSSL_SHA384 */
556-
#ifdef WOLFSSL_SHA512
557-
REGISTER_ALG(pkcs1_sha512, akcipher, linuxkm_test_pkcs1_sha512);
558-
#endif /* WOLFSSL_SHA512 */
559-
#ifdef WOLFSSL_SHA3
560-
REGISTER_ALG(pkcs1_sha3_256, akcipher, linuxkm_test_pkcs1_sha3_256);
561-
REGISTER_ALG(pkcs1_sha3_384, akcipher, linuxkm_test_pkcs1_sha3_384);
562-
REGISTER_ALG(pkcs1_sha3_512, akcipher, linuxkm_test_pkcs1_sha3_512);
563-
#endif /* WOLFSSL_SHA3 */
547+
#if !defined(LINUXKM_AKCIPHER_NO_SIGNVERIFY)
548+
/* linux kernel < 6.13 consists of:
549+
* akcipher: "pkcs1pad(<rsa>, <hash>)" */
550+
#ifdef WOLFSSL_SHA224
551+
REGISTER_ALG(pkcs1_sha224, akcipher, linuxkm_test_pkcs1_sha224);
552+
#endif /* WOLFSSL_SHA224 */
553+
#ifndef NO_SHA256
554+
REGISTER_ALG(pkcs1_sha256, akcipher, linuxkm_test_pkcs1_sha256);
555+
#endif /* !NO_SHA256 */
556+
#ifdef WOLFSSL_SHA384
557+
REGISTER_ALG(pkcs1_sha384, akcipher, linuxkm_test_pkcs1_sha384);
558+
#endif /* WOLFSSL_SHA384 */
559+
#ifdef WOLFSSL_SHA512
560+
REGISTER_ALG(pkcs1_sha512, akcipher, linuxkm_test_pkcs1_sha512);
561+
#endif /* WOLFSSL_SHA512 */
562+
#ifdef WOLFSSL_SHA3
563+
REGISTER_ALG(pkcs1_sha3_256, akcipher, linuxkm_test_pkcs1_sha3_256);
564+
REGISTER_ALG(pkcs1_sha3_384, akcipher, linuxkm_test_pkcs1_sha3_384);
565+
REGISTER_ALG(pkcs1_sha3_512, akcipher, linuxkm_test_pkcs1_sha3_512);
566+
#endif /* WOLFSSL_SHA3 */
567+
#else
568+
/* linux kernel >= 6.13 consists of:
569+
* akcipher: "pkcs1pad(<rsa>)"
570+
* sig: "pkcs1(<rsa>, <hash>)" */
571+
#ifdef WOLFSSL_SHA224
572+
REGISTER_ALG(pkcs1_sha224, sig, linuxkm_test_pkcs1_sha224);
573+
#endif /* WOLFSSL_SHA224 */
574+
#ifndef NO_SHA256
575+
REGISTER_ALG(pkcs1_sha256, sig, linuxkm_test_pkcs1_sha256);
576+
#endif /* !NO_SHA256 */
577+
#ifdef WOLFSSL_SHA384
578+
REGISTER_ALG(pkcs1_sha384, sig, linuxkm_test_pkcs1_sha384);
579+
#endif /* WOLFSSL_SHA384 */
580+
#ifdef WOLFSSL_SHA512
581+
REGISTER_ALG(pkcs1_sha512, sig, linuxkm_test_pkcs1_sha512);
582+
#endif /* WOLFSSL_SHA512 */
583+
#ifdef WOLFSSL_SHA3
584+
REGISTER_ALG(pkcs1_sha3_256, sig, linuxkm_test_pkcs1_sha3_256);
585+
REGISTER_ALG(pkcs1_sha3_384, sig, linuxkm_test_pkcs1_sha3_384);
586+
REGISTER_ALG(pkcs1_sha3_512, sig, linuxkm_test_pkcs1_sha3_512);
587+
#endif /* WOLFSSL_SHA3 */
588+
589+
REGISTER_ALG(pkcs1pad, akcipher, linuxkm_test_pkcs1pad);
590+
#endif /* !LINUXKM_AKCIPHER_NO_SIGNVERIFY */
564591

565592
#if defined(LINUXKM_DIRECT_RSA)
566593
/* Note, direct RSA must be registered after all PKCS1 algs have been
@@ -790,26 +817,52 @@ static int linuxkm_lkcapi_unregister(void)
790817
#if defined(LINUXKM_DIRECT_RSA)
791818
UNREGISTER_ALG(direct_rsa, akcipher);
792819
#endif /* LINUXKM_DIRECT_RSA */
793-
#ifdef WOLFSSL_SHA224
794-
UNREGISTER_ALG(pkcs1_sha224, akcipher);
795-
#endif /* WOLFSSL_SHA224 */
796-
#ifndef NO_SHA256
797-
UNREGISTER_ALG(pkcs1_sha256, akcipher);
798-
#endif /* !NO_SHA256 */
799-
#ifdef WOLFSSL_SHA384
800-
UNREGISTER_ALG(pkcs1_sha384, akcipher);
801-
#endif /* WOLFSSL_SHA384 */
802-
#ifdef WOLFSSL_SHA384
803-
UNREGISTER_ALG(pkcs1_sha384, akcipher);
804-
#endif /* WOLFSSL_SHA384 */
805-
#ifdef WOLFSSL_SHA512
806-
UNREGISTER_ALG(pkcs1_sha512, akcipher);
807-
#endif /* WOLFSSL_SHA512 */
808-
#ifdef WOLFSSL_SHA3
809-
UNREGISTER_ALG(pkcs1_sha3_256, akcipher);
810-
UNREGISTER_ALG(pkcs1_sha3_384, akcipher);
811-
UNREGISTER_ALG(pkcs1_sha3_512, akcipher);
812-
#endif /* WOLFSSL_SHA3 */
820+
821+
#if !defined(LINUXKM_AKCIPHER_NO_SIGNVERIFY)
822+
#ifdef WOLFSSL_SHA224
823+
UNREGISTER_ALG(pkcs1_sha224, akcipher);
824+
#endif /* WOLFSSL_SHA224 */
825+
#ifndef NO_SHA256
826+
UNREGISTER_ALG(pkcs1_sha256, akcipher);
827+
#endif /* !NO_SHA256 */
828+
#ifdef WOLFSSL_SHA384
829+
UNREGISTER_ALG(pkcs1_sha384, akcipher);
830+
#endif /* WOLFSSL_SHA384 */
831+
#ifdef WOLFSSL_SHA384
832+
UNREGISTER_ALG(pkcs1_sha384, akcipher);
833+
#endif /* WOLFSSL_SHA384 */
834+
#ifdef WOLFSSL_SHA512
835+
UNREGISTER_ALG(pkcs1_sha512, akcipher);
836+
#endif /* WOLFSSL_SHA512 */
837+
#ifdef WOLFSSL_SHA3
838+
UNREGISTER_ALG(pkcs1_sha3_256, akcipher);
839+
UNREGISTER_ALG(pkcs1_sha3_384, akcipher);
840+
UNREGISTER_ALG(pkcs1_sha3_512, akcipher);
841+
#endif /* WOLFSSL_SHA3 */
842+
#else
843+
#ifdef WOLFSSL_SHA224
844+
UNREGISTER_ALG(pkcs1_sha224, sig);
845+
#endif /* WOLFSSL_SHA224 */
846+
#ifndef NO_SHA256
847+
UNREGISTER_ALG(pkcs1_sha256, sig);
848+
#endif /* !NO_SHA256 */
849+
#ifdef WOLFSSL_SHA384
850+
UNREGISTER_ALG(pkcs1_sha384, sig);
851+
#endif /* WOLFSSL_SHA384 */
852+
#ifdef WOLFSSL_SHA384
853+
UNREGISTER_ALG(pkcs1_sha384, sig);
854+
#endif /* WOLFSSL_SHA384 */
855+
#ifdef WOLFSSL_SHA512
856+
UNREGISTER_ALG(pkcs1_sha512, sig);
857+
#endif /* WOLFSSL_SHA512 */
858+
#ifdef WOLFSSL_SHA3
859+
UNREGISTER_ALG(pkcs1_sha3_256, sig);
860+
UNREGISTER_ALG(pkcs1_sha3_384, sig);
861+
UNREGISTER_ALG(pkcs1_sha3_512, sig);
862+
#endif /* WOLFSSL_SHA3 */
863+
864+
UNREGISTER_ALG(pkcs1pad, akcipher);
865+
#endif /* !LINUXKM_AKCIPHER_NO_SIGNVERIFY */
813866
#endif /* LINUXKM_LKCAPI_REGISTER_RSA */
814867

815868
#ifdef LINUXKM_LKCAPI_REGISTER_DH

0 commit comments

Comments
 (0)