Reputation: 22842
I'm trying to find the Rust equivalent of the function below in Python. I've looked into the hmac crate but it's not clear how to get the same digest.
import base64
import hashlib
import hmac
def hmac_signature(key, msg):
hmac_buffer = hmac.new(
key=bytes(key, 'utf-8'),
msg=bytes(msg, 'utf-8'),
digestmod=hashlib.sha256
)
return base64.b64encode(hmac_buffer.digest()).decode('utf-8')
use base64;
use sha2::Sha256;
use hmac::{Hmac, Mac};
use ring::{digest};
fn main() {
let key = "secret";
let msg = "message";
let signature = hmac_signature(key, msg);
let expected = "i19IcCmVwVmMVz2x4hhmqbgl1KeU0WnXBgoDYFeWNgs=";
assert_eq!(signature, expected);
}
fn hmac_signature(key: &str, msg: &str) -> String {
type HmacSha256 = Hmac<Sha256>;
let mut mac = HmacSha256::new_from_slice(key.as_bytes()).unwrap();
mac.update(&msg.as_bytes());
let code_bytes = mac.finalize().into_bytes();
let hash = |v| digest::digest(&digest::SHA256, v);
let digest = hash(&code_bytes);
return base64::encode(&digest);
}
Upvotes: 1
Views: 1024
Reputation: 22842
use base64;
use sha2::Sha256;
use hmac::{Hmac, Mac};
fn main() {
let key = "secret";
let msg = "message";
let signature = hmac_signature(key, msg);
let expected = "i19IcCmVwVmMVz2x4hhmqbgl1KeU0WnXBgoDYFeWNgs=";
assert_eq!(signature, expected);
}
fn hmac_signature(key: &str, msg: &str) -> String {
type HmacSha256 = Hmac<Sha256>;
let mut mac = HmacSha256::new_from_slice(key.as_bytes()).unwrap();
mac.update(&msg.as_bytes());
let code_bytes = mac.finalize().into_bytes();
return base64::encode(&code_bytes.to_vec());
}
Upvotes: 2