#[cfg(feature = "base64-keys")]
use data_encoding::BASE64URL_NOPAD;
use rand::RngCore;
#[must_use]
pub fn generate_key() -> String {
let mut key_bytes = [0u8; 64];
rand::thread_rng().fill_bytes(&mut key_bytes);
hex::encode(key_bytes)
}
#[must_use]
#[deprecated(
since = "0.7.1",
note = "use generate_key() — hex is now the default key format"
)]
pub fn generate_key_hex() -> String {
generate_key()
}
#[must_use]
#[cfg(feature = "base64-keys")]
#[deprecated(
since = "0.7.1",
note = "use generate_key() instead; base64 key support will be removed before oboron 1.0"
)]
pub fn generate_key_base64() -> String {
loop {
let mut key_bytes = [0u8; 64];
rand::thread_rng().fill_bytes(&mut key_bytes);
let key_base64 = BASE64URL_NOPAD.encode(&key_bytes);
if !key_base64.contains('-') && !key_base64.contains('_') {
return key_base64;
}
}
}
#[must_use]
pub fn generate_key_bytes() -> [u8; 64] {
let mut key_bytes = [0u8; 64];
rand::thread_rng().fill_bytes(&mut key_bytes);
key_bytes
}
#[must_use]
pub fn generate_secret() -> String {
let mut secret_bytes = [0u8; 32];
rand::thread_rng().fill_bytes(&mut secret_bytes);
hex::encode(secret_bytes)
}
#[must_use]
#[deprecated(
since = "0.7.1",
note = "use generate_secret() — hex is now the default secret format"
)]
pub fn generate_secret_hex() -> String {
generate_secret()
}
#[must_use]
#[cfg(feature = "base64-keys")]
#[deprecated(
since = "0.7.1",
note = "use generate_secret() instead; base64 support will be removed before oboron 1.0"
)]
pub fn generate_secret_base64() -> String {
loop {
let mut key_bytes = [0u8; 32];
rand::thread_rng().fill_bytes(&mut key_bytes);
let key_base64 = BASE64URL_NOPAD.encode(&key_bytes);
if !key_base64.contains('-') && !key_base64.contains('_') {
return key_base64;
}
}
}
#[must_use]
pub fn generate_secret_bytes() -> [u8; 32] {
let mut secret_bytes = [0u8; 32];
rand::thread_rng().fill_bytes(&mut secret_bytes);
secret_bytes
}