Linux加密库中的alloc_ahash与alloc_shash

Linux加密库中的alloc_ahash与alloc_shash,linux,tcp,cryptoapi,hmacsha1,Linux,Tcp,Cryptoapi,Hmacsha1,在Linux加密库中,以下各项之间的区别是什么: 加密分配哈希(…) 密码学(Allocahash)(…) 加密算法(…) 我猜“a”代表异步,“s”代表同步。 如果是这样的话,它在实现选择方面意味着什么 (在使用加密库处理TCP数据包时,我正在尝试找到计算HMAC(SHA1)值的正确方法)。&是您的良好起点。 没有所谓的异步和同步函数。所有函数(被调用者)都需要返回调用者。 但也有异步和同步操作 crypto\u alloc\u ahash()和crypto\u alloc\u shash

在Linux加密库中,以下各项之间的区别是什么:

  • 加密分配哈希(…)
  • 密码学(Allocahash)(…)
  • 加密算法(…)
我猜“a”代表异步,“s”代表同步。

如果是这样的话,它在实现选择方面意味着什么

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

&是您的良好起点。

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

但也有异步和同步操作

crypto\u alloc\u ahash()
crypto\u alloc\u shash()
的不同之处在于 第一个由异步操作组成,第二个由 同步操作

在第一种情况下,调用函数时立即返回主程序,留下要完成的操作。当操作完成时,他们通常使用信号/中断让主程序知道他们已经完成。您可以看到实现,下面给出了一个摘录

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);
 }
对于后者,主程序(调用者)必须等待函数中的操作完成才能继续。我想不出具体的场景 在此上下文中,同步是必需的。您可以看到实现

实际上,这两个函数看起来都一样,只是返回的值的类型不同。
函数的异步变体通常是您应该寻找的程序速度原因。此外,由于明显的原因,您不能从同步变量进行异步调用

编辑:

是同步哈希,我无法找出哈希和shash之间的区别。

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


参见vs.

为什么要猜?你为什么不看一下文档?我找不到任何关于这个的文档。你说得对。Linux内核中使用的许多API都没有很好的文档记录。但是值得一试,看看源文件本身。有时文档是以注释的形式出现的。那么“crypto_alloc_hash”是同步的还是异步的呢?请参见编辑。可能是开发人员希望为
ahash
shash
提供类似的结构。老实说,我不认为这完全回答了你的问题,但这将是你进一步深入研究的基础。也许有用:通过键入<代码> CAT/PROC/CIDOT/<代码>,你可以找到一个可用的密码算法列表,其中一个“类型”字段应该指示使用哪种函数(例如,在HMAC(SHA-1)的情况下)。,类型是“shash”)。不确定!!为什么不使用ahash()计算SHA1?您在/proc/crypto中看到的类型仅仅意味着HMAC被编译为同步散列。我想这不应该限制在您自己的程序中使用
ahash()
计算HMAC。