Skip to content

Commit 13afd8c

Browse files
authored
replace ring with sha2 (#67)
1 parent fa483a7 commit 13afd8c

File tree

3 files changed

+13
-11
lines changed

3 files changed

+13
-11
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,11 +25,11 @@ futures = "0.3"
2525
futures-util = "0.3"
2626
hex = "0.4.3"
2727
reqwest = { version = "0.12", default-features = false, features = ["rustls-tls", "stream"] }
28-
ring = "0.16.20"
2928
semver = { version = "1.0.17", features = ["std", "serde"] }
3029
serde = { version = "1.0", features = [ "derive" ] }
3130
serde_derive = "1.0"
3231
serde_json = "1.0"
32+
sha2 = "0.10.8"
3333
slog = "2.7"
3434
tar = "0.4"
3535
thiserror = "1.0"

src/blob.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use camino::{Utf8Path, Utf8PathBuf};
99
use chrono::{DateTime, FixedOffset, Utc};
1010
use futures_util::StreamExt;
1111
use reqwest::header::{CONTENT_LENGTH, LAST_MODIFIED};
12-
use ring::digest::{Context as DigestContext, Digest, SHA256};
1312
use serde::{Deserialize, Serialize};
13+
use sha2::{Digest, Sha256};
1414
use std::str::FromStr;
1515
use tokio::io::{AsyncReadExt, AsyncWriteExt, BufReader};
1616

@@ -173,13 +173,13 @@ pub async fn download(
173173
Ok(())
174174
}
175175

176-
async fn get_sha256_digest(path: &Utf8Path) -> Result<Digest> {
176+
async fn get_sha256_digest(path: &Utf8Path) -> Result<[u8; 32]> {
177177
let mut reader = BufReader::new(
178178
tokio::fs::File::open(path)
179179
.await
180180
.with_context(|| format!("could not open {path:?}"))?,
181181
);
182-
let mut context = DigestContext::new(&SHA256);
182+
let mut hasher = Sha256::new();
183183
let mut buffer = [0; 1024];
184184

185185
loop {
@@ -190,10 +190,10 @@ async fn get_sha256_digest(path: &Utf8Path) -> Result<Digest> {
190190
if count == 0 {
191191
break;
192192
} else {
193-
context.update(&buffer[..count]);
193+
hasher.update(&buffer[..count]);
194194
}
195195
}
196-
Ok(context.finish())
196+
Ok(hasher.finalize().into())
197197
}
198198

199199
#[test]

src/digest.rs

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ use async_trait::async_trait;
99
use blake3::{Hash as BlakeDigest, Hasher as BlakeHasher};
1010
use camino::Utf8Path;
1111
use hex::ToHex;
12-
use ring::digest::{Context as DigestContext, Digest as ShaDigest, SHA256};
1312
use serde::{Deserialize, Serialize};
13+
use sha2::{Digest as _, Sha256};
1414
use 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.
2323
const 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]
2729
pub 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

107109
impl 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

Comments
 (0)