Make sure RSA and ECDSA have KeyPair instances.

This commit is contained in:
2019-04-13 21:15:29 -07:00
parent cfc06c3b56
commit 8a7e604fbd
3 changed files with 18 additions and 3 deletions

View File

@@ -13,6 +13,7 @@ use self::point::{ECCPoint,Point};
pub use self::private::ECCPrivateKey; pub use self::private::ECCPrivateKey;
pub use self::public::{ECDSAPublic,ECCPublicKey}; pub use self::public::{ECDSAPublic,ECCPublicKey};
pub use self::public::{ECDSADecodeErr,ECDSAEncodeErr}; pub use self::public::{ECDSADecodeErr,ECDSAEncodeErr};
use super::KeyPair;
pub struct ECDSAKeyPair<Curve: EllipticCurve> { pub struct ECDSAKeyPair<Curve: EllipticCurve> {
pub public: ECCPublicKey<Curve>, pub public: ECCPublicKey<Curve>,
@@ -21,6 +22,15 @@ pub struct ECDSAKeyPair<Curve: EllipticCurve> {
macro_rules! generate_impl { macro_rules! generate_impl {
($curve: ident, $un: ident, $si: ident) => { ($curve: ident, $un: ident, $si: ident) => {
impl KeyPair for ECDSAKeyPair<$curve> {
type Public = ECCPublicKey<$curve>;
type Private = ECCPrivateKey<$curve>;
fn new(public: ECCPublicKey<$curve>, private: ECCPrivateKey<$curve>) -> ECDSAKeyPair<$curve>
{
ECDSAKeyPair{ public, private }
}
}
impl ECDSAKeyPair<$curve> { impl ECDSAKeyPair<$curve> {
pub fn generate<G: Rng>(rng: &mut G) -> ECDSAKeyPair<$curve> pub fn generate<G: Rng>(rng: &mut G) -> ECDSAKeyPair<$curve>
{ {

View File

@@ -41,6 +41,7 @@ use cryptonum::unsigned::{CryptoNum,PrimeGen};
use cryptonum::unsigned::{U256,U512,U1024,U1536,U2048,U3072,U4096,U7680,U8192,U15360}; use cryptonum::unsigned::{U256,U512,U1024,U1536,U2048,U3072,U4096,U7680,U8192,U15360};
use rand::RngCore; use rand::RngCore;
use std::ops::Sub; use std::ops::Sub;
use super::KeyPair;
fn diff<T>(a: &T, b: &T) -> T fn diff<T>(a: &T, b: &T) -> T
where where
@@ -62,14 +63,19 @@ pub struct RSAKeyPair<R: RSAMode> {
macro_rules! generate_rsa_pair macro_rules! generate_rsa_pair
{ {
($uint: ident, $half: ident, $iterations: expr) => { ($uint: ident, $half: ident, $iterations: expr) => {
impl RSAKeyPair<$uint> { impl KeyPair for RSAKeyPair<$uint> {
pub fn new(pu: RSAPublicKey<$uint>, pr: RSAPrivateKey<$uint>) -> RSAKeyPair<$uint> { type Public = RSAPublicKey<$uint>;
type Private = RSAPrivateKey<$uint>;
fn new(pu: RSAPublicKey<$uint>, pr: RSAPrivateKey<$uint>) -> RSAKeyPair<$uint> {
RSAKeyPair { RSAKeyPair {
public: pu, public: pu,
private: pr private: pr
} }
} }
}
impl RSAKeyPair<$uint> {
pub fn generate<G>(rng: &mut G) -> RSAKeyPair<$uint> pub fn generate<G>(rng: &mut G) -> RSAKeyPair<$uint>
where G: RngCore where G: RngCore
{ {

View File

@@ -94,7 +94,6 @@ pub fn render_openssh_u32<O: Write>(output: &mut O, val: u32) -> Result<(),SSHKe
pub fn parse_openssh_string<I: Read>(input: &mut I) -> Result<String,SSHKeyParseError> pub fn parse_openssh_string<I: Read>(input: &mut I) -> Result<String,SSHKeyParseError>
{ {
let length = parse_openssh_u32(input)?; let length = parse_openssh_u32(input)?;
println!("len: {:X}", length);
let mut limited_input = input.take(length as u64); let mut limited_input = input.take(length as u64);
let mut result = String::new(); let mut result = String::new();
limited_input.read_to_string(&mut result)?; limited_input.read_to_string(&mut result)?;