Skip to content

Instantly share code, notes, and snippets.

@nanpuyue nanpuyue/sha2_constants.rs
Last active May 24, 2020

Embed
What would you like to do?
// date: 2020-01-10
// license: GPLv3 https://www.gnu.org/licenses/gpl-3.0.txt
// author: nanpuyue <nanpuyue@gmail.com> https://blog.nanpuyue.com
#![feature(generators)]
#![feature(generator_trait)]
use std::ops::{Generator, GeneratorState};
use std::pin::Pin;
struct GeneratorIter<T: Generator + Unpin>(T);
impl<T: Generator + Unpin> Iterator for GeneratorIter<T> {
type Item = <T as Generator>::Yield;
fn next(&mut self) -> Option<Self::Item> {
match Pin::new(&mut self.0).resume(()) {
GeneratorState::Yielded(x) => Some(x),
_ => None
}
}
}
fn prime_generator() -> impl Generator<Yield=u16, Return=()> {
|| {
yield 2;
yield 3;
let mut l = vec![3];
let mut n = 5u16;
loop {
for &i in &l {
let (q, r) = (n / i, n % i);
if i > q {
l.push(n);
yield n;
break;
} else if r == 0 {
break;
}
}
n = n.wrapping_add(2);
}
}
}
fn sha2_constant(root: f64) -> u32 {
(root.fract() * (1u64 << 32) as f64) as u32
}
fn main() {
for v in GeneratorIter(prime_generator()).take(8) {
print!("{:#010x}, ", sha2_constant((v as f64).sqrt()));
}
println!("\n");
for (i, v) in GeneratorIter(prime_generator()).take(64).enumerate() {
print!("{:#010x}, ", sha2_constant((v as f64).cbrt()));
if i % 8 == 7 {
println!();
}
}
}
@nanpuyue

This comment has been minimized.

Copy link
Owner Author

nanpuyue commented Jan 10, 2020

0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19, 

0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5, 
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174, 
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da, 
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967, 
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85, 
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070, 
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3, 
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2, 
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.