Skip to content

Commit a65f291

Browse files
fundthmcalculusallibell
authored andcommitted
SHA256 support (#355)
1 parent 0da1b52 commit a65f291

File tree

5 files changed

+53
-1
lines changed

5 files changed

+53
-1
lines changed

include/okapi.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,3 +90,7 @@ int32_t blake3_keyed_hash(struct ByteBuffer request,
9090
int32_t blake3_derive_key(struct ByteBuffer request,
9191
struct ByteBuffer *response,
9292
struct ExternError *err);
93+
94+
int32_t sha256_hash(struct ByteBuffer request,
95+
struct ByteBuffer *response,
96+
struct ExternError *err);

native/src/ffi/hashing.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,8 @@ pub extern "C" fn blake3_keyed_hash(request: ByteBuffer, response: &mut ByteBuff
1515
pub extern "C" fn blake3_derive_key(request: ByteBuffer, response: &mut ByteBuffer, err: &mut ExternError) -> i32 {
1616
c_impl!(Blake3DeriveKeyRequest, Hashing, blake3_derive_key, request, response, err)
1717
}
18+
19+
#[no_mangle]
20+
pub extern "C" fn sha256_hash(request: ByteBuffer, response: &mut ByteBuffer, err: &mut ExternError) -> i32 {
21+
c_impl!(Sha256HashRequest, Hashing, sha256_hash, request, response, err)
22+
}

native/src/hashing/mod.rs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
use std::convert::TryFrom;
22
use std::str;
3+
use sha2::Digest;
34

45
use crate::{didcomm::Error, proto::okapi::okapi_hashing::*};
56

@@ -34,13 +35,35 @@ impl crate::Hashing {
3435
digest: hash1.to_vec(),
3536
})
3637
}
38+
39+
pub fn sha256_hash<'a>(request: &Sha256HashRequest) -> Result<Sha256HashResponse, Error<'a>> {
40+
let data = request.data.clone();
41+
// Hash the provided data
42+
let mut hasher = sha2::Sha256::new();
43+
hasher.update(data.as_slice());
44+
Ok(Sha256HashResponse {
45+
digest: hasher.finalize().to_vec(),
46+
})
47+
}
3748
}
3849

3950
#[cfg(test)]
4051
mod test {
4152
use std::convert::TryFrom;
53+
use sha2::Digest;
4254
use crate::{Hashing};
43-
use crate::proto::hashing::{Blake3DeriveKeyRequest, Blake3HashRequest, Blake3KeyedHashRequest};
55+
use crate::proto::hashing::{Blake3DeriveKeyRequest, Blake3HashRequest, Blake3KeyedHashRequest, Sha256HashRequest};
56+
57+
#[test]
58+
fn test_sha256_hash() {
59+
let data = "Hello, world!";
60+
let request = Sha256HashRequest{data: data.as_bytes().to_vec() };
61+
let response = Hashing::sha256_hash(&request).unwrap();
62+
let mut hasher = sha2::Sha256::new();
63+
hasher.update(data.as_bytes());
64+
let hash_data = hasher.finalize();
65+
assert_eq!(response.digest.as_slice(), hash_data.to_vec().as_slice())
66+
}
4467

4568
#[test]
4669
fn test_blake3_hash() {

native/src/proto/okapi/okapi_hashing.rs

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,15 @@ pub struct Blake3DeriveKeyResponse {
3838
#[prost(bytes="vec", tag="1")]
3939
pub digest: ::prost::alloc::vec::Vec<u8>,
4040
}
41+
#[derive(::serde::Serialize, ::serde::Deserialize)]
42+
#[derive(Clone, PartialEq, ::prost::Message)]
43+
pub struct Sha256HashRequest {
44+
#[prost(bytes="vec", tag="1")]
45+
pub data: ::prost::alloc::vec::Vec<u8>,
46+
}
47+
#[derive(::serde::Serialize, ::serde::Deserialize)]
48+
#[derive(Clone, PartialEq, ::prost::Message)]
49+
pub struct Sha256HashResponse {
50+
#[prost(bytes="vec", tag="1")]
51+
pub digest: ::prost::alloc::vec::Vec<u8>,
52+
}

proto/okapi/hashing/v1/hashing.proto

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,3 +32,11 @@ message Blake3DeriveKeyRequest {
3232
message Blake3DeriveKeyResponse {
3333
bytes digest = 1;
3434
}
35+
36+
message SHA256HashRequest {
37+
bytes data = 1;
38+
}
39+
40+
message SHA256HashResponse {
41+
bytes digest = 1;
42+
}

0 commit comments

Comments
 (0)