linux - Linux 加密库中的 alloc_ahash 与 alloc_shash

标签 linux tcp cryptoapi hmacsha1

在 Linux CRYPTO 库中,有什么区别:

  • crypto_alloc_hash(...);
  • crypto_alloc_ahash(...);
  • crypto_alloc_shash(...);

我猜“a”代表异步,“s”代表同步。

如果是这种情况,在实现选择方面意味着什么?

(我正在尝试找到在使用 CRYPTO 库处理 TCP 数据包时计算 HMAC(SHA1) 值的正确方法)。

最佳答案

SO Question1 & SO Question2对你来说是很好的起点。

没有所谓的异步函数和同步函数。所有函数(被调用者)都需要返回给调用者。

但是有异步和同步操作。

crypto_alloc_ahash()crypto_alloc_hash() 的区别在于 首先由异步操作组成,后者由 同步操作。

在第一个函数被调用时立即返回到主程序的情况下,留下它的操作来完成。当操作完成时,他们通常使用 SIGNALS/INTERRUPTS 让主程序知道他们已经完成。可以看到实现 here摘录如下。

struct crypto_ahash *crypto_alloc_ahash(const char *alg_name, u32 type,
                                        u32 mask)
 {
         return crypto_alloc_tfm(alg_name, &crypto_ahash_type, type, mask);
 }

在后者的情况下,主程序(调用者)必须等待函数中的操作完成才能继续。我想不出具体的场景 在这种情况下同步是强制性的。可以看到实现 here

事实上,这两个函数看起来是一样的,但它们返回的值的类型不同。
函数的异步变体通常是您应该寻找的程序速度原因。此外,出于显而易见的原因,您不能从同步变体进行异步调用。

编辑:

crypto_alloc_hash是同步哈希,我找不到哈希和散列之间的区别。

如果成功,两者都返回分配的密码句柄; IS_ERR 在发生错误时为真,PTR_ERR 返回错误代码。

参见 shash对比hash .

关于linux - Linux 加密库中的 alloc_ahash 与 alloc_shash,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33919247/

相关文章:

linux - 如何检测系统是否在 UNIX shell 脚本中启用了 IPv6?

python - 为什么 time.clock 给出的耗时比 time.time 长?

linux - 更新 GNU/Linux 内核以在每个数据包中发送 n 个 TCP 数据包

c - 在 linux x86_64 下非常快速地 ip-as-int 查找 IPv4 套接字?

windows - Windows证书存储中的私钥安全

c++ - Certmgr-没有私钥的自签名证书不会更新

linux - Bash 脚本编写和比较 2 个目录 - 初学者

linux - 安排一个文件的行与第二个文件的行相同

Windows TCP keepalive 发送没有 PSH 的 1 字节消息

windows - 需要帮助使用 CertFindCertificateInStore() 按主题名称(X500 格式,CERT_X500_NAME_STR)查找证书?