add blob hasher function
This commit is contained in:
parent
e6c3a8e993
commit
ac0980a7ab
|
@ -223,6 +223,15 @@ version = "1.3.2"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "block-buffer"
|
||||||
|
version = "0.10.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0bf7fe51849ea569fd452f37822f606a5cabb684dc918707a0193fd4664ff324"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "blocking"
|
name = "blocking"
|
||||||
version = "1.1.0"
|
version = "1.1.0"
|
||||||
|
@ -282,6 +291,15 @@ dependencies = [
|
||||||
"cache-padded",
|
"cache-padded",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cpufeatures"
|
||||||
|
version = "0.2.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "95059428f66df56b63431fdb4e1947ed2190586af5c5a8a8b71122bdf5a7f469"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "crossbeam-utils"
|
name = "crossbeam-utils"
|
||||||
version = "0.8.7"
|
version = "0.8.7"
|
||||||
|
@ -292,6 +310,16 @@ dependencies = [
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "crypto-common"
|
||||||
|
version = "0.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "57952ca27b5e3606ff4dd79b0020231aaf9d6aa76dc05fd30137538c50bd3ce8"
|
||||||
|
dependencies = [
|
||||||
|
"generic-array",
|
||||||
|
"typenum",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "ctor"
|
name = "ctor"
|
||||||
version = "0.1.21"
|
version = "0.1.21"
|
||||||
|
@ -302,6 +330,16 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "digest"
|
||||||
|
version = "0.10.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f2fb860ca6fafa5552fb6d0e816a69c8e49f0908bf524e30a90d97c85892d506"
|
||||||
|
dependencies = [
|
||||||
|
"block-buffer",
|
||||||
|
"crypto-common",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "dirs"
|
name = "dirs"
|
||||||
version = "2.0.2"
|
version = "2.0.2"
|
||||||
|
@ -448,6 +486,16 @@ version = "0.3.55"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
|
checksum = "8f5f3913fa0bfe7ee1fd8248b6b9f42a5af4b9d65ec2dd2c3c26132b950ecfc2"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "generic-array"
|
||||||
|
version = "0.14.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "fd48d33ec7f05fbfa152300fdad764757cbded343c1aa1cff2fbaf4134851803"
|
||||||
|
dependencies = [
|
||||||
|
"typenum",
|
||||||
|
"version_check",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "get_if_addrs"
|
name = "get_if_addrs"
|
||||||
version = "0.5.3"
|
version = "0.5.3"
|
||||||
|
@ -507,6 +555,7 @@ dependencies = [
|
||||||
"kuska-ssb",
|
"kuska-ssb",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
|
"sha2",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -814,6 +863,17 @@ dependencies = [
|
||||||
"serde",
|
"serde",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "sha2"
|
||||||
|
version = "0.10.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "55deaec60f81eefe3cce0dc50bda92d6d8e88f2a27df7c5033b42afeb1ed2676"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if 1.0.0",
|
||||||
|
"cpufeatures",
|
||||||
|
"digest",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "signal-hook"
|
name = "signal-hook"
|
||||||
version = "0.3.13"
|
version = "0.3.13"
|
||||||
|
@ -880,6 +940,12 @@ dependencies = [
|
||||||
"syn",
|
"syn",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "typenum"
|
||||||
|
version = "1.15.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "dcf81ac59edc17cc8697ff311e8f5ef2d99fcbd9817b34cec66f90b6c3dfd987"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-xid"
|
name = "unicode-xid"
|
||||||
version = "0.2.2"
|
version = "0.2.2"
|
||||||
|
|
|
@ -22,3 +22,4 @@ kuska-sodiumoxide = "0.2.5-0"
|
||||||
kuska-ssb = "0.4.0"
|
kuska-ssb = "0.4.0"
|
||||||
serde = { version = "1", features = ["derive"] }
|
serde = { version = "1", features = ["derive"] }
|
||||||
serde_json = "1"
|
serde_json = "1"
|
||||||
|
sha2 = "0.10.2"
|
||||||
|
|
28
src/blobs.rs
28
src/blobs.rs
|
@ -3,6 +3,10 @@
|
||||||
//! Offers the following functions:
|
//! Offers the following functions:
|
||||||
//!
|
//!
|
||||||
//! - [`get_blob_path()`]
|
//! - [`get_blob_path()`]
|
||||||
|
//! - [`hash_blob()`]
|
||||||
|
|
||||||
|
use base64;
|
||||||
|
use sha2::{Digest, Sha256};
|
||||||
|
|
||||||
use crate::error::GolgiError;
|
use crate::error::GolgiError;
|
||||||
|
|
||||||
|
@ -54,3 +58,27 @@ pub fn get_blob_path(blob_id: &str) -> Result<String, GolgiError> {
|
||||||
|
|
||||||
Ok(blob_path)
|
Ok(blob_path)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Hash the given blob byte slice and return the hex representation and
|
||||||
|
/// blob ID (sigil-link).
|
||||||
|
///
|
||||||
|
/// This function can be used when adding a blob to the local blobstore.
|
||||||
|
pub fn hash_blob(buffer: &[u8]) -> Result<(String, String), GolgiError> {
|
||||||
|
// hash the bytes
|
||||||
|
let hash = Sha256::digest(buffer);
|
||||||
|
|
||||||
|
// generate a hex representation of the hash
|
||||||
|
let hex_hash = format!("{:02x?}", hash)
|
||||||
|
.replace('[', "")
|
||||||
|
.replace(']', "")
|
||||||
|
.replace(',', "")
|
||||||
|
.replace(' ', "");
|
||||||
|
|
||||||
|
// encode the hash
|
||||||
|
let b64_hash = base64::encode(&hash[..]);
|
||||||
|
|
||||||
|
// format the base64 encoding as a blob sigil-link (blob id)
|
||||||
|
let blob_id = format!("&{}.sha256", b64_hash);
|
||||||
|
|
||||||
|
Ok((hex_hash, blob_id))
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue