libcrux_secrets/
traits.rs1pub trait Classify {
3 type Classified;
4 fn classify(self) -> Self::Classified;
5}
6
7pub trait ClassifyRef {
9 type ClassifiedRef;
10 fn classify_ref(self) -> Self::ClassifiedRef;
11}
12
13pub trait Declassify {
15 type Declassified;
16 fn declassify(self) -> Self::Declassified;
17}
18
19pub trait DeclassifyRef {
21 type DeclassifiedRef;
22 fn declassify_ref(self) -> Self::DeclassifiedRef;
23}
24
25pub trait ClassifyRefMut {
27 type ClassifiedRefMut;
28 fn classify_ref_mut(self) -> Self::ClassifiedRefMut;
29}
30
31pub trait DeclassifyRefMut {
33 type DeclassifiedRefMut;
34 fn declassify_ref_mut(self) -> Self::DeclassifiedRefMut;
35}
36
37pub trait Scalar: Copy {}
39
40impl Scalar for u8 {}
41impl Scalar for u16 {}
42impl Scalar for u32 {}
43impl Scalar for u64 {}
44#[cfg(not(eurydice))]
45impl Scalar for u128 {}
46
47impl Scalar for i8 {}
48impl Scalar for i16 {}
49impl Scalar for i32 {}
50impl Scalar for i64 {}
51#[cfg(not(eurydice))]
52impl Scalar for i128 {}
53
54pub trait IntOps
56where
57 Self: Sized,
58{
59 fn wrapping_add<T: Into<Self>>(self, rhs: T) -> Self;
60 fn wrapping_sub<T: Into<Self>>(self, rhs: T) -> Self;
61 fn wrapping_mul<T: Into<Self>>(self, rhs: T) -> Self;
62 fn wrapping_neg(self) -> Self;
63 fn rotate_left(self, rhs: u32) -> Self;
64 fn rotate_right(self, rhs: u32) -> Self;
65}
66
67pub trait EncodeOps<T, const N: usize> {
69 fn to_le_bytes(&self) -> [T; N];
70 fn to_be_bytes(&self) -> [T; N];
71
72 fn from_le_bytes(x: [T; N]) -> Self;
73 fn from_be_bytes(x: [T; N]) -> Self;
74}
75
76#[cfg(target_arch = "x86")]
78impl Scalar for core::arch::x86::__m128i {}
79
80#[cfg(target_arch = "x86")]
81impl Scalar for core::arch::x86::__m256i {}
82
83#[cfg(target_arch = "x86")]
84impl Scalar for core::arch::x86::__m256 {}
85
86#[cfg(target_arch = "x86_64")]
87impl Scalar for core::arch::x86_64::__m128i {}
88
89#[cfg(target_arch = "x86_64")]
90impl Scalar for core::arch::x86_64::__m256i {}
91
92#[cfg(target_arch = "x86_64")]
93impl Scalar for core::arch::x86_64::__m256 {}
94
95#[cfg(target_arch = "aarch64")]
96impl Scalar for core::arch::aarch64::int8x8_t {}
97
98#[cfg(target_arch = "aarch64")]
99impl Scalar for core::arch::aarch64::int8x16_t {}
100
101#[cfg(target_arch = "aarch64")]
102impl Scalar for core::arch::aarch64::int16x4_t {}
103
104#[cfg(target_arch = "aarch64")]
105impl Scalar for core::arch::aarch64::int16x8_t {}
106
107#[cfg(target_arch = "aarch64")]
108impl Scalar for core::arch::aarch64::int32x2_t {}
109
110#[cfg(target_arch = "aarch64")]
111impl Scalar for core::arch::aarch64::int32x4_t {}
112
113#[cfg(target_arch = "aarch64")]
114impl Scalar for core::arch::aarch64::int64x1_t {}
115
116#[cfg(target_arch = "aarch64")]
117impl Scalar for core::arch::aarch64::int64x2_t {}
118
119#[cfg(target_arch = "aarch64")]
120impl Scalar for core::arch::aarch64::uint8x8_t {}
121
122#[cfg(target_arch = "aarch64")]
123impl Scalar for core::arch::aarch64::uint8x16_t {}
124
125#[cfg(target_arch = "aarch64")]
126impl Scalar for core::arch::aarch64::uint16x4_t {}
127
128#[cfg(target_arch = "aarch64")]
129impl Scalar for core::arch::aarch64::uint16x8_t {}
130
131#[cfg(target_arch = "aarch64")]
132impl Scalar for core::arch::aarch64::uint32x2_t {}
133
134#[cfg(target_arch = "aarch64")]
135impl Scalar for core::arch::aarch64::uint32x4_t {}
136
137#[cfg(target_arch = "aarch64")]
138impl Scalar for core::arch::aarch64::uint64x1_t {}
139
140#[cfg(target_arch = "aarch64")]
141impl Scalar for core::arch::aarch64::uint64x2_t {}