构成比特币的三个核心技术是非对称加密,P2P网络以及哈希算法,我对哈希算法的单向性很感兴趣,这些笔记是对实现SHA-512期间的笔记做一下记录;$W_t$字的计算是轮函数一次要计算80次,每次都要用到的。
1. 实现原理
2. 算法注释
2.1 简单的移位操作
1
2
3
4
5
6
7
8
9
10
11// 循环右移动n位
/* ROTate Right (cirular right shift) */
uint64_t ROTR(uint64_t x, uint8_t shift) {
return (x >> shift) | (x << (64 - shift));
}
// 循环右移空出来的部分用0补充.
/* Right SHift */
uint64_t SHR(uint64_t x, uint8_t shift) {
return (x >> shift);
}$\sigma_0^{512}(x)$的实现
1
2
3
4/* sigma0, different from SIGMA0 */
uint64_t sigma0(uint64_t x) {
return ROTR(x, 1) ^ ROTR(x, 8) ^ SHR(x, 7);
}$\sigma_1^{512}(x)$的实现
1
2
3
4/* sigma1, different from SIGMA1 */
uint64_t sigma1(uint64_t x) {
return ROTR(x, 19) ^ ROTR(x, 61) ^ SHR(x, 6);
}
3. 最终计算$W_t$的值
和SHA-256的区别是这里是64位值的计算,256的是32位值计算
1 |
|