【发布时间】:2019-01-14 09:30:00
【问题描述】:
RC6 wiki 使用取决于对数值的可变左旋转值。我有兴趣找到一种方法来实现 RC6 的恒定时间 c 代码。是否有开源或如何在恒定时间代码中实现变量左旋转的想法。
【问题讨论】:
-
旋转本身在几乎所有现代 cpu (barrel-shifter) 上都是恒定的。然而,计算应该移动多少位是另一回事。 Afaics,
lg w是一个常数,所以这也不是问题。所以旋转x <<< lg w应该在恒定时间内进行。 -
再想一想,即使没有桶形移位器,如果值应该被旋转的位数是恒定的,那么旋转总是在恒定时间内执行。
-
A部分和C部分呢?因为它们取决于以下代码中的 u 和 t: t = (B*(2B + 1))
-
@hardyrama 同样,旋转操作本身是在恒定时间内执行的。操作数的计算可能不是。