【发布时间】:2017-02-05 16:28:22
【问题描述】:
我正在尝试掌握 Rust 生命周期的窍门。虽然我似乎理解它们,但我似乎不知道修复它的最佳方法。这是我使用 *ring* 包生成 SHA256 HMAC 的函数。这是重现问题的函数的简化版本:
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似乎是完全自然的。