rhdl_ed25519_scalable_core/ubft/
beats.rs1use super::*;
4
5#[kernel]
7pub fn beat_words(data: [b8; 64]) -> [b64; 8] {
8 let mut w = [b64(0); 8];
9 for i in 0..8 {
10 for j in 0..8 {
11 w[i] = w[i] | (data[8 * i + j].resize::<64>() << b64((8 * j) as u128));
12 }
13 }
14 w
15}
16
17#[kernel]
19pub fn words_beat(w: [b64; 8]) -> [b8; 64] {
20 let mut data = [b8(0); 64];
21 for i in 0..8 {
22 for j in 0..8 {
23 data[8 * i + j] = (w[i] >> b64((8 * j) as u128)).resize();
24 }
25 }
26 data
27}
28
29#[kernel]
34pub fn sign_message(words_in: [b64; 8]) -> [b64; 8] {
35 let mut message = [b64(0); 8];
36 for k in 0..6 {
37 message[k] = words_in[k + 1];
38 }
39 message
40}
41
42#[kernel]
44pub fn lowest_free(mask: b16) -> b4 {
45 let mut found = false;
46 let mut idx = b4(0);
47 for k in 0..16 {
48 if !found && ((mask >> b16(k as u128)) & b16(1)) != b16(0) {
49 found = true;
50 idx = b4(k as u128);
51 }
52 }
53 idx
54}