pub(crate) mod shared_encryption;
pub(crate) mod substrate;
pub(crate) mod translator;
#[cfg(test)]
mod unit_tests;
use crate::{errors::Result, KeyIdentifier, KeyType};
use rand::{CryptoRng, RngCore};
use secrecy::Secret;
use shared_encryption::x25519::SharedEncryptionX25519KeyPair;
use substrate::{ed25519::SubstrateEd25519KeyPair, sr25519::SubstrateSr25519KeyPair};
#[derive(Clone, Debug)]
pub enum KeyPairValue {
SubstrateSr25519(SubstrateSr25519KeyPair),
SubstrateEd25519(SubstrateEd25519KeyPair),
SharedEncryptionX25519(SharedEncryptionX25519KeyPair),
}
pub(crate) trait RawKeyPair: Sized {
type PublicKey: AsRef<[u8]>;
type Signature: AsRef<[u8]>;
const KEY_TYPE: KeyType;
fn from_strings(secret: Secret<String>) -> Result<Self>;
fn from_secret(secret: Secret<String>) -> Result<Self>;
fn generate_with<R: RngCore + CryptoRng>(rng: &mut R) -> Result<Self>;
fn generate() -> Result<Self> {
Self::generate_with(&mut rand::thread_rng())
}
fn sign(&self, message: &[u8]) -> Result<Self::Signature>;
fn identifier(&self) -> KeyIdentifier;
fn to_secret(&self) -> Result<Secret<String>>;
fn public(&self) -> Self::PublicKey;
fn get_key_type(&self) -> KeyType {
Self::KEY_TYPE
}
}