在Linux CRYPTO库中,有什么区别:
我猜'a'代表异步,'s'代表同步。
如果是这种情况,那么在实施选择方面意味着什么?
(我试图找到使用CRYPTO库处理TCP数据包时计算HMAC(SHA1)值的正确方法。)
答案 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返回错误代码。