MCPcopy Create free account
hub / github.com/PHPantom-dev/phpantom_lsp / sha256_hex

Function sha256_hex

build.rs:352–459  ·  view source on GitHub ↗

Compute the SHA-256 hex digest of a byte slice.

(data: &[u8])

Source from the content-addressed store, hash-verified

350
351/// Compute the SHA-256 hex digest of a byte slice.
352fn sha256_hex(data: &[u8]) -> String {
353 // Minimal SHA-256 implementation to avoid adding a build-dependency.
354 // Based on the FIPS 180-4 specification.
355
356 const K: [u32; 64] = [
357 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4,
358 0xab1c5ed5, 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe,
359 0x9bdc06a7, 0xc19bf174, 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f,
360 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
361 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc,
362 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 0xa2bfe8a1, 0xa81a664b,
363 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 0x19a4c116,
364 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
365 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7,
366 0xc67178f2,
367 ];
368
369 #[inline(always)]
370 fn ch(x: u32, y: u32, z: u32) -> u32 {
371 (x & y) ^ (!x & z)
372 }
373 #[inline(always)]
374 fn maj(x: u32, y: u32, z: u32) -> u32 {
375 (x & y) ^ (x & z) ^ (y & z)
376 }
377 #[inline(always)]
378 fn ep0(x: u32) -> u32 {
379 x.rotate_right(2) ^ x.rotate_right(13) ^ x.rotate_right(22)
380 }
381 #[inline(always)]
382 fn ep1(x: u32) -> u32 {
383 x.rotate_right(6) ^ x.rotate_right(11) ^ x.rotate_right(25)
384 }
385 #[inline(always)]
386 fn sig0(x: u32) -> u32 {
387 x.rotate_right(7) ^ x.rotate_right(18) ^ (x >> 3)
388 }
389 #[inline(always)]
390 fn sig1(x: u32) -> u32 {
391 x.rotate_right(17) ^ x.rotate_right(19) ^ (x >> 10)
392 }
393
394 let mut h: [u32; 8] = [
395 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab,
396 0x5be0cd19,
397 ];
398
399 // Pre-processing: pad the message.
400 let bit_len = (data.len() as u64) * 8;
401 let mut padded = data.to_vec();
402 padded.push(0x80);
403 while (padded.len() % 64) != 56 {
404 padded.push(0x00);
405 }
406 padded.extend_from_slice(&bit_len.to_be_bytes());
407
408 // Process each 512-bit (64-byte) block.
409 for block in padded.chunks_exact(64) {

Callers 1

fetch_stubsFunction · 0.85

Calls 7

sig1Function · 0.85
sig0Function · 0.85
ep1Function · 0.85
chFunction · 0.85
ep0Function · 0.85
majFunction · 0.85
pushMethod · 0.80

Tested by

no test coverage detected