diff options
Diffstat (limited to 'pkgs/build-support/node/fetch-npm-deps/src/util.rs')
-rw-r--r-- | pkgs/build-support/node/fetch-npm-deps/src/util.rs | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/pkgs/build-support/node/fetch-npm-deps/src/util.rs b/pkgs/build-support/node/fetch-npm-deps/src/util.rs index 7dd928fdc43fa..023ba56793b90 100644 --- a/pkgs/build-support/node/fetch-npm-deps/src/util.rs +++ b/pkgs/build-support/node/fetch-npm-deps/src/util.rs @@ -1,10 +1,18 @@ use backoff::{retry, ExponentialBackoff}; +use data_encoding::BASE64; +use digest::Digest; use isahc::{ config::{CaCertificate, Configurable, RedirectPolicy, SslOption}, Body, Request, RequestExt, }; +use nix_nar::{Encoder, NarError}; use serde_json::{Map, Value}; -use std::{env, io::Read, path::Path}; +use sha2::Sha256; +use std::{ + env, + io::{self, Read}, + path::Path, +}; use url::Url; pub fn get_url(url: &Url) -> Result<Body, isahc::Error> { @@ -64,3 +72,12 @@ pub fn get_url_body_with_retry(url: &Url) -> Result<Vec<u8>, isahc::Error> { } => err, }) } + +pub fn make_sri_hash(path: &Path) -> Result<String, NarError> { + let mut encoder = Encoder::new(path)?; + let mut hasher = Sha256::new(); + + io::copy(&mut encoder, &mut hasher)?; + + Ok(format!("sha256-{}", BASE64.encode(&hasher.finalize()))) +} |