小编Dan*_*Niu的帖子

如何在 ARM/ACLE 中交换向量中各个单词的字节顺序

我通常编写可移植的 C 代码,并尝试严格遵守编译器支持的功能子集的标准。

不过,我正在编写利用 ARM v8 加密扩展来实现 SHA-1(以及几天后的 SHA-256)的代码。我面临的一个问题是,FIPS-180 使用大端字节顺序指定哈希算法,而大多数基于 ARM 的操作系统 ABI 都是小端字节顺序。

如果它是单个整数操作数(在通用寄存器上),我可以使用为下一个 POSIX 标准指定的 API,但我正在使用 SIMD 寄存器,因为它是 ARMv8 Crypto 工作的地方。

那么:如何在 ARM 上的向量寄存器中交换字的字节顺序?我对汇编答案很满意,但更喜欢 ACLE 内在函数的答案。

arm simd cpu-word endianness neon

2
推荐指数
1
解决办法
489
查看次数

计算商而不跟踪余数的除法算法

作为一个业余项目,我试图使用独立的C来实现一些加密算法-也就是说,C的变体没有标准库函数(标准库类型和常量仍然可用),并且没有诸如VLA(可变长度数组)。

我要做的一件事是为大整数(大小> 128位)实现一些功能。但是,此设置中的整数除法功能需要跟踪其当前形式的余数,并且由于我使用的是独立式环境,因此调用方必须为其提供空间。

是否可以在不依赖于余数的情况下并可能使用位切片技术来实现除法算法来计算商?使用调用递归将变量保留在堆栈上是可以接受的。

我们假设大整数的类型为bigint_t:

#define N 8
typedef uint32_t bigint_t[N]; // least-significant word first. 
Run Code Online (Sandbox Code Playgroud)

c algorithm cryptography division

0
推荐指数
1
解决办法
133
查看次数

标签 统计

algorithm ×1

arm ×1

c ×1

cpu-word ×1

cryptography ×1

division ×1

endianness ×1

neon ×1

simd ×1