-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathtest.rs
90 lines (72 loc) · 4.09 KB
/
test.rs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
fn ch(x : u64,y : u64,z : u64) -> u64 {
(x & y) ^ ((!x) & z)
}
fn rotateRight (amount : u8, value : u64) -> u64 {
(value >> amount) | (value << (64 - amount))
}
fn bigSigma1 (x : u64) -> u64 {
rotateRight(14, x) ^ rotateRight(18, x) ^ rotateRight(41, x)
}
static ws: &'static [u64] = &[ 0x61626364_65666768 , 0x62636465_66676869 , 0x63646566_6768696a , 0x64656667_68696a6b
, 0x65666768_696a6b6c , 0x66676869_6a6b6c6d , 0x6768696a_6b6c6d6e , 0x68696a6b_6c6d6e6f
, 0x696a6b6c_6d6e6f70 , 0x6a6b6c6d_6e6f7071 , 0x6b6c6d6e_6f707172 , 0x6c6d6e6f_70717273
, 0x6d6e6f70_71727374 , 0x6e6f7071_72737475 , 0x80000000_00000000 , 0x00000000_00000000
, 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000000
, 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000000
, 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000000
, 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000000 , 0x00000000_00000380
];
static ks: &'static [u64] = &[ 0x428a2f98d728ae22 , 0x7137449123ef65cd , 0xb5c0fbcfec4d3b2f , 0xe9b5dba58189dbbc
, 0x3956c25bf348b538 , 0x59f111f1b605d019 , 0x923f82a4af194f9b , 0xab1c5ed5da6d8118
, 0xd807aa98a3030242 , 0x12835b0145706fbe , 0x243185be4ee4b28c , 0x550c7dc3d5ffb4e2
, 0x72be5d74f27b896f , 0x80deb1fe3b1696b1 , 0x9bdc06a725c71235 , 0xc19bf174cf692694
, 0xe49b69c19ef14ad2 , 0xefbe4786384f25e3 , 0x0fc19dc68b8cd5b5 , 0x240ca1cc77ac9c65
, 0x2de92c6f592b0275 , 0x4a7484aa6ea6e483 , 0x5cb0a9dcbd41fbd4 , 0x76f988da831153b5
, 0x983e5152ee66dfab , 0xa831c66d2db43210 , 0xb00327c898fb213f , 0xbf597fc7beef0ee4
, 0xc6e00bf33da88fc2 , 0xd5a79147930aa725 , 0x06ca6351e003826f , 0x142929670a0e6e70
, 0x27b70a8546d22ffc , 0x2e1b21385c26c926 , 0x4d2c6dfc5ac42aed , 0x53380d139d95b3df
, 0x650a73548baf63de , 0x766a0abb3c77b2a8 , 0x81c2c92e47edaee6 , 0x92722c851482353b
, 0xa2bfe8a14cf10364 , 0xa81a664bbc423001 , 0xc24b8b70d0f89791 , 0xc76c51a30654be30
, 0xd192e819d6ef5218 , 0xd69906245565a910 , 0xf40e35855771202a , 0x106aa07032bbd1b8
, 0x19a4c116b8d2d0c8 , 0x1e376c085141ab53 , 0x2748774cdf8eeb99 , 0x34b0bcb5e19b48a8
, 0x391c0cb3c5c95a63 , 0x4ed8aa4ae3418acb , 0x5b9cca4f7763e373 , 0x682e6ff3d6b2b8a3
, 0x748f82ee5defb2fc , 0x78a5636f43172f60 , 0x84c87814a1f0ab72 , 0x8cc702081a6439ec
, 0x90befffa23631e28 , 0xa4506cebde82bde9 , 0xbef9a3f7b2c67915 , 0xc67178f2e372532b
, 0xca273eceea26619c , 0xd186b8c721c0c207 , 0xeada7dd6cde0eb1e , 0xf57d4f7fee6ed178
, 0x06f067aa72176fba , 0x0a637dc5a2c898a6 , 0x113f9804bef90dae , 0x1b710b35131c471b
, 0x28db77f523047d84 , 0x32caab7b40c72493 , 0x3c9ebe0a15c9bebc , 0x431d67c49c100d4c
, 0x4cc5d4becb3e42b6 , 0x597f299cfc657e2a , 0x5fcb6fab3ad6faec , 0x6c44198c4a475817
];
fn main() {
let a : u64 = 0x481b8a6ee5e07031;
let b : u64 = 0x9b04175ea8090daa;
let c : u64 = 0xf2c245ac903d4a35;
let d : u64 = 0xf17f52fb02f4eb74;
let e : u64 = 0xe4d35b613a5ac420;
let f : u64 = 0xec9c5e98ff98760d;
let g : u64 = 0x49d5fa3a16dcd502;
let h : u64 = 0xbe58522cb9590ee1;
let i = 15;
let k : u64 = ks[i];
let w : u64 = ws[i];
let t1 : u64 = h + bigSigma1(e) + ch(e,f,g) + k + w;
println!("{:016X?}", t1);
println!("h {:016X?}", h);
println!("e {:016X?}", e);
println!("bigSigma1(e) {:016X?}", bigSigma1(e));
println!("ch(e,f,g) {:016X?}", ch(e,f,g) );
println!("k {:016X?}", k);
println!("w {:016X?}", w);
println!("t1 {:016X?}", t1);
// println!("{:016X?}", (0x5be0cd19_137e2179 + 0xe29effa9_80beffa9 + 0x1f85c98c_7b273d3b + 0x428a2f98_d728ae22 + 0x61626380_00000000) : u64);
let _expected : u64 = 0x01f22967_e68d0c7f;
let actual : u64 = 0x58cb02347ab51f91;
println!("t1 + d {:016X?}", t1 + d);
println!("expected {:016X?}", actual);
println!("------");
println!("-> {:016X?}", e);
println!("-> {:016X?}", rotateRight(41, e));
println!("-> {:016X?}", e >> 41);
println!("-> {:016X?}", e << (64 - 41));
// println!("{:016X?}", ((0x00000001FFFFFFFE: u64) - 0xFFFFFFFE ) - ((1 << 32) - 1));
}