@@ -9,8 +9,8 @@ use async_trait::async_trait;
99use blake3:: { Hash as BlakeDigest , Hasher as BlakeHasher } ;
1010use camino:: Utf8Path ;
1111use hex:: ToHex ;
12- use ring:: digest:: { Context as DigestContext , Digest as ShaDigest , SHA256 } ;
1312use serde:: { Deserialize , Serialize } ;
13+ use sha2:: { Digest as _, Sha256 } ;
1414use tokio:: io:: { AsyncReadExt , BufReader } ;
1515
1616// The buffer size used to hash smaller files.
@@ -22,6 +22,8 @@ const HASH_BUFFER_SIZE: usize = 16 * (1 << 10);
2222// NOTE: This is currently only blake3-specific.
2323const LARGE_HASH_SIZE : usize = 1 << 20 ;
2424
25+ struct ShaDigest ( [ u8 ; 32 ] ) ;
26+
2527/// Implemented by algorithms which can take digests of files.
2628#[ async_trait]
2729pub trait FileDigester {
@@ -36,7 +38,7 @@ impl FileDigester for ShaDigest {
3638 . await
3739 . with_context ( || format ! ( "could not open {path:?}" ) ) ?,
3840 ) ;
39- let mut context = DigestContext :: new ( & SHA256 ) ;
41+ let mut hasher = Sha256 :: new ( ) ;
4042 let mut buffer = [ 0 ; HASH_BUFFER_SIZE ] ;
4143 loop {
4244 let count = reader
@@ -46,10 +48,10 @@ impl FileDigester for ShaDigest {
4648 if count == 0 {
4749 break ;
4850 } else {
49- context . update ( & buffer[ ..count] ) ;
51+ hasher . update ( & buffer[ ..count] ) ;
5052 }
5153 }
52- let digest = context . finish ( ) . into ( ) ;
54+ let digest = ShaDigest ( hasher . finalize ( ) . into ( ) ) . into ( ) ;
5355
5456 Ok ( digest)
5557 }
@@ -106,7 +108,7 @@ pub enum Digest {
106108
107109impl From < ShaDigest > for Digest {
108110 fn from ( digest : ShaDigest ) -> Self {
109- Self :: Sha2 ( digest. as_ref ( ) . encode_hex :: < String > ( ) )
111+ Self :: Sha2 ( digest. 0 . as_ref ( ) . encode_hex :: < String > ( ) )
110112 }
111113}
112114
0 commit comments