A whimsical STROBE based encryption protocol
0
fork

Configure Feed

Select the types of activity you want to include in your feed.

Restructure into workspace/crates

authored by

Sachymetsu and committed by
Tangled
8d54875f 1e2da6e4

+409 -92
+22 -2
Cargo.lock
··· 462 462 "aead", 463 463 "ctutils", 464 464 "getrandom", 465 - "hex", 466 465 "hybrid-array", 467 - "keccak", 468 466 "ml-kem", 469 467 "rand_core", 468 + "wharrgarbl-core", 469 + "wharrgarbl-strobe", 470 + "zeroize", 471 + ] 472 + 473 + [[package]] 474 + name = "wharrgarbl-core" 475 + version = "0.1.0" 476 + dependencies = [ 477 + "aead", 478 + ] 479 + 480 + [[package]] 481 + name = "wharrgarbl-strobe" 482 + version = "0.1.0" 483 + dependencies = [ 484 + "aead", 485 + "ctutils", 486 + "hex", 487 + "hybrid-array", 488 + "keccak", 470 489 "serde", 471 490 "serde-big-array", 472 491 "serde_json", 492 + "wharrgarbl-core", 473 493 "zeroize", 474 494 ] 475 495
+28 -14
Cargo.toml
··· 1 - [package] 2 - name = "wharrgarbl" 3 - description = "A whimsical STROBE based encryption protocol" 1 + [workspace] 2 + resolver = "3" 3 + members = ["wharrgarbl-core", "wharrgarbl-strobe"] 4 + 5 + [workspace.package] 4 6 authors = ["Sachy.dev <sachymetsu@tutamail.com>"] 7 + edition = "2024" 5 8 repository = "https://tangled.org/sachy.dev/wharrgarbl" 6 9 version = "0.1.0" 7 - edition = "2024" 10 + license = "MIT OR Apache-2.0" 11 + 12 + [workspace.dependencies] 13 + aead = { version = "0.6.0-rc.10" } 14 + ctutils = { version = "0.4.2", default-features = false } 15 + zeroize = { version = "1.8.2", default-features = false } 16 + hybrid-array = { version = "0.4.10" } 17 + 18 + [package] 19 + name = "wharrgarbl" 20 + description = "A whimsical STROBE based encryption protocol" 21 + edition.workspace = true 22 + repository.workspace = true 23 + version.workspace = true 24 + authors.workspace = true 8 25 9 26 [features] 10 - parallel = ["keccak/parallel"] 27 + parallel = ["wharrgarbl-strobe/parallel"] 11 28 12 29 [dependencies] 13 - keccak = "0.2" 14 - ctutils = { version = "0.4.2", default-features = false } 15 - zeroize = { version = "1.8.2", default-features = false } 30 + wharrgarbl-core = { path = "./wharrgarbl-core", version = "0.1" } 31 + wharrgarbl-strobe = { path = "./wharrgarbl-strobe", version = "0.1" } 32 + ctutils.workspace = true 33 + zeroize.workspace = true 16 34 ml-kem = { version = "0.3.0-rc.2", features = ["zeroize"] } 17 - hybrid-array = { version = "0.4.10", features = ["alloc"] } 35 + hybrid-array = { workspace = true, features = ["alloc"] } 18 36 rand_core = { version = "0.10", default-features = false } 19 - aead = { version = "0.6.0-rc.10" } 37 + aead.workspace = true 20 38 21 39 [dev-dependencies] 22 - serde_json = "1" 23 - hex = "0.4" 24 - serde = { version = "1.0.210", default-features = false, features = ["derive"] } 25 - serde-big-array = { version = "0.5" } 26 40 getrandom = { version = "0.4.2", features = ["sys_rng"] } 27 41 aead = { version = "0.6.0-rc.10", features = ["alloc"] }
+201
LICENSE-APACHE
··· 1 + Apache License 2 + Version 2.0, January 2004 3 + http://www.apache.org/licenses/ 4 + 5 + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 6 + 7 + 1. Definitions. 8 + 9 + "License" shall mean the terms and conditions for use, reproduction, 10 + and distribution as defined by Sections 1 through 9 of this document. 11 + 12 + "Licensor" shall mean the copyright owner or entity authorized by 13 + the copyright owner that is granting the License. 14 + 15 + "Legal Entity" shall mean the union of the acting entity and all 16 + other entities that control, are controlled by, or are under common 17 + control with that entity. For the purposes of this definition, 18 + "control" means (i) the power, direct or indirect, to cause the 19 + direction or management of such entity, whether by contract or 20 + otherwise, or (ii) ownership of fifty percent (50%) or more of the 21 + outstanding shares, or (iii) beneficial ownership of such entity. 22 + 23 + "You" (or "Your") shall mean an individual or Legal Entity 24 + exercising permissions granted by this License. 25 + 26 + "Source" form shall mean the preferred form for making modifications, 27 + including but not limited to software source code, documentation 28 + source, and configuration files. 29 + 30 + "Object" form shall mean any form resulting from mechanical 31 + transformation or translation of a Source form, including but 32 + not limited to compiled object code, generated documentation, 33 + and conversions to other media types. 34 + 35 + "Work" shall mean the work of authorship, whether in Source or 36 + Object form, made available under the License, as indicated by a 37 + copyright notice that is included in or attached to the work 38 + (an example is provided in the Appendix below). 39 + 40 + "Derivative Works" shall mean any work, whether in Source or Object 41 + form, that is based on (or derived from) the Work and for which the 42 + editorial revisions, annotations, elaborations, or other modifications 43 + represent, as a whole, an original work of authorship. For the purposes 44 + of this License, Derivative Works shall not include works that remain 45 + separable from, or merely link (or bind by name) to the interfaces of, 46 + the Work and Derivative Works thereof. 47 + 48 + "Contribution" shall mean any work of authorship, including 49 + the original version of the Work and any modifications or additions 50 + to that Work or Derivative Works thereof, that is intentionally 51 + submitted to Licensor for inclusion in the Work by the copyright owner 52 + or by an individual or Legal Entity authorized to submit on behalf of 53 + the copyright owner. For the purposes of this definition, "submitted" 54 + means any form of electronic, verbal, or written communication sent 55 + to the Licensor or its representatives, including but not limited to 56 + communication on electronic mailing lists, source code control systems, 57 + and issue tracking systems that are managed by, or on behalf of, the 58 + Licensor for the purpose of discussing and improving the Work, but 59 + excluding communication that is conspicuously marked or otherwise 60 + designated in writing by the copyright owner as "Not a Contribution." 61 + 62 + "Contributor" shall mean Licensor and any individual or Legal Entity 63 + on behalf of whom a Contribution has been received by Licensor and 64 + subsequently incorporated within the Work. 65 + 66 + 2. Grant of Copyright License. Subject to the terms and conditions of 67 + this License, each Contributor hereby grants to You a perpetual, 68 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 69 + copyright license to reproduce, prepare Derivative Works of, 70 + publicly display, publicly perform, sublicense, and distribute the 71 + Work and such Derivative Works in Source or Object form. 72 + 73 + 3. Grant of Patent License. Subject to the terms and conditions of 74 + this License, each Contributor hereby grants to You a perpetual, 75 + worldwide, non-exclusive, no-charge, royalty-free, irrevocable 76 + (except as stated in this section) patent license to make, have made, 77 + use, offer to sell, sell, import, and otherwise transfer the Work, 78 + where such license applies only to those patent claims licensable 79 + by such Contributor that are necessarily infringed by their 80 + Contribution(s) alone or by combination of their Contribution(s) 81 + with the Work to which such Contribution(s) was submitted. If You 82 + institute patent litigation against any entity (including a 83 + cross-claim or counterclaim in a lawsuit) alleging that the Work 84 + or a Contribution incorporated within the Work constitutes direct 85 + or contributory patent infringement, then any patent licenses 86 + granted to You under this License for that Work shall terminate 87 + as of the date such litigation is filed. 88 + 89 + 4. Redistribution. You may reproduce and distribute copies of the 90 + Work or Derivative Works thereof in any medium, with or without 91 + modifications, and in Source or Object form, provided that You 92 + meet the following conditions: 93 + 94 + (a) You must give any other recipients of the Work or 95 + Derivative Works a copy of this License; and 96 + 97 + (b) You must cause any modified files to carry prominent notices 98 + stating that You changed the files; and 99 + 100 + (c) You must retain, in the Source form of any Derivative Works 101 + that You distribute, all copyright, patent, trademark, and 102 + attribution notices from the Source form of the Work, 103 + excluding those notices that do not pertain to any part of 104 + the Derivative Works; and 105 + 106 + (d) If the Work includes a "NOTICE" text file as part of its 107 + distribution, then any Derivative Works that You distribute must 108 + include a readable copy of the attribution notices contained 109 + within such NOTICE file, excluding those notices that do not 110 + pertain to any part of the Derivative Works, in at least one 111 + of the following places: within a NOTICE text file distributed 112 + as part of the Derivative Works; within the Source form or 113 + documentation, if provided along with the Derivative Works; or, 114 + within a display generated by the Derivative Works, if and 115 + wherever such third-party notices normally appear. The contents 116 + of the NOTICE file are for informational purposes only and 117 + do not modify the License. You may add Your own attribution 118 + notices within Derivative Works that You distribute, alongside 119 + or as an addendum to the NOTICE text from the Work, provided 120 + that such additional attribution notices cannot be construed 121 + as modifying the License. 122 + 123 + You may add Your own copyright statement to Your modifications and 124 + may provide additional or different license terms and conditions 125 + for use, reproduction, or distribution of Your modifications, or 126 + for any such Derivative Works as a whole, provided Your use, 127 + reproduction, and distribution of the Work otherwise complies with 128 + the conditions stated in this License. 129 + 130 + 5. Submission of Contributions. Unless You explicitly state otherwise, 131 + any Contribution intentionally submitted for inclusion in the Work 132 + by You to the Licensor shall be under the terms and conditions of 133 + this License, without any additional terms or conditions. 134 + Notwithstanding the above, nothing herein shall supersede or modify 135 + the terms of any separate license agreement you may have executed 136 + with Licensor regarding such Contributions. 137 + 138 + 6. Trademarks. This License does not grant permission to use the trade 139 + names, trademarks, service marks, or product names of the Licensor, 140 + except as required for reasonable and customary use in describing the 141 + origin of the Work and reproducing the content of the NOTICE file. 142 + 143 + 7. Disclaimer of Warranty. Unless required by applicable law or 144 + agreed to in writing, Licensor provides the Work (and each 145 + Contributor provides its Contributions) on an "AS IS" BASIS, 146 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or 147 + implied, including, without limitation, any warranties or conditions 148 + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A 149 + PARTICULAR PURPOSE. You are solely responsible for determining the 150 + appropriateness of using or redistributing the Work and assume any 151 + risks associated with Your exercise of permissions under this License. 152 + 153 + 8. Limitation of Liability. In no event and under no legal theory, 154 + whether in tort (including negligence), contract, or otherwise, 155 + unless required by applicable law (such as deliberate and grossly 156 + negligent acts) or agreed to in writing, shall any Contributor be 157 + liable to You for damages, including any direct, indirect, special, 158 + incidental, or consequential damages of any character arising as a 159 + result of this License or out of the use or inability to use the 160 + Work (including but not limited to damages for loss of goodwill, 161 + work stoppage, computer failure or malfunction, or any and all 162 + other commercial damages or losses), even if such Contributor 163 + has been advised of the possibility of such damages. 164 + 165 + 9. Accepting Warranty or Additional Liability. While redistributing 166 + the Work or Derivative Works thereof, You may choose to offer, 167 + and charge a fee for, acceptance of support, warranty, indemnity, 168 + or other liability obligations and/or rights consistent with this 169 + License. However, in accepting such obligations, You may act only 170 + on Your own behalf and on Your sole responsibility, not on behalf 171 + of any other Contributor, and only if You agree to indemnify, 172 + defend, and hold each Contributor harmless for any liability 173 + incurred by, or claims asserted against, such Contributor by reason 174 + of your accepting any such warranty or additional liability. 175 + 176 + END OF TERMS AND CONDITIONS 177 + 178 + APPENDIX: How to apply the Apache License to your work. 179 + 180 + To apply the Apache License to your work, attach the following 181 + boilerplate notice, with the fields enclosed by brackets "[]" 182 + replaced with your own identifying information. (Don't include 183 + the brackets!) The text should be enclosed in the appropriate 184 + comment syntax for the file format. We also recommend that a 185 + file or class name and description of purpose be included on the 186 + same "printed page" as the copyright notice for easier 187 + identification within third-party archives. 188 + 189 + Copyright 2026 Sachymetsu 190 + 191 + Licensed under the Apache License, Version 2.0 (the "License"); 192 + you may not use this file except in compliance with the License. 193 + You may obtain a copy of the License at 194 + 195 + http://www.apache.org/licenses/LICENSE-2.0 196 + 197 + Unless required by applicable law or agreed to in writing, software 198 + distributed under the License is distributed on an "AS IS" BASIS, 199 + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 200 + See the License for the specific language governing permissions and 201 + limitations under the License.
+21
LICENSE-MIT
··· 1 + MIT License 2 + 3 + Copyright (c) 2026 Sachymetsu 4 + 5 + Permission is hereby granted, free of charge, to any person obtaining a copy 6 + of this software and associated documentation files (the "Software"), to deal 7 + in the Software without restriction, including without limitation the rights 8 + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 + copies of the Software, and to permit persons to whom the Software is 10 + furnished to do so, subject to the following conditions: 11 + 12 + The above copyright notice and this permission notice shall be included in all 13 + copies or substantial portions of the Software. 14 + 15 + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 + SOFTWARE.
+3 -1
README.md
··· 2 2 3 3 A WIP Strobe+AKE protocol with a whimsical name. Based off the [reference rust implementation here](https://github.com/rozbb/strobe-rs), though with diverging API choices for experimentation. 4 4 5 + ☢️ **WARNING: DO NOT USE IN PRODUCTION. THIS CRATE IS NOT AUDITED AND IS WIP, MAYBE EVEN NOT AS SECURE AS THOUGHT. AAAAAAAAAA** ☢️ 6 + 5 7 ## License 6 8 7 - TBA when ready 9 + Code dual-licensed under Apache 2.0 or MIT.
+2 -4
src/basic_kats.rs wharrgarbl-strobe/src/basic_kats.rs
··· 6 6 7 7 use aead::consts::{U16, U65}; 8 8 use hybrid_array::Array; 9 + use wharrgarbl_core::Role; 9 10 10 - use crate::{ 11 - keccakf::KECCAK_BUFFER_SIZE, 12 - strobe::{Role, StrobeSecurity, StrobeState}, 13 - }; 11 + use crate::{StrobeSecurity, keccakf::KECCAK_BUFFER_SIZE, strobe::StrobeState}; 14 12 15 13 extern crate std; 16 14
+22
src/buffer_slice.rs wharrgarbl-core/src/lib.rs
··· 1 + #![no_std] 2 + 3 + use core::ops::BitXor; 4 + 5 + // Public API for passing in Role 6 + #[derive(Debug, Clone, Copy, PartialEq, Eq)] 7 + #[repr(u8)] 8 + pub enum Role { 9 + Sender = 0, 10 + Receiver = 1, 11 + } 12 + 13 + impl BitXor for Role { 14 + fn bitxor(self, rhs: Self) -> Self::Output { 15 + (self as u8) ^ (rhs as u8) 16 + } 17 + 18 + type Output = u8; 19 + } 20 + 1 21 #[derive(Debug)] 2 22 pub struct BufferSlice<'slice> { 3 23 buffer: &'slice mut [u8], ··· 53 73 mod tests { 54 74 use super::*; 55 75 use aead::Buffer; 76 + 77 + extern crate alloc; 56 78 57 79 #[test] 58 80 fn defaults_to_full_buffer_size() {
+6 -5
src/handshake.rs
··· 1 1 use aead::Buffer; 2 2 use hybrid_array::typenum::Unsigned; 3 3 use rand_core::CryptoRng; 4 + use wharrgarbl_core::Role; 5 + use wharrgarbl_strobe::{StrobeSecurity, StrobeState}; 4 6 5 7 use crate::{ 6 8 WHARRGHARBL_PROTO, 7 9 kem::{KemEncap, KemSecurity}, 8 - strobe::{Role, StrobeSecurity, StrobeState}, 9 - transport::{self, AeadState, AeadStrobe}, 10 + transport::{AeadState, AeadStrobe}, 10 11 }; 11 12 12 13 pub struct ClientHandshake { ··· 59 60 60 61 let tag = ciphertext 61 62 .len() 62 - .checked_sub(<transport::AeadStrobe as aead::AeadCore>::TagSize::to_usize()) 63 + .checked_sub(<AeadStrobe as aead::AeadCore>::TagSize::to_usize()) 63 64 .ok_or(aead::Error)?; 64 65 65 66 let (ciphertext, tag) = ciphertext.split_at(tag); ··· 123 124 124 125 let tag = slice 125 126 .len() 126 - .checked_sub(<transport::AeadStrobe as aead::AeadCore>::TagSize::to_usize()) 127 + .checked_sub(<AeadStrobe as aead::AeadCore>::TagSize::to_usize()) 127 128 .ok_or(aead::Error)?; 128 129 129 130 let (encap, tag) = buf.as_ref().split_at(tag); ··· 167 168 168 169 #[cfg(test)] 169 170 mod tests { 170 - use crate::buffer_slice::BufferSlice; 171 + use wharrgarbl_core::BufferSlice; 171 172 172 173 use super::*; 173 174
+2 -1
src/herding_kats/harness.rs wharrgarbl-strobe/src/herding_kats/harness.rs
··· 4 4 5 5 use aead::consts::U14; 6 6 use serde::{Deserialize, Deserializer, de}; 7 + use wharrgarbl_core::Role; 7 8 8 - use crate::strobe::{Role, StrobeSecurity, StrobeState}; 9 + use crate::{StrobeSecurity, strobe::StrobeState}; 9 10 10 11 /// The harness we will put on our KATs so we can herd them and make them do tests. 11 12 /// (This is the top-level structure of the JSON we find in the test vectors)
+4 -4
src/herding_kats/mod.rs wharrgarbl-strobe/src/herding_kats/mod.rs
··· 9 9 10 10 #[test] 11 11 fn simple_kats() { 12 - test_against_kat("katties/simple_test_vector.json"); 12 + test_against_kat("../katties/simple_test_vector.json"); 13 13 } 14 14 15 15 #[test] 16 16 fn meta_kats() { 17 - test_against_kat("katties/meta_test_vector.json"); 17 + test_against_kat("../katties/meta_test_vector.json"); 18 18 } 19 19 20 20 #[test] 21 21 fn streaming_kats() { 22 - test_against_kat("katties/streaming_test_vector.json"); 22 + test_against_kat("../katties/streaming_test_vector.json"); 23 23 } 24 24 25 25 #[test] 26 26 fn boundary_kats() { 27 - test_against_kat("katties/boundary_test_vector.json"); 27 + test_against_kat("../katties/boundary_test_vector.json"); 28 28 }
src/keccakf.rs wharrgarbl-strobe/src/keccakf.rs
+1 -10
src/lib.rs
··· 1 1 #![no_std] 2 2 #![forbid(unsafe_code)] 3 3 4 - #[cfg(test)] 5 - mod basic_kats; 6 - pub mod buffer_slice; 7 4 pub mod handshake; 8 - #[cfg(test)] 9 - mod herding_kats; 10 - mod keccakf; 11 - pub mod kem; 12 - mod opflags; 13 - mod ops; 14 - pub mod strobe; 5 + mod kem; 15 6 pub mod transport; 16 7 17 8 extern crate alloc;
src/opflags.rs wharrgarbl-strobe/src/opflags.rs
src/ops.rs wharrgarbl-strobe/src/ops.rs
+2 -36
src/strobe.rs wharrgarbl-strobe/src/strobe.rs
··· 1 - use core::ops::BitXor; 2 - 3 1 use ctutils::{Choice, CtAssign, CtEq, CtLt, CtSelect}; 4 2 use hybrid_array::{Array, ArraySize}; 3 + use wharrgarbl_core::Role; 5 4 use zeroize::Zeroize; 6 5 7 6 use crate::{ 8 - STROBE_VERSION, 7 + STROBE_VERSION, StrobeSecurity, 9 8 keccakf::{KECCAK_BUFFER_SIZE, KeccakF1600}, 10 9 opflags::OpFlags, 11 10 ops, ··· 15 14 mod role { 16 15 pub const SENDER: u8 = 0; 17 16 pub const RECEIVER: u8 = 1; 18 - } 19 - 20 - /// Public API for passing in Role 21 - #[derive(Debug, Clone, Copy, PartialEq, Eq)] 22 - #[repr(u8)] 23 - pub enum Role { 24 - Sender = 0, 25 - Receiver = 1, 26 - } 27 - 28 - impl BitXor for Role { 29 - fn bitxor(self, rhs: Self) -> Self::Output { 30 - (self as u8) ^ (rhs as u8) 31 - } 32 - 33 - type Output = u8; 34 - } 35 - 36 - #[derive(Debug, Clone, Copy)] 37 - #[repr(u16)] 38 - pub enum StrobeSecurity { 39 - B128 = 128, 40 - B256 = 256, 41 - } 42 - 43 - impl StrobeSecurity { 44 - pub const fn rachet_bytes(self) -> usize { 45 - (self as usize) >> 3 46 - } 47 - 48 - pub const fn to_bytes(self) -> [u8; 2] { 49 - (self as u16).to_le_bytes() 50 - } 51 17 } 52 18 53 19 #[derive(Clone)]
+28 -15
src/transport.rs
··· 3 3 consts::{U16, U32}, 4 4 }; 5 5 use ctutils::{CtEq, CtSelect}; 6 + use wharrgarbl_core::Role; 7 + use wharrgarbl_strobe::{StrobeSecurity, StrobeState}; 6 8 7 - use crate::{ 8 - WHARRGHARBL_PROTO, 9 - strobe::{Role, StrobeSecurity, StrobeState}, 10 - }; 9 + use crate::WHARRGHARBL_PROTO; 11 10 12 11 pub struct AeadStrobe { 13 12 pub(crate) key: Key<Self>, ··· 32 31 mut buffer: aead::inout::InOutBuf<'_, '_, u8>, 33 32 ) -> aead::Result<aead::Tag<Self>> { 34 33 let mut tag: aead::Tag<Self> = Default::default(); 35 - let mut strobe = StrobeState::new( 36 - WHARRGHARBL_PROTO.as_bytes(), 37 - self.param, 38 - crate::strobe::Role::Sender, 39 - ); 34 + let mut strobe = StrobeState::new(WHARRGHARBL_PROTO.as_bytes(), self.param, Role::Sender); 40 35 41 36 strobe.key(&self.key); 42 37 strobe.meta_ad(&self.param.to_bytes()); ··· 56 51 mut buffer: aead::inout::InOutBuf<'_, '_, u8>, 57 52 tag: &aead::Tag<Self>, 58 53 ) -> aead::Result<()> { 59 - let mut strobe = StrobeState::new( 60 - WHARRGHARBL_PROTO.as_bytes(), 61 - self.param, 62 - crate::strobe::Role::Receiver, 63 - ); 54 + let mut strobe = StrobeState::new(WHARRGHARBL_PROTO.as_bytes(), self.param, Role::Receiver); 64 55 65 56 strobe.key(&self.key); 66 57 strobe.meta_ad(&self.param.to_bytes()); ··· 72 63 } 73 64 } 74 65 66 + impl zeroize::Zeroize for AeadStrobe { 67 + fn zeroize(&mut self) { 68 + self.key.zeroize(); 69 + } 70 + } 71 + 75 72 pub struct AeadState { 76 73 pub(crate) aead: AeadStrobe, 77 74 pub(crate) epstein: aead::Nonce<AeadStrobe>, ··· 79 76 role: Role, 80 77 } 81 78 79 + impl zeroize::Zeroize for AeadState { 80 + fn zeroize(&mut self) { 81 + self.aead.zeroize(); 82 + self.epstein.zeroize(); 83 + self.trump.zeroize(); 84 + } 85 + } 86 + 87 + impl zeroize::ZeroizeOnDrop for AeadState {} 88 + 89 + impl Drop for AeadState { 90 + fn drop(&mut self) { 91 + zeroize::Zeroize::zeroize(self); 92 + } 93 + } 94 + 82 95 impl AeadState { 83 - pub fn new( 96 + pub(crate) fn new( 84 97 key: Key<AeadStrobe>, 85 98 sec: StrobeSecurity, 86 99 outbound: aead::Nonce<AeadStrobe>,
+11
wharrgarbl-core/Cargo.toml
··· 1 + [package] 2 + name = "wharrgarbl-core" 3 + description = "Whimsical core types for WHARRGARBL" 4 + authors.workspace = true 5 + edition.workspace = true 6 + repository.workspace = true 7 + version.workspace = true 8 + license.workspace = true 9 + 10 + [dependencies] 11 + aead.workspace = true
+25
wharrgarbl-strobe/Cargo.toml
··· 1 + [package] 2 + name = "wharrgarbl-strobe" 3 + description = "A whimsical STROBE implementation in Pure Rust" 4 + authors.workspace = true 5 + edition.workspace = true 6 + repository.workspace = true 7 + version.workspace = true 8 + license.workspace = true 9 + 10 + [features] 11 + parallel = ["keccak/parallel"] 12 + 13 + [dependencies] 14 + wharrgarbl-core = { path = "../wharrgarbl-core", version = "0.1" } 15 + aead.workspace = true 16 + zeroize.workspace = true 17 + ctutils.workspace = true 18 + keccak = "0.2" 19 + hybrid-array.workspace = true 20 + 21 + [dev-dependencies] 22 + serde_json = "1" 23 + hex = "0.4" 24 + serde = { version = "1.0.210", default-features = false, features = ["derive"] } 25 + serde-big-array = { version = "0.5" }
+31
wharrgarbl-strobe/src/lib.rs
··· 1 + mod keccakf; 2 + mod opflags; 3 + mod ops; 4 + mod strobe; 5 + 6 + #[cfg(test)] 7 + mod basic_kats; 8 + #[cfg(test)] 9 + mod herding_kats; 10 + 11 + pub use strobe::StrobeState; 12 + 13 + /// Version of Strobe that this crate implements. 14 + pub static STROBE_VERSION: &str = "1.0.2"; 15 + 16 + #[derive(Debug, Clone, Copy)] 17 + #[repr(u16)] 18 + pub enum StrobeSecurity { 19 + B128 = 128, 20 + B256 = 256, 21 + } 22 + 23 + impl StrobeSecurity { 24 + pub const fn rachet_bytes(self) -> usize { 25 + (self as usize) >> 3 26 + } 27 + 28 + pub const fn to_bytes(self) -> [u8; 2] { 29 + (self as u16).to_le_bytes() 30 + } 31 + }