Files
opaque-vx/src/tests/mock_rng.rs
T
breakingbread 2e1bcfe4c2
Rust CI / cargo fmt (push) Successful in 15s
Rust CI / test (1.90.0 / no backend / --features argon2) (push) Successful in 2m35s
Rust CI / cargo clippy (push) Successful in 1m28s
Rust CI / test (1.90.0 / no backend / no frontend) (push) Successful in 2m40s
Rust CI / test (stable / no backend / no frontend) (push) Successful in 2m28s
Rust CI / test (stable / no backend / --features serde) (push) Successful in 2m54s
Rust CI / test (stable / no backend / --features argon2) (push) Successful in 2m35s
Rust CI / test (1.90.0 / no backend / --features serde) (push) Successful in 2m54s
Rust CI / test (stable / --features curve25519 / no frontend) (push) Successful in 2m35s
Rust CI / test (1.90.0 / --features curve25519 / no frontend) (push) Successful in 2m29s
Rust CI / test (stable / --features curve25519 / --features argon2) (push) Successful in 2m39s
Rust CI / test (1.90.0 / --features curve25519 / --features argon2) (push) Successful in 2m38s
Rust CI / test (stable / --features curve25519 / --features serde) (push) Successful in 3m8s
Rust CI / test (1.90.0 / --features curve25519 / --features serde) (push) Successful in 2m57s
Rust CI / test (1.90.0 / --features ecdsa / no frontend) (push) Successful in 2m56s
Rust CI / test (stable / --features ecdsa / no frontend) (push) Successful in 2m52s
Rust CI / test (stable / --features ecdsa / --features argon2) (push) Successful in 3m0s
Publish / publish (release) Successful in 1m5s
Rust CI / test (1.90.0 / --features ecdsa / --features argon2) (push) Successful in 2m56s
Rust CI / test (1.90.0 / --features ed25519 / no frontend) (push) Successful in 2m51s
Rust CI / test (1.90.0 / --features ecdsa / --features serde) (push) Successful in 3m20s
Rust CI / test (stable / --features ecdsa / --features serde) (push) Successful in 3m19s
Rust CI / test (stable / --features ed25519 / no frontend) (push) Successful in 2m53s
Rust CI / test (stable / --features ed25519 / --features argon2) (push) Successful in 3m1s
Rust CI / test (1.90.0 / --features ed25519 / --features argon2) (push) Successful in 3m0s
Rust CI / test (1.90.0 / --features ed25519 / --features serde) (push) Successful in 3m21s
Rust CI / test (stable / --features ed25519 / --features serde) (push) Successful in 3m20s
Rust CI / test (stable / --features ristretto255 / no frontend) (push) Successful in 3m7s
Rust CI / test (1.90.0 / --features ristretto255 / no frontend) (push) Successful in 3m3s
Rust CI / test (1.90.0 / --features ristretto255 / --features argon2) (push) Successful in 3m13s
Rust CI / test (stable / --features ristretto255 / --features argon2) (push) Successful in 3m10s
Rust CI / test (1.90.0 / --features ristretto255 / --features serde) (push) Successful in 3m31s
Rust CI / test (stable / --features ristretto255 / --features serde) (push) Successful in 3m29s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m20s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / no frontend) (push) Successful in 5m8s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Successful in 5m28s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features argon2) (push) Successful in 5m17s
Rust CI / test (1.90.0 / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Successful in 5m56s
Rust CI / test (stable / --features ristretto255,curve25519,ecdsa,ed25519 / --features serde) (push) Successful in 5m47s
Rust CI / test (1.90.0 / --features ristretto255,kem / no frontend) (push) Successful in 4m0s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features argon2) (push) Successful in 4m21s
Rust CI / test (stable / --features ristretto255,kem / no frontend) (push) Successful in 3m58s
Rust CI / test (stable / --features ristretto255,kem / --features argon2) (push) Successful in 4m3s
Rust CI / test (stable / --features ristretto255,kem / --features serde) (push) Successful in 4m34s
Rust CI / test (1.90.0 / --features ristretto255,kem / --features serde) (push) Successful in 4m28s
Rust CI / test simple_login example (push) Successful in 19s
Rust CI / test digital_locker example (push) Successful in 17s
Rust CI / cargo bench compilation () (push) Successful in 1m45s
Rust CI / cargo bench compilation (--features ristretto255) (push) Successful in 1m53s
Rust CI / cargo bench compilation (--features ristretto255,kem) (push) Successful in 2m33s
Rust CI / cargo audit (push) Successful in 10s
Rust CI / no-std (thumbv6m-none-eabi / ecdsa) (push) Successful in 29s
Rust CI / no-std (wasm32-unknown-unknown / ecdsa) (push) Successful in 29s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 31s
Rust CI / no-std (thumbv6m-none-eabi / no backend) (push) Successful in 29s
Rust CI / no-std (wasm32-unknown-unknown / no backend) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255) (push) Successful in 31s
Rust CI / no-std (wasm32-unknown-unknown / ristretto255,curve25519,ecdsa,ed25519) (push) Successful in 21s
Rust CI / no-std (thumbv6m-none-eabi / curve25519) (push) Successful in 27s
Rust CI / no-std (wasm32-unknown-unknown / curve25519) (push) Successful in 41s
Rust CI / no-std (wasm32-unknown-unknown / ed25519) (push) Successful in 20s
Rust CI / no-std (thumbv6m-none-eabi / ed25519) (push) Successful in 27s
Rust CI / no-std (thumbv6m-none-eabi / ristretto255) (push) Successful in 29s
chore: fix README package name, enable zeroize on crates, rand_core removed for reexport (#4)
Reviewed-on: #4
Co-authored-by: UneBaguette <[email protected]>
Co-committed-by: UneBaguette <[email protected]>
2026-07-02 08:19:22 +02:00

70 lines
1.6 KiB
Rust

// SPDX-License-Identifier: MIT OR Apache-2.0
// Copyright (c) VexaHub and contributors.
// Copyright (c) Meta Platforms, Inc. and affiliates.
use core::cmp::min;
use std::vec::Vec;
use core::convert::Infallible;
use rand::rand_core::{TryCryptoRng, TryRng};
/// A simple implementation of `Rng` for testing purposes.
///
/// This generates a cyclic sequence (i.e. cycles over an initial buffer)
#[derive(Clone, Debug)]
pub struct CycleRng {
v: Vec<u8>,
}
impl CycleRng {
/// Create a `CycleRng`, yielding a sequence starting with `initial` and
/// looping thereafter
pub fn new(initial: Vec<u8>) -> Self {
CycleRng { v: initial }
}
}
fn rotate_left<T>(data: &mut [T], steps: usize) {
if data.is_empty() {
return;
}
let steps = steps % data.len();
data[..steps].reverse();
data[steps..].reverse();
data.reverse();
}
impl TryRng for CycleRng {
type Error = Infallible;
fn try_next_u32(&mut self) -> Result<u32, Self::Error> {
let mut buf = [0u8; 4];
self.try_fill_bytes(&mut buf)?;
Ok(u32::from_le_bytes(buf))
}
fn try_next_u64(&mut self) -> Result<u64, Self::Error> {
let mut buf = [0u8; 8];
self.try_fill_bytes(&mut buf)?;
Ok(u64::from_le_bytes(buf))
}
fn try_fill_bytes(&mut self, dest: &mut [u8]) -> Result<(), Self::Error> {
let len = min(self.v.len(), dest.len());
dest[..len].copy_from_slice(&self.v[..len]);
rotate_left(&mut self.v, len);
Ok(())
}
}
// This is meant for testing only
impl TryCryptoRng for CycleRng {}