letmut i = 0; while i != 16 { let off = offset + (i * 4);
result[i] = (input.get(off + 3) as u32)
| ((input.get(off + 2) as u32) << 8)
| ((input.get(off + 1) as u32) << 16)
| ((input.get(off) as u32) << 24);
i += 1;
}
result
}
constfn clone_from_slice_64( mut data: [u8; 64],
slice: &[u8],
offset: usize,
num_elems: usize,
) -> [u8; 64] { letmut i = 0; while i < num_elems {
data[i] = slice[offset + i];
i += 1;
}
data
}
letmut i = 0; while i < data.len() { if data.len() - i >= 64 { let chunk_block = as_block(data, i);
len += 64;
state = process_state(state, chunk_block);
i += 64;
} else { let num_elems = data.len() - i;
blocks.data = clone_from_slice_64(blocks.data, &data.data, i, num_elems);
blocks.len = num_elems as u32; break;
}
}
(blocks, len, state)
}
constfn process_state(mut state: [u32; 5], block: [u32; 16]) -> [u32; 5] { let a = state[0]; let b = state[1]; let c = state[2]; let d = state[3]; let e = state[4]; let (block, b, e) = r0(block, a, b, c, d, e, 0); let (block, a, d) = r0(block, e, a, b, c, d, 1); let (block, e, c) = r0(block, d, e, a, b, c, 2); let (block, d, b) = r0(block, c, d, e, a, b, 3); let (block, c, a) = r0(block, b, c, d, e, a, 4); let (block, b, e) = r0(block, a, b, c, d, e, 5); let (block, a, d) = r0(block, e, a, b, c, d, 6); let (block, e, c) = r0(block, d, e, a, b, c, 7); let (block, d, b) = r0(block, c, d, e, a, b, 8); let (block, c, a) = r0(block, b, c, d, e, a, 9); let (block, b, e) = r0(block, a, b, c, d, e, 10); let (block, a, d) = r0(block, e, a, b, c, d, 11); let (block, e, c) = r0(block, d, e, a, b, c, 12); let (block, d, b) = r0(block, c, d, e, a, b, 13); let (block, c, a) = r0(block, b, c, d, e, a, 14); let (block, b, e) = r0(block, a, b, c, d, e, 15); let (block, a, d) = r1(block, e, a, b, c, d, 0); let (block, e, c) = r1(block, d, e, a, b, c, 1); let (block, d, b) = r1(block, c, d, e, a, b, 2); let (block, c, a) = r1(block, b, c, d, e, a, 3); let (block, b, e) = r2(block, a, b, c, d, e, 4); let (block, a, d) = r2(block, e, a, b, c, d, 5); let (block, e, c) = r2(block, d, e, a, b, c, 6); let (block, d, b) = r2(block, c, d, e, a, b, 7); let (block, c, a) = r2(block, b, c, d, e, a, 8); let (block, b, e) = r2(block, a, b, c, d, e, 9); let (block, a, d) = r2(block, e, a, b, c, d, 10); let (block, e, c) = r2(block, d, e, a, b, c, 11); let (block, d, b) = r2(block, c, d, e, a, b, 12); let (block, c, a) = r2(block, b, c, d, e, a, 13); let (block, b, e) = r2(block, a, b, c, d, e, 14); let (block, a, d) = r2(block, e, a, b, c, d, 15); let (block, e, c) = r2(block, d, e, a, b, c, 0); let (block, d, b) = r2(block, c, d, e, a, b, 1); let (block, c, a) = r2(block, b, c, d, e, a, 2); let (block, b, e) = r2(block, a, b, c, d, e, 3); let (block, a, d) = r2(block, e, a, b, c, d, 4); let (block, e, c) = r2(block, d, e, a, b, c, 5); let (block, d, b) = r2(block, c, d, e, a, b, 6); let (block, c, a) = r2(block, b, c, d, e, a, 7); let (block, b, e) = r3(block, a, b, c, d, e, 8); let (block, a, d) = r3(block, e, a, b, c, d, 9); let (block, e, c) = r3(block, d, e, a, b, c, 10); let (block, d, b) = r3(block, c, d, e, a, b, 11); let (block, c, a) = r3(block, b, c, d, e, a, 12); let (block, b, e) = r3(block, a, b, c, d, e, 13); let (block, a, d) = r3(block, e, a, b, c, d, 14); let (block, e, c) = r3(block, d, e, a, b, c, 15); let (block, d, b) = r3(block, c, d, e, a, b, 0); let (block, c, a) = r3(block, b, c, d, e, a, 1); let (block, b, e) = r3(block, a, b, c, d, e, 2); let (block, a, d) = r3(block, e, a, b, c, d, 3); let (block, e, c) = r3(block, d, e, a, b, c, 4); let (block, d, b) = r3(block, c, d, e, a, b, 5); let (block, c, a) = r3(block, b, c, d, e, a, 6); let (block, b, e) = r3(block, a, b, c, d, e, 7); let (block, a, d) = r3(block, e, a, b, c, d, 8); let (block, e, c) = r3(block, d, e, a, b, c, 9); let (block, d, b) = r3(block, c, d, e, a, b, 10); let (block, c, a) = r3(block, b, c, d, e, a, 11); let (block, b, e) = r4(block, a, b, c, d, e, 12); let (block, a, d) = r4(block, e, a, b, c, d, 13); let (block, e, c) = r4(block, d, e, a, b, c, 14); let (block, d, b) = r4(block, c, d, e, a, b, 15); let (block, c, a) = r4(block, b, c, d, e, a, 0); let (block, b, e) = r4(block, a, b, c, d, e, 1); let (block, a, d) = r4(block, e, a, b, c, d, 2); let (block, e, c) = r4(block, d, e, a, b, c, 3); let (block, d, b) = r4(block, c, d, e, a, b, 4); let (block, c, a) = r4(block, b, c, d, e, a, 5); let (block, b, e) = r4(block, a, b, c, d, e, 6); let (block, a, d) = r4(block, e, a, b, c, d, 7); let (block, e, c) = r4(block, d, e, a, b, c, 8); let (block, d, b) = r4(block, c, d, e, a, b, 9); let (block, c, a) = r4(block, b, c, d, e, a, 10); let (block, b, e) = r4(block, a, b, c, d, e, 11); let (block, a, d) = r4(block, e, a, b, c, d, 12); let (block, e, c) = r4(block, d, e, a, b, c, 13); let (block, d, b) = r4(block, c, d, e, a, b, 14); let (_, c, a) = r4(block, b, c, d, e, a, 15);
letmut i = 0; while i != 16 { let off = offset + (i * 4);
result[i] = (input[off + 3] as u32)
| ((input[off + 2] as u32) << 8)
| ((input[off + 1] as u32) << 16)
| ((input[off] as u32) << 24);
i += 1;
}
result
}
let bits = (len + (blocks.len as u64)) * 8; let extra = [
(bits >> 56) as u8,
(bits >> 48) as u8,
(bits >> 40) as u8,
(bits >> 32) as u8,
(bits >> 24) as u8,
(bits >> 16) as u8,
(bits >> 8) as u8,
bits as u8,
]; letmut last = [0; 128]; let blocklen = blocks.len as usize;
last = clone_from_slice_128(last, &blocks.data, 0, blocklen);
last[blocklen] = 0x80;
if blocklen < 56 {
last = clone_slice_128(last, &extra, 56);
state = process_state(state, as_block(&last, 0));
} else {
last = clone_slice_128(last, &extra, 120);
state = process_state(state, as_block(&last, 0));
state = process_state(state, as_block(&last, 64));
}
Digest { data: state }
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.