use std::prelude::v1::*;
use crate::errors::Result;
pub use self::keys::{KeyPair, PublicKey, Seed};
pub struct Curve {
pub public_key_len: usize,
pub elem_scalar_seed_len: usize,
pub id: CurveID,
check_private_key_bytes: fn(bytes: &[u8]) -> Result<()>,
generate_private_key: fn(rng: &[u8], &mut [u8]) -> Result<()>,
public_from_private: fn(public_out: &mut [u8], private_key: &Seed) -> Result<()>,
}
derive_debug_via_id!(Curve);
#[derive(Clone, Copy, Debug, PartialEq)]
pub enum CurveID {
Curve25519,
P256,
P384,
}
const ELEM_MAX_BITS: usize = 384;
pub const ELEM_MAX_BYTES: usize = (ELEM_MAX_BITS + 7) / 8;
pub const SCALAR_MAX_BYTES: usize = ELEM_MAX_BYTES;
const SEED_MAX_BYTES: usize = ELEM_MAX_BYTES;
pub const PKCS8_DOCUMENT_MAX_LEN: usize = 40 + SCALAR_MAX_BYTES + keys::PUBLIC_KEY_MAX_LEN;
mod keys;
pub mod suite_b;