私は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
はdocumentationに見られるように、そのDigest
構造から&[u8]
を取得する* *リングで推奨される方法です。
signature
がバイト配列の内容全体をコピーせずに十分に長く存続しない問題を解決するにはどうすればよいですか?
なぜあなたは '&[u8]'を返そうとしますか? 'sign'という関数が' Digest'を返すのは完全に自然なことです。 – delnan