cryptocol/random/
trait_impl_for_sha2_256.rs

1// Copyright 2024, 2025 PARK Youngho.
2//
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// https://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or https://opensource.org/licenses/MIT>, at your option.
6// This file may not be copied, modified, or distributed
7// except according to those terms.
8
9
10use crate::hash::SHA2_256_Generic;
11use crate::random::Random_Engine;
12
13
14impl<const H0: u32, const H1: u32, const H2: u32, const H3: u32,
15    const H4: u32, const H5: u32, const H6: u32, const H7: u32,
16    const ROUND: usize,
17    const K00: u32, const K01: u32, const K02: u32, const K03: u32,
18    const K04: u32, const K05: u32, const K06: u32, const K07: u32,
19    const K08: u32, const K09: u32, const K10: u32, const K11: u32,
20    const K12: u32, const K13: u32, const K14: u32, const K15: u32,
21    const K16: u32, const K17: u32, const K18: u32, const K19: u32,
22    const K20: u32, const K21: u32, const K22: u32, const K23: u32,
23    const K24: u32, const K25: u32, const K26: u32, const K27: u32,
24    const K28: u32, const K29: u32, const K30: u32, const K31: u32,
25    const K32: u32, const K33: u32, const K34: u32, const K35: u32,
26    const K36: u32, const K37: u32, const K38: u32, const K39: u32,
27    const K40: u32, const K41: u32, const K42: u32, const K43: u32,
28    const K44: u32, const K45: u32, const K46: u32, const K47: u32,
29    const K48: u32, const K49: u32, const K50: u32, const K51: u32,
30    const K52: u32, const K53: u32, const K54: u32, const K55: u32,
31    const K56: u32, const K57: u32, const K58: u32, const K59: u32,
32    const K60: u32, const K61: u32, const K62: u32, const K63: u32,
33    const RR2: u32, const RR6: u32, const RR7: u32, const RR11: u32, 
34    const RR13: u32, const RR17: u32, const RR18: u32, const RR19: u32, 
35    const RR22: u32, const RR25: u32, const SR3: i32, const SR10: i32>
36Random_Engine for SHA2_256_Generic<8, H0, H1, H2, H3, H4, H5, H6, H7, ROUND,
37                                    K00, K01, K02, K03, K04, K05, K06, K07,
38                                    K08, K09, K10, K11, K12, K13, K14, K15,
39                                    K16, K17, K18, K19, K20, K21, K22, K23,
40                                    K24, K25, K26, K27, K28, K29, K30, K31,
41                                    K32, K33, K34, K35, K36, K37, K38, K39,
42                                    K40, K41, K42, K43, K44, K45, K46, K47,
43                                    K48, K49, K50, K51, K52, K53, K54, K55,
44                                    K56, K57, K58, K59, K60, K61, K62, K63,
45                                    RR2, RR6, RR7, RR11, RR13, RR17, RR18, RR19, 
46                                    RR22, RR25, SR3, SR10>
47{
48    fn sow_array(&mut self, message: &[u64; 8])
49    {
50        self.digest_array(message);
51    }
52
53    fn harvest(&mut self, sugar: u64, _: &[u64; 8]) -> [u64; 8]
54    {
55        self.tangle(sugar);
56        let a: [u32; 8] = self.get_hash_value_in_array();
57        self.tangle(sugar);
58        let b: [u32; 8] = self.get_hash_value_in_array();
59        let mut res = [0_u64; 8];
60        for i in 0..8
61            { res[i] = ((a[i] as u64) << 32) | (b[i] as u64); }
62        res
63    }
64}
65