@@ -60,6 +60,9 @@ use kernel::utilities::leasable_buffer::SubSliceMut;
6060use kernel:: { ErrorCode , ProcessId } ;
6161
6262enum ShaOperation {
63+ Md5 ,
64+ Sha1 ,
65+ Sha224 ,
6366 Sha256 ,
6467 Sha384 ,
6568 Sha512 ,
@@ -90,7 +93,13 @@ pub struct HmacDriver<'a, H: digest::Digest<'a, DIGEST_LEN>, const DIGEST_LEN: u
9093
9194impl <
9295 ' a ,
93- H : digest:: Digest < ' a , DIGEST_LEN > + digest:: HmacSha256 + digest:: HmacSha384 + digest:: HmacSha512 ,
96+ H : digest:: Digest < ' a , DIGEST_LEN >
97+ + digest:: HmacMd5
98+ + digest:: HmacSha1
99+ + digest:: HmacSha224
100+ + digest:: HmacSha256
101+ + digest:: HmacSha384
102+ + digest:: HmacSha512 ,
94103 const DIGEST_LEN : usize ,
95104> HmacDriver < ' a , H , DIGEST_LEN >
96105{
@@ -128,9 +137,19 @@ impl<
128137 let mut tmp_key_buffer: [ u8 ; TMP_KEY_BUFFER_SIZE ] =
129138 [ 0 ; TMP_KEY_BUFFER_SIZE ] ;
130139 let key_len = core:: cmp:: min ( k. len ( ) , TMP_KEY_BUFFER_SIZE ) ;
140+
131141 k[ ..key_len] . copy_to_slice ( & mut tmp_key_buffer[ ..key_len] ) ;
132142
133143 match op {
144+ ShaOperation :: Md5 => {
145+ self . hmac . set_mode_hmacmd5 ( & tmp_key_buffer[ ..key_len] )
146+ }
147+ ShaOperation :: Sha1 => {
148+ self . hmac . set_mode_hmacsha1 ( & tmp_key_buffer[ ..key_len] )
149+ }
150+ ShaOperation :: Sha224 => self
151+ . hmac
152+ . set_mode_hmacsha224 ( & tmp_key_buffer[ ..key_len] ) ,
134153 ShaOperation :: Sha256 => self
135154 . hmac
136155 . set_mode_hmacsha256 ( & tmp_key_buffer[ ..key_len] ) ,
@@ -247,7 +266,13 @@ impl<
247266
248267impl <
249268 ' a ,
250- H : digest:: Digest < ' a , DIGEST_LEN > + digest:: HmacSha256 + digest:: HmacSha384 + digest:: HmacSha512 ,
269+ H : digest:: Digest < ' a , DIGEST_LEN >
270+ + digest:: HmacMd5
271+ + digest:: HmacSha1
272+ + digest:: HmacSha224
273+ + digest:: HmacSha256
274+ + digest:: HmacSha384
275+ + digest:: HmacSha512 ,
251276 const DIGEST_LEN : usize ,
252277> digest:: ClientData < DIGEST_LEN > for HmacDriver < ' a , H , DIGEST_LEN >
253278{
@@ -382,7 +407,13 @@ impl<
382407
383408impl <
384409 ' a ,
385- H : digest:: Digest < ' a , DIGEST_LEN > + digest:: HmacSha256 + digest:: HmacSha384 + digest:: HmacSha512 ,
410+ H : digest:: Digest < ' a , DIGEST_LEN >
411+ + digest:: HmacMd5
412+ + digest:: HmacSha1
413+ + digest:: HmacSha224
414+ + digest:: HmacSha256
415+ + digest:: HmacSha384
416+ + digest:: HmacSha512 ,
386417 const DIGEST_LEN : usize ,
387418> digest:: ClientHash < DIGEST_LEN > for HmacDriver < ' a , H , DIGEST_LEN >
388419{
@@ -433,7 +464,13 @@ impl<
433464
434465impl <
435466 ' a ,
436- H : digest:: Digest < ' a , DIGEST_LEN > + digest:: HmacSha256 + digest:: HmacSha384 + digest:: HmacSha512 ,
467+ H : digest:: Digest < ' a , DIGEST_LEN >
468+ + digest:: HmacMd5
469+ + digest:: HmacSha1
470+ + digest:: HmacSha224
471+ + digest:: HmacSha256
472+ + digest:: HmacSha384
473+ + digest:: HmacSha512 ,
437474 const DIGEST_LEN : usize ,
438475> digest:: ClientVerify < DIGEST_LEN > for HmacDriver < ' a , H , DIGEST_LEN >
439476{
@@ -483,7 +520,13 @@ impl<
483520/// the HMAC digest before calling the `hash_done` callback.
484521impl <
485522 ' a ,
486- H : digest:: Digest < ' a , DIGEST_LEN > + digest:: HmacSha256 + digest:: HmacSha384 + digest:: HmacSha512 ,
523+ H : digest:: Digest < ' a , DIGEST_LEN >
524+ + digest:: HmacMd5
525+ + digest:: HmacSha1
526+ + digest:: HmacSha224
527+ + digest:: HmacSha256
528+ + digest:: HmacSha384
529+ + digest:: HmacSha512 ,
487530 const DIGEST_LEN : usize ,
488531> SyscallDriver for HmacDriver < ' a , H , DIGEST_LEN >
489532{
@@ -627,6 +670,21 @@ impl<
627670 app. sha_operation = Some ( ShaOperation :: Sha512 ) ;
628671 CommandReturn :: success ( )
629672 }
673+ // SHA224
674+ 3 => {
675+ app. sha_operation = Some ( ShaOperation :: Sha224 ) ;
676+ CommandReturn :: success ( )
677+ }
678+ // SHA1
679+ 4 => {
680+ app. sha_operation = Some ( ShaOperation :: Sha1 ) ;
681+ CommandReturn :: success ( )
682+ }
683+ // Md5
684+ 5 => {
685+ app. sha_operation = Some ( ShaOperation :: Md5 ) ;
686+ CommandReturn :: success ( )
687+ }
630688 _ => CommandReturn :: failure ( ErrorCode :: NOSUPPORT ) ,
631689 }
632690 }
0 commit comments