@@ -176,10 +176,45 @@ WC_MAYBE_UNUSED static int check_aead_driver_masking(struct crypto_aead *tfm, co
176176#endif
177177}
178178
179+ WC_MAYBE_UNUSED static int check_shash_driver_masking (struct crypto_shash * tfm , const char * alg_name , const char * expected_driver_name ) {
180+ #ifdef LINUXKM_LKCAPI_PRIORITY_ALLOW_MASKING
181+ (void )tfm ; (void )alg_name ; (void )expected_driver_name ;
182+ return 0 ;
183+ #else
184+ const char * actual_driver_name ;
185+ int ret ;
186+ int alloced_tfm = 0 ;
187+
188+ if (! tfm ) {
189+ alloced_tfm = 1 ;
190+ tfm = crypto_alloc_shash (alg_name , 0 , 0 );
191+ }
192+ if (IS_ERR (tfm )) {
193+ pr_err ("error: allocating shash algorithm %s failed: %ld\n" ,
194+ alg_name , PTR_ERR (tfm ));
195+ return - EINVAL ;
196+ }
197+ actual_driver_name = crypto_tfm_alg_driver_name (crypto_shash_tfm (tfm ));
198+ if (strcmp (actual_driver_name , expected_driver_name )) {
199+ pr_err ("error: unexpected implementation for %s: %s (expected %s)\n" ,
200+ alg_name , actual_driver_name , expected_driver_name );
201+ ret = - ENOENT ;
202+ } else
203+ ret = 0 ;
204+
205+ if (alloced_tfm )
206+ crypto_free_shash (tfm );
207+
208+ return ret ;
209+ #endif
210+ }
211+
179212#ifndef NO_AES
180213 #include "lkcapi_aes_glue.c"
181214#endif
182215
216+ #include "lkcapi_sha_glue.c"
217+
183218#ifdef HAVE_ECC
184219 #if (defined(LINUXKM_LKCAPI_REGISTER_ALL ) && !defined(LINUXKM_LKCAPI_DONT_REGISTER_ECDSA )) && \
185220 !defined(LINUXKM_LKCAPI_REGISTER_ECDSA )
@@ -350,6 +385,64 @@ static int linuxkm_lkcapi_register(void)
350385 REGISTER_ALG (ecbAesAlg , crypto_register_skcipher , linuxkm_test_aesecb );
351386#endif
352387
388+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA1
389+ REGISTER_ALG (sha1_alg , crypto_register_shash , linuxkm_test_sha1 );
390+ #endif
391+
392+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_224
393+ REGISTER_ALG (sha2_224_alg , crypto_register_shash , linuxkm_test_sha2_224 );
394+ #endif
395+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_256
396+ REGISTER_ALG (sha2_256_alg , crypto_register_shash , linuxkm_test_sha2_256 );
397+ #endif
398+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_384
399+ REGISTER_ALG (sha2_384_alg , crypto_register_shash , linuxkm_test_sha2_384 );
400+ #endif
401+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_512
402+ REGISTER_ALG (sha2_512_alg , crypto_register_shash , linuxkm_test_sha2_512 );
403+ #endif
404+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_224
405+ REGISTER_ALG (sha3_224_alg , crypto_register_shash , linuxkm_test_sha3_224 );
406+ #endif
407+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_256
408+ REGISTER_ALG (sha3_256_alg , crypto_register_shash , linuxkm_test_sha3_256 );
409+ #endif
410+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_384
411+ REGISTER_ALG (sha3_384_alg , crypto_register_shash , linuxkm_test_sha3_384 );
412+ #endif
413+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_512
414+ REGISTER_ALG (sha3_512_alg , crypto_register_shash , linuxkm_test_sha3_512 );
415+ #endif
416+
417+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA1_HMAC
418+ REGISTER_ALG (sha1_hmac_alg , crypto_register_shash , linuxkm_test_sha1_hmac );
419+ #endif
420+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_224_HMAC
421+ REGISTER_ALG (sha2_224_hmac_alg , crypto_register_shash , linuxkm_test_sha2_224_hmac );
422+ #endif
423+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_256_HMAC
424+ REGISTER_ALG (sha2_256_hmac_alg , crypto_register_shash , linuxkm_test_sha2_256_hmac );
425+ #endif
426+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_384_HMAC
427+ REGISTER_ALG (sha2_384_hmac_alg , crypto_register_shash , linuxkm_test_sha2_384_hmac );
428+ #endif
429+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_512_HMAC
430+ REGISTER_ALG (sha2_512_hmac_alg , crypto_register_shash , linuxkm_test_sha2_512_hmac );
431+ #endif
432+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_224_HMAC
433+ REGISTER_ALG (sha3_224_hmac_alg , crypto_register_shash , linuxkm_test_sha3_224_hmac );
434+ #endif
435+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_256_HMAC
436+ REGISTER_ALG (sha3_256_hmac_alg , crypto_register_shash , linuxkm_test_sha3_256_hmac );
437+ #endif
438+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_384_HMAC
439+ REGISTER_ALG (sha3_384_hmac_alg , crypto_register_shash , linuxkm_test_sha3_384_hmac );
440+ #endif
441+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_512_HMAC
442+ REGISTER_ALG (sha3_512_hmac_alg , crypto_register_shash , linuxkm_test_sha3_512_hmac );
443+ #endif
444+
445+
353446#ifdef LINUXKM_LKCAPI_REGISTER_ECDSA
354447 #if defined(LINUXKM_ECC192 )
355448 REGISTER_ALG (ecdsa_nist_p192 , crypto_register_akcipher ,
@@ -445,6 +538,64 @@ static void linuxkm_lkcapi_unregister(void)
445538 UNREGISTER_ALG (ecbAesAlg , crypto_unregister_skcipher );
446539#endif
447540
541+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA1
542+ UNREGISTER_ALG (sha1_alg , crypto_unregister_shash );
543+ #endif
544+
545+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_224
546+ UNREGISTER_ALG (sha2_224_alg , crypto_unregister_shash );
547+ #endif
548+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_256
549+ UNREGISTER_ALG (sha2_256_alg , crypto_unregister_shash );
550+ #endif
551+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_384
552+ UNREGISTER_ALG (sha2_384_alg , crypto_unregister_shash );
553+ #endif
554+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_512
555+ UNREGISTER_ALG (sha2_512_alg , crypto_unregister_shash );
556+ #endif
557+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_224
558+ UNREGISTER_ALG (sha3_224_alg , crypto_unregister_shash );
559+ #endif
560+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_256
561+ UNREGISTER_ALG (sha3_256_alg , crypto_unregister_shash );
562+ #endif
563+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_384
564+ UNREGISTER_ALG (sha3_384_alg , crypto_unregister_shash );
565+ #endif
566+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_512
567+ UNREGISTER_ALG (sha3_512_alg , crypto_unregister_shash );
568+ #endif
569+
570+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA1
571+ UNREGISTER_ALG (sha1_hmac_alg , crypto_unregister_shash );
572+ #endif
573+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_224_HMAC
574+ UNREGISTER_ALG (sha2_224_hmac_alg , crypto_unregister_shash );
575+ #endif
576+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_256_HMAC
577+ UNREGISTER_ALG (sha2_256_hmac_alg , crypto_unregister_shash );
578+ #endif
579+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_384_HMAC
580+ UNREGISTER_ALG (sha2_384_hmac_alg , crypto_unregister_shash );
581+ #endif
582+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA2_512_HMAC
583+ UNREGISTER_ALG (sha2_512_hmac_alg , crypto_unregister_shash );
584+ #endif
585+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_224_HMAC
586+ UNREGISTER_ALG (sha3_224_hmac_alg , crypto_unregister_shash );
587+ #endif
588+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_256_HMAC
589+ UNREGISTER_ALG (sha3_256_hmac_alg , crypto_unregister_shash );
590+ #endif
591+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_384_HMAC
592+ UNREGISTER_ALG (sha3_384_hmac_alg , crypto_unregister_shash );
593+ #endif
594+ #ifdef LINUXKM_LKCAPI_REGISTER_SHA3_512_HMAC
595+ UNREGISTER_ALG (sha3_512_hmac_alg , crypto_unregister_shash );
596+ #endif
597+
598+
448599#ifdef LINUXKM_LKCAPI_REGISTER_ECDSA
449600 #if defined(LINUXKM_ECC192 )
450601 UNREGISTER_ALG (ecdsa_nist_p192 , crypto_unregister_akcipher );
0 commit comments