1*4185b066SAndroid Build Coastguard Worker // Copyright 2023 Google LLC 2*4185b066SAndroid Build Coastguard Worker // 3*4185b066SAndroid Build Coastguard Worker // Licensed under the Apache License, Version 2.0 (the "License"); 4*4185b066SAndroid Build Coastguard Worker // you may not use this file except in compliance with the License. 5*4185b066SAndroid Build Coastguard Worker // You may obtain a copy of the License at 6*4185b066SAndroid Build Coastguard Worker // 7*4185b066SAndroid Build Coastguard Worker // http://www.apache.org/licenses/LICENSE-2.0 8*4185b066SAndroid Build Coastguard Worker // 9*4185b066SAndroid Build Coastguard Worker // Unless required by applicable law or agreed to in writing, software 10*4185b066SAndroid Build Coastguard Worker // distributed under the License is distributed on an "AS IS" BASIS, 11*4185b066SAndroid Build Coastguard Worker // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12*4185b066SAndroid Build Coastguard Worker // See the License for the specific language governing permissions and 13*4185b066SAndroid Build Coastguard Worker // limitations under the License. 14*4185b066SAndroid Build Coastguard Worker // 15*4185b066SAndroid Build Coastguard Worker //////////////////////////////////////////////////////////////////////////////// 16*4185b066SAndroid Build Coastguard Worker 17*4185b066SAndroid Build Coastguard Worker //! BoringSSL-based implementation of random number generation. 18*4185b066SAndroid Build Coastguard Worker use authgraph_core::traits::Rng; 19*4185b066SAndroid Build Coastguard Worker 20*4185b066SAndroid Build Coastguard Worker /// [`Rng`] implementation based on BoringSSL. 21*4185b066SAndroid Build Coastguard Worker #[derive(Clone, Default)] 22*4185b066SAndroid Build Coastguard Worker pub struct BoringRng; 23*4185b066SAndroid Build Coastguard Worker 24*4185b066SAndroid Build Coastguard Worker impl Rng for BoringRng { fill_bytes(&self, nonce: &mut [u8])25*4185b066SAndroid Build Coastguard Worker fn fill_bytes(&self, nonce: &mut [u8]) { 26*4185b066SAndroid Build Coastguard Worker openssl::rand::rand_bytes(nonce).unwrap(); // safe: BoringSSL's RAND_bytes() never fails 27*4185b066SAndroid Build Coastguard Worker } box_clone(&self) -> Box<dyn Rng>28*4185b066SAndroid Build Coastguard Worker fn box_clone(&self) -> Box<dyn Rng> { 29*4185b066SAndroid Build Coastguard Worker Box::new(self.clone()) 30*4185b066SAndroid Build Coastguard Worker } 31*4185b066SAndroid Build Coastguard Worker } 32