xref: /aosp_15_r20/system/authgraph/boringssl/src/rng.rs (revision 4185b0660fbe514985fdcf75410317caad8afad1)
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