Linux加密库中的alloc_ahash vs alloc_shash

时间:2015-11-25 14:36:22

标签: linux tcp cryptoapi hmacsha1

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

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

我猜'a'代表异步,'s'代表同步。

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

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

1 个答案:

答案 0 :(得分:1)

SO Question1& SO Question2是您的良好起点。

没有任何东西叫做异步和同步函数。所有函数(被调用者)都需要返回给调用者。

但是有异步和同步操作。

crypto_alloc_ahash()& crypto_alloc_shash()的不同之处在于 第一个由异步操作组成,后者由 同步操作。

如果第一个函数被调用,则立即返回主程序,留下其操作完成。当操作完成时,他们通常使用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是同步哈希,我找不到哈希和shash之间的区别。

两者都会在成功的情况下返回分配的密码句柄;如果出现错误,IS_ERR为真,PTR_ERR返回错误代码。

请参阅shash vs hash