@@ -9,8 +9,8 @@ use async_trait::async_trait;
9
9
use blake3:: { Hash as BlakeDigest , Hasher as BlakeHasher } ;
10
10
use camino:: Utf8Path ;
11
11
use hex:: ToHex ;
12
- use ring:: digest:: { Context as DigestContext , Digest as ShaDigest , SHA256 } ;
13
12
use serde:: { Deserialize , Serialize } ;
13
+ use sha2:: { Digest as _, Sha256 } ;
14
14
use tokio:: io:: { AsyncReadExt , BufReader } ;
15
15
16
16
// The buffer size used to hash smaller files.
@@ -22,6 +22,8 @@ const HASH_BUFFER_SIZE: usize = 16 * (1 << 10);
22
22
// NOTE: This is currently only blake3-specific.
23
23
const LARGE_HASH_SIZE : usize = 1 << 20 ;
24
24
25
+ struct ShaDigest ( [ u8 ; 32 ] ) ;
26
+
25
27
/// Implemented by algorithms which can take digests of files.
26
28
#[ async_trait]
27
29
pub trait FileDigester {
@@ -36,7 +38,7 @@ impl FileDigester for ShaDigest {
36
38
. await
37
39
. with_context ( || format ! ( "could not open {path:?}" ) ) ?,
38
40
) ;
39
- let mut context = DigestContext :: new ( & SHA256 ) ;
41
+ let mut hasher = Sha256 :: new ( ) ;
40
42
let mut buffer = [ 0 ; HASH_BUFFER_SIZE ] ;
41
43
loop {
42
44
let count = reader
@@ -46,10 +48,10 @@ impl FileDigester for ShaDigest {
46
48
if count == 0 {
47
49
break ;
48
50
} else {
49
- context . update ( & buffer[ ..count] ) ;
51
+ hasher . update ( & buffer[ ..count] ) ;
50
52
}
51
53
}
52
- let digest = context . finish ( ) . into ( ) ;
54
+ let digest = ShaDigest ( hasher . finalize ( ) . into ( ) ) . into ( ) ;
53
55
54
56
Ok ( digest)
55
57
}
@@ -106,7 +108,7 @@ pub enum Digest {
106
108
107
109
impl From < ShaDigest > for Digest {
108
110
fn from ( digest : ShaDigest ) -> Self {
109
- Self :: Sha2 ( digest. as_ref ( ) . encode_hex :: < String > ( ) )
111
+ Self :: Sha2 ( digest. 0 . as_ref ( ) . encode_hex :: < String > ( ) )
110
112
}
111
113
}
112
114
0 commit comments