Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/rust/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Rust 使用HMAC作为泛型_Rust_Hmac - Fatal编程技术网

Rust 使用HMAC作为泛型

Rust 使用HMAC作为泛型,rust,hmac,Rust,Hmac,我在更新板条箱hmac和digest时遇到问题。我定义了一个函数,它接受HMAC函数的泛型类型,并在给定的输入上计算HMAC。我有一个函数,其hmac和digest的版本分别为0.7和0.8。然而,当我试图分别为最新版本0.10和0.9运行相同的逻辑时,我被阻止了 在我的机器中,我使用rustc 1.48.0(7eac88abb 2020-11-16) 工作示例具有以下Cargo.toml依赖项 [依赖项] hmac=“0.7” sha2=“0.8” digest=“0.8” 最简单的工作示例

我在更新板条箱
hmac
digest
时遇到问题。我定义了一个函数,它接受HMAC函数的泛型类型,并在给定的输入上计算HMAC。我有一个函数,其
hmac
digest
的版本分别为0.7和0.8。然而,当我试图分别为最新版本0.10和0.9运行相同的逻辑时,我被阻止了

在我的机器中,我使用
rustc 1.48.0(7eac88abb 2020-11-16)

工作示例具有以下
Cargo.toml
依赖项

[依赖项]
hmac=“0.7”
sha2=“0.8”
digest=“0.8”
最简单的工作示例如下所示:

使用sha2::{Sha256};
使用hmac::{Mac,hmac};
HmacSha256型=Hmac;
使用摘要::泛型数组::typenum::{U32};
发布结构键([u8;2]);
impl密钥{
pub fn print_hmac(&self,message:&u8])
哪里
D:麦克,
{
让mut mac=D::new_varkey(self.0.as_ref()).unwrap();
mac.input(消息);
让result=mac.result();
让code_bytes=result.code();
println!(“{:?}”,代码字节)
}
}
pub fn main(){
设verif_key=key([12u8,33u8]);
验证键打印:(&[83u8,123u8]);
}
上面的代码运行良好,可以编译。但是,当我尝试将依赖项升级到最新版本时,一切都会中断

更新的
Cargo.toml

[依赖项]
hmac=“0.10”
sha2=“0.9”
digest=“0.9”
更新后,我们对术语进行了一些更改:

.input() -> .update()
.result() -> .finalize()
.code() -> .into_bytes()
当我尝试运行它时,我得到以下错误

在当前作用域中找不到类型参数“D”的名为“new_varkey”的函数或关联项

因此,我尝试将泛型类型定义为
NewMac
(为此,需要将第二行更改为
usehmac::{Mac,hmac,NewMac};
)。但是,现在错误出现在函数
.update()
.finalize()

我还尝试传递摘要泛型类型,而不是Hmac,如下所示:

pub fn print\u hmac(&self,消息:&u8])
哪里
D:文摘,
{
让mut mac=Hmac:::new_varkey(self.0.as_ref()).unwrap();
mac.update(消息);
让结果=mac.finalize();
让code_bytes=result.into_bytes();
println!(“{:?}”,代码字节)
}
但仍然不起作用

我应该如何处理更新板条箱的通用Hmac功能


很抱歉发了这么长的帖子,我希望我能把我的问题说清楚。谢谢社区

最好看看跨版本更新的示例代码,幸运的是
hmac
的存储库中有

这些测试使用
crypto mac
机箱中定义的
new\u测试
宏。特别是,有一行与你的类似

let mut mac=::new_varkey(key).unwrap();
…这表明
D
也应该被转换为代码中的
NewMac
实现者

在实现您已经确定的命名法更新后,您的代码将使用从上面转换的附加
作为NewMac
,以及
D
上绑定的相应的新
+NewMac
特征:

使用sha2::{Sha256};
使用hmac::{NewMac,Mac,hmac};
HmacSha256型=Hmac;
使用摘要::泛型数组::typenum::{U32};
发布结构键([u8;2]);
impl密钥{
pub fn print_hmac(&self,message:&u8])
哪里
D:Mac+NewMac,/`+NewMac`输入特征绑定
{
让mut mac=::new_varkey(self.0.as_ref()).unwrap();/`as NewMac`cast
mac.update(消息);
让结果=mac.finalize();
让code_bytes=result.into_bytes();
println!(“{:?}”,代码字节)
}
}
pub fn main(){
设verif_key=key([12u8,33u8]);
验证键打印:(&[83u8,123u8]);
}

最好看看跨版本更新的示例代码,幸运的是
hmac
的存储库中有

这些测试使用
crypto mac
机箱中定义的
new\u测试
宏。特别是,有一行与你的类似

let mut mac=::new_varkey(key).unwrap();
…这表明
D
也应该被转换为代码中的
NewMac
实现者

在实现您已经确定的命名法更新后,您的代码将使用从上面转换的附加
作为NewMac
,以及
D
上绑定的相应的新
+NewMac
特征:

使用sha2::{Sha256};
使用hmac::{NewMac,Mac,hmac};
HmacSha256型=Hmac;
使用摘要::泛型数组::typenum::{U32};
发布结构键([u8;2]);
impl密钥{
pub fn print_hmac(&self,message:&u8])
哪里
D:Mac+NewMac,/`+NewMac`输入特征绑定
{
让mut mac=::new_varkey(self.0.as_ref()).unwrap();/`as NewMac`cast
mac.update(消息);
让结果=mac.finalize();
让code_bytes=result.into_bytes();
println!(“{:?}”,代码字节)
}
}
pub fn main(){
设verif_key=key([12u8,33u8]);
验证键打印:(&[83u8,123u8]);
}