25得票4回答
几乎恒定时间旋转,不违反标准。

我正在努力想出一个常数时间旋转的方法,而不违反C/C++标准。 问题在于边缘/角落情况,算法中指定了操作,这些算法无法更改。例如,以下来自Crypto++,并在GCC ubsan下执行测试套件(即g++ fsanitize=undefined): $ ./cryptest.exe v | ...

21得票3回答
内存依赖性推测是否阻止BN_consttime_swap成为常数时间?

背景 OpenSSL中的functionBN_consttime_swap是一件美妙的事情。在这个片段中,condition已经计算为0或(BN_ULONG)-1: #define BN_CONSTTIME_SWAP(ind) \ do { \ t = (a...

7得票1回答
Java的ArrayList.sublist(startIndex, endIndex)方法的时间复杂度是什么?

基本上问题已经说得很清楚了。假设我有一个(已排序的)列表,其中包含从1K到1M个项目。我有一个“起始索引”和一个“结束索引”。如果我使用ArrayList.sublist(start, end)方法,时间复杂度是O(n)还是O(1)? 我已经在这里检查了答案,因为我认为这是一个常见问题,但尽管...

7得票5回答
在Java中快速常数时间评估"x==7"的真值,结果为1(真)或0(假)。

我希望将一个加密函数从C语言移植到Java。该函数必须在常数时间内运行,因此不允许使用条件分支(和基于x的表查找)。 原始的C代码如下: int x,result; ... result = (x==7); ... 如果 'x==7',则将'result'设为1,否则设为0。然后在进一...