22// SPDX-License-Identifier: Apache-2.0 OR MIT
33// Copyright OxidOS Automotive 2026.
44
5+ //! SHA1 adapter for the hash core.
6+
57use kernel:: hil:: digest;
68use kernel:: utilities:: cells:: OptionalCell ;
79use kernel:: ErrorCode ;
@@ -50,7 +52,9 @@ impl Sha1Adapter<'_> {
5052 result : Result < ( ) , kernel:: ErrorCode > ,
5153 digest : & ' static mut [ u8 ] ,
5254 ) {
53- // terrible
55+ // terrible because of `unwrap()`
56+ //
57+ // TODO: handle conversion of references of arrays better
5458 self . client
5559 . map ( |client| client. hash_done ( result, digest. try_into ( ) . unwrap ( ) ) ) ;
5660 }
@@ -60,20 +64,21 @@ impl Sha1Adapter<'_> {
6064 result : Result < bool , kernel:: ErrorCode > ,
6165 compare : & ' static mut [ u8 ] ,
6266 ) {
63- //terrible
67+ // terrible because of `unwrap()`
68+ //
69+ // TODO: handle conversion of references of arrays better
6470 self . client
6571 . map ( |client| client. verification_done ( result, compare. try_into ( ) . unwrap ( ) ) ) ;
6672 }
6773}
6874
6975impl < ' a > digest:: DigestData < ' a , SHA1_DIGEST_LEN > for Sha1Adapter < ' a > {
7076 fn set_data_client ( & ' a self , client : & ' a dyn kernel:: hil:: digest:: ClientData < SHA1_DIGEST_LEN > ) {
71- if let Some ( HashClient :: Single ( _, hash, verify) ) = self . client . get ( ) {
77+ if let Some ( HashClient :: Split ( _, hash, verify) ) = self . client . get ( ) {
7278 self . client
73- . set ( HashClient :: Single ( Some ( client) , hash, verify) ) ;
79+ . set ( HashClient :: Split ( Some ( client) , hash, verify) ) ;
7480 } else {
75- self . client
76- . set ( HashClient :: Single ( Some ( client) , None , None ) ) ;
81+ self . client . set ( HashClient :: Split ( Some ( client) , None , None ) ) ;
7782 }
7883 }
7984
@@ -101,9 +106,6 @@ impl<'a> digest::DigestData<'a, SHA1_DIGEST_LEN> for Sha1Adapter<'a> {
101106 ) ,
102107 > {
103108 self . hash . add_mut_data ( data)
104-
105- // self.hash
106- // .map_or(Err((ErrorCode::FAIL, data)), |hash| hash.add_mut_data(data))
107109 }
108110
109111 fn clear_data ( & self ) {
@@ -113,12 +115,11 @@ impl<'a> digest::DigestData<'a, SHA1_DIGEST_LEN> for Sha1Adapter<'a> {
113115
114116impl < ' a > digest:: DigestHash < ' a , SHA1_DIGEST_LEN > for Sha1Adapter < ' a > {
115117 fn set_hash_client ( & ' a self , client : & ' a dyn kernel:: hil:: digest:: ClientHash < SHA1_DIGEST_LEN > ) {
116- if let Some ( HashClient :: Single ( data, _, verify) ) = self . client . get ( ) {
118+ if let Some ( HashClient :: Split ( data, _, verify) ) = self . client . get ( ) {
117119 self . client
118- . set ( HashClient :: Single ( data, Some ( client) , verify) ) ;
120+ . set ( HashClient :: Split ( data, Some ( client) , verify) ) ;
119121 } else {
120- self . client
121- . set ( HashClient :: Single ( None , Some ( client) , None ) ) ;
122+ self . client . set ( HashClient :: Split ( None , Some ( client) , None ) ) ;
122123 }
123124 }
124125
@@ -127,13 +128,12 @@ impl<'a> digest::DigestHash<'a, SHA1_DIGEST_LEN> for Sha1Adapter<'a> {
127128 digest : & ' static mut [ u8 ; SHA1_DIGEST_LEN ] ,
128129 ) -> Result < ( ) , ( kernel:: ErrorCode , & ' static mut [ u8 ; SHA1_DIGEST_LEN ] ) > {
129130 self . hash . run ( digest) . map_err ( |( e, buf) | {
130- //terrible
131+ // terrible because of `unwrap()`
132+ //
133+ // TODO: handle conversion of references of arrays better
131134 let correct_buf: & ' static mut [ u8 ; SHA1_DIGEST_LEN ] = buf. try_into ( ) . unwrap ( ) ;
132135 ( e, correct_buf)
133136 } )
134-
135- // self.hash
136- // .map(|hash| hash.run(digest).inspect_err(|(e, buf)| {}))
137137 }
138138}
139139
@@ -142,12 +142,10 @@ impl<'a> digest::DigestVerify<'a, SHA1_DIGEST_LEN> for Sha1Adapter<'a> {
142142 & ' a self ,
143143 client : & ' a dyn kernel:: hil:: digest:: ClientVerify < SHA1_DIGEST_LEN > ,
144144 ) {
145- if let Some ( HashClient :: Single ( data, hash, _) ) = self . client . get ( ) {
146- self . client
147- . set ( HashClient :: Single ( data, hash, Some ( client) ) ) ;
145+ if let Some ( HashClient :: Split ( data, hash, _) ) = self . client . get ( ) {
146+ self . client . set ( HashClient :: Split ( data, hash, Some ( client) ) ) ;
148147 } else {
149- self . client
150- . set ( HashClient :: Single ( None , None , Some ( client) ) ) ;
148+ self . client . set ( HashClient :: Split ( None , None , Some ( client) ) ) ;
151149 }
152150 }
153151
@@ -156,34 +154,30 @@ impl<'a> digest::DigestVerify<'a, SHA1_DIGEST_LEN> for Sha1Adapter<'a> {
156154 compare : & ' static mut [ u8 ; SHA1_DIGEST_LEN ] ,
157155 ) -> Result < ( ) , ( kernel:: ErrorCode , & ' static mut [ u8 ; SHA1_DIGEST_LEN ] ) > {
158156 self . hash . verify ( compare) . map_err ( |( e, buf) | {
159- //terrible
157+ // terrible because of `unwrap()`
158+ //
159+ // TODO: handle conversion of references of arrays better
160160 let correct_buf: & ' static mut [ u8 ; SHA1_DIGEST_LEN ] = buf. try_into ( ) . unwrap ( ) ;
161161 ( e, correct_buf)
162162 } )
163-
164- // self.hash.verify(compare).map_err(|(error, buf)| {
165- // // terrible
166- // let correct_buf: &'static mut [u8; 32] = buf.try_into().unwrap();
167- // (error, correct_buf)
168- // })
169163 }
170164}
171165
172166impl < ' a > digest:: Digest < ' a , SHA1_DIGEST_LEN > for Sha1Adapter < ' a > {
173167 fn set_client ( & ' a self , client : & ' a dyn digest:: Client < SHA1_DIGEST_LEN > ) {
174- self . client . set ( HashClient :: Full ( client) ) ;
168+ self . client . set ( HashClient :: AllInOne ( client) ) ;
175169 }
176170}
177171
178172impl < ' a > digest:: DigestDataHash < ' a , SHA1_DIGEST_LEN > for Sha1Adapter < ' a > {
179173 fn set_client ( & ' a self , client : & ' a dyn digest:: ClientDataHash < SHA1_DIGEST_LEN > ) {
180- self . client . set ( HashClient :: DoubleHash ( client) ) ;
174+ self . client . set ( HashClient :: DataHasher ( client) ) ;
181175 }
182176}
183177
184178impl < ' a > digest:: DigestDataVerify < ' a , SHA1_DIGEST_LEN > for Sha1Adapter < ' a > {
185179 fn set_client ( & ' a self , client : & ' a dyn digest:: ClientDataVerify < SHA1_DIGEST_LEN > ) {
186- self . client . set ( HashClient :: DoubleVerify ( client) ) ;
180+ self . client . set ( HashClient :: DataVerifier ( client) ) ;
187181 }
188182}
189183
0 commit comments