0
我試圖獲得Rust壽命的掛起。雖然我似乎理解他們,但我似乎並不知道解決問題的最佳方法。這裏是一個函數,我使用* ring *包生成SHA256 HMAC。下面是重現該問題的功能的簡化版本:保留U8數組返回值中的變量的生命期
fn sign<'b>(data: &[u8], key: &[u8]) -> &'b [u8] {
let hmac_key = hmac::SigningKey::new(&digest::SHA256, key);
let signature = hmac::sign(&hmac_key, data);
let data = signature.as_ref();
data
}
這不起作用,因爲signature
不活足夠長的時間。這就說得通了; as_ref
有參考到signature
,並且簽名不會超過該函數的結尾。
as_ref
是* ring *中推薦的方法,從Digest
結構中獲得&[u8]
結構,如documentation所示。
如何在不復制字節數組的全部內容的情況下更正signature
長度不夠長的問題?
你爲什麼要返回'&[u8]'?對於稱爲「sign」的函數來說,返回一個「Digest」似乎是完全自然的。 – delnan