Skip to content

Commit c7f9b1c

Browse files
committed
---
yaml --- r: 3869 b: refs/heads/master c: 3427a41 h: refs/heads/master i: 3867: ba8c323 v: v3
1 parent a645903 commit c7f9b1c

File tree

2 files changed

+33
-18
lines changed

2 files changed

+33
-18
lines changed

[refs]

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
---
2-
refs/heads/master: 032c4deefee8afcb55fb4ce0e82090776d297b50
2+
refs/heads/master: 3427a412722016c237b473790da63d89a164217c

trunk/src/lib/sha1.rs

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ type sha1 =
1414
// Provide message input as bytes
1515
fn input(&vec[u8]) ;
1616

17+
fn input_ivec(&u8[]);
18+
1719
// Provide message input as string
1820
fn input_str(&str) ;
1921

@@ -22,6 +24,8 @@ type sha1 =
2224
// until reset is called
2325
fn result() -> vec[u8] ;
2426

27+
fn result_ivec() -> u8[];
28+
2529
// Same as above, just a hex-string version.
2630
fn result_str() -> str ;
2731

@@ -50,15 +54,15 @@ const u32 k3 = 0xCA62C1D6u32;
5054
// Builds a sha1 object
5155
fn mk_sha1() -> sha1 {
5256
type sha1state =
53-
rec(vec[mutable u32] h,
57+
rec(u32[mutable] h,
5458
mutable u32 len_low,
5559
mutable u32 len_high,
56-
vec[mutable u8] msg_block,
60+
u8[mutable] msg_block,
5761
mutable uint msg_block_idx,
5862
mutable bool computed,
59-
vec[mutable u32] work_buf);
63+
u32[mutable] work_buf);
6064

61-
fn add_input(&sha1state st, &vec[u8] msg) {
65+
fn add_input(&sha1state st, &u8[] msg) {
6266
// FIXME: Should be typestate precondition
6367

6468
assert (!st.computed);
@@ -80,8 +84,8 @@ fn mk_sha1() -> sha1 {
8084
fn process_msg_block(&sha1state st) {
8185
// FIXME: Make precondition
8286

83-
assert (vec::len(st.h) == digest_buf_len);
84-
assert (vec::len(st.work_buf) == work_buf_len);
87+
assert (ivec::len(st.h) == digest_buf_len);
88+
assert (ivec::len(st.work_buf) == work_buf_len);
8589
let int t; // Loop counter
8690

8791
auto w = st.work_buf;
@@ -160,15 +164,15 @@ fn mk_sha1() -> sha1 {
160164
fn circular_shift(u32 bits, u32 word) -> u32 {
161165
ret word << bits | word >> 32u32 - bits;
162166
}
163-
fn mk_result(&sha1state st) -> vec[u8] {
167+
fn mk_result(&sha1state st) -> u8[] {
164168
if (!st.computed) { pad_msg(st); st.computed = true; }
165-
let vec[u8] rs = [];
169+
let u8[] rs = ~[];
166170
for (u32 hpart in st.h) {
167171
auto a = hpart >> 24u32 & 0xFFu32 as u8;
168172
auto b = hpart >> 16u32 & 0xFFu32 as u8;
169173
auto c = hpart >> 8u32 & 0xFFu32 as u8;
170174
auto d = hpart & 0xFFu32 as u8;
171-
rs += [a, b, c, d];
175+
rs += ~[a, b, c, d];
172176
}
173177
ret rs;
174178
}
@@ -185,7 +189,7 @@ fn mk_sha1() -> sha1 {
185189
fn pad_msg(&sha1state st) {
186190
// FIXME: Should be a precondition
187191

188-
assert (vec::len(st.msg_block) == msg_block_len);
192+
assert (ivec::len(st.msg_block) == msg_block_len);
189193
/*
190194
* Check to see if the current message block is too small to hold
191195
* the initial padding bits and length. If so, we will pad the
@@ -224,7 +228,7 @@ fn mk_sha1() -> sha1 {
224228
fn reset() {
225229
// FIXME: Should be typestate precondition
226230

227-
assert (vec::len(st.h) == digest_buf_len);
231+
assert (ivec::len(st.h) == digest_buf_len);
228232
st.len_low = 0u32;
229233
st.len_high = 0u32;
230234
st.msg_block_idx = 0u;
@@ -235,9 +239,20 @@ fn mk_sha1() -> sha1 {
235239
st.h.(4) = 0xC3D2E1F0u32;
236240
st.computed = false;
237241
}
238-
fn input(&vec[u8] msg) { add_input(st, msg); }
239-
fn input_str(&str msg) { add_input(st, str::bytes(msg)); }
240-
fn result() -> vec[u8] { ret mk_result(st); }
242+
fn input(&vec[u8] msg) {
243+
auto m = ~[];
244+
for (u8 b in msg) { m += ~[b]; }
245+
add_input(st, m);
246+
}
247+
fn input_ivec(&u8[] msg) { add_input(st, msg); }
248+
fn input_str(&str msg) { add_input(st, str::bytes_ivec(msg)); }
249+
fn result() -> vec[u8] {
250+
auto rivec = mk_result(st);
251+
auto rvec = [];
252+
for (u8 b in rivec) { rvec += [b]; }
253+
ret rvec;
254+
}
255+
fn result_ivec() -> u8[] { ret mk_result(st); }
241256
fn result_str() -> str {
242257
auto r = mk_result(st);
243258
auto s = "";
@@ -246,13 +261,13 @@ fn mk_sha1() -> sha1 {
246261
}
247262
}
248263
auto st =
249-
rec(h=vec::init_elt_mut[u32](0u32, digest_buf_len),
264+
rec(h=ivec::init_elt_mut[u32](0u32, digest_buf_len),
250265
mutable len_low=0u32,
251266
mutable len_high=0u32,
252-
msg_block=vec::init_elt_mut[u8](0u8, msg_block_len),
267+
msg_block=ivec::init_elt_mut[u8](0u8, msg_block_len),
253268
mutable msg_block_idx=0u,
254269
mutable computed=false,
255-
work_buf=vec::init_elt_mut[u32](0u32, work_buf_len));
270+
work_buf=ivec::init_elt_mut[u32](0u32, work_buf_len));
256271
auto sh = sha1(st);
257272
sh.reset();
258273
ret sh;

0 commit comments

Comments
 (0)