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 }
}
constfn r4( mut block: [u32; 16],
v: u32, mut w: u32,
x: u32,
y: u32, mut z: u32,
i: usize,
) -> ([u32; 16], u32, u32) {
block[i] = blk(&block, i); let n = (w ^ x ^ y)
.wrapping_add(block[i])
.wrapping_add(0xca62_c1d6)
.wrapping_add(rol(v, 5));
z = z.wrapping_add(n);
w = rol(w, 30);
(block, w, z)
}
pubstruct Digest {
data: [u32; 5],
}
impl Digest { pubconstfn bytes(&self) -> [u8; 20] {
[
(self.data[0] >> 24) as u8,
(self.data[0] >> 16) as u8,
(self.data[0] >> 8) as u8, self.data[0] as u8,
(self.data[1] >> 24) as u8,
(self.data[1] >> 16) as u8,
(self.data[1] >> 8) as u8, self.data[1] as u8,
(self.data[2] >> 24) as u8,
(self.data[2] >> 16) as u8,
(self.data[2] >> 8) as u8, self.data[2] as u8,
(self.data[3] >> 24) as u8,
(self.data[3] >> 16) as u8,
(self.data[3] >> 8) as u8, self.data[3] as u8,
(self.data[4] >> 24) as u8,
(self.data[4] >> 16) as u8,
(self.data[4] >> 8) as u8, self.data[4] as u8,
]
}
}
impl core::fmt::Display for Digest { fn fmt(&self, f: &mut core::fmt::Formatter) -> core::fmt::Result { for i inself.data.iter() {
write!(f, "{i:08x}")?;
}
Ok(())
}
}
Messung V0.5 in Prozent
¤ 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.0.19Bemerkung:
(Wie Sie bei der Firma Beratungs- und Dienstleistungen beauftragen können 2026-08-27)
¤
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.