Skip to content

Commit 8732fcc

Browse files
authored
Merge pull request #18 from sekey/dev
Merge version 0.2.1 onto master
2 parents 3eca74b + 6f17441 commit 8732fcc

9 files changed

Lines changed: 67 additions & 54 deletions

File tree

Cargo.toml

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,13 @@
11
[package]
22
name = "ssh-agent"
33
description = "Library for implementing an SSH agent"
4-
version = "0.2.0"
4+
version = "0.2.1"
55
license = "MIT"
66
authors = [
77
"Nicolas Trippar <ntrippar@gmail.com>",
88
"Federico Pomar <fmpomar@users.noreply.github.com>"
99
]
10+
repository = "https://github.com/sekey/ssh-agent.rs"
1011
readme = "README.md"
1112
edition = "2018"
1213

@@ -16,10 +17,7 @@ codecov = { repository = "sekey/ssh-agent.rs" }
1617

1718
[dependencies]
1819
byteorder = "1.2.7"
19-
num-derive = "0.2"
20-
num-traits = "0.2"
21-
serde = "1.0.87"
22-
serde_derive = "1.0.87"
20+
serde = {version = "1.0.87", features = ["derive"]}
2321
bytes = "0.4.11"
2422
tokio = "0.1.15"
2523
tokio-uds = "0.2.5"

examples/key_storage.rs

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,4 @@
1-
#[macro_use]
2-
extern crate log;
3-
extern crate env_logger;
4-
extern crate openssl;
1+
use log::info;
52

63
use ssh_agent::proto::{from_bytes, to_bytes};
74
use ssh_agent::proto::message::{self, Message, SignRequest};

src/agent.rs

Lines changed: 13 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,22 @@
1-
use tokio_uds::UnixListener;
1+
use byteorder::{BigEndian, ReadBytesExt};
2+
use bytes::{BytesMut, BufMut};
3+
use futures::future::FutureResult;
4+
use log::{error, info};
5+
use tokio::codec::{Framed, Encoder, Decoder};
26
use tokio::net::TcpListener;
3-
use std::net::SocketAddr;
47
use tokio::prelude::*;
8+
use tokio_uds::UnixListener;
59

6-
use std::mem::size_of;
710
use std::error::Error;
8-
use std::sync::Arc;
911
use std::fmt::Debug;
12+
use std::mem::size_of;
13+
use std::net::SocketAddr;
14+
use std::path::Path;
15+
use std::sync::Arc;
1016

11-
use super::proto::{from_bytes, to_bytes};
12-
use super::proto::message::Message;
1317
use super::error::AgentError;
14-
15-
use bytes::{BytesMut, BufMut};
16-
17-
use byteorder::{BigEndian, ReadBytesExt};
18-
19-
use tokio::codec::{Framed, Encoder, Decoder};
20-
21-
use futures::future::FutureResult;
18+
use super::proto::message::Message;
19+
use super::proto::{from_bytes, to_bytes};
2220

2321
struct MessageCodec;
2422

@@ -89,7 +87,7 @@ pub trait Agent: 'static + Sync + Send + Sized {
8987
Box::new(FutureResult::from(self.handle(message)))
9088
}
9189

92-
fn run_unix(self, path: &str) -> Result<(), Box<Error>> {
90+
fn run_unix(self, path: impl AsRef<Path>) -> Result<(), Box<Error>> {
9391
let socket = UnixListener::bind(path)?;
9492
Ok(tokio::run(handle_clients!(self, socket)))
9593
}

src/lib.rs

Lines changed: 0 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,5 @@
11
#![deny(missing_debug_implementations)]
22

3-
extern crate byteorder;
4-
extern crate num_traits;
5-
6-
#[macro_use]
7-
extern crate log;
8-
9-
#[macro_use]
10-
extern crate serde_derive;
11-
extern crate serde;
12-
extern crate bytes;
13-
143
pub mod proto;
154
pub mod agent;
165
pub mod error;

src/proto/message.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
use serde::{Deserialize, Serialize};
2+
13
use super::private_key::PrivateKey;
24

35
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]

src/proto/private_key.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,12 @@
1-
use serde::de::{Deserialize, Deserializer, Error};
2-
use serde::ser::{Serialize, Serializer, SerializeTuple};
1+
use serde::{Deserialize, Serialize};
2+
use serde::de::{Deserializer, Error};
3+
use serde::ser::{Serializer, SerializeTuple};
34
use super::error::ProtoError;
45
use super::key_type::{KeyType, KeyTypeEnum};
56

67
pub type MpInt = Vec<u8>;
78

8-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
9+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
910
pub struct DssPrivateKey {
1011
pub p: MpInt,
1112
pub q: MpInt,
@@ -14,13 +15,13 @@ pub struct DssPrivateKey {
1415
pub x: MpInt
1516
}
1617

17-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
18+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
1819
pub struct Ed25519PrivateKey {
1920
pub enc_a: Vec<u8>,
2021
pub k_enc_a: Vec<u8>
2122
}
2223

23-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
24+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
2425
pub struct RsaPrivateKey {
2526
pub n: MpInt,
2627
pub e: MpInt,
@@ -30,14 +31,14 @@ pub struct RsaPrivateKey {
3031
pub q: MpInt
3132
}
3233

33-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
34+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
3435
pub struct EcDsaPrivateKey {
3536
pub identifier: String,
3637
pub q: MpInt,
3738
pub d: MpInt
3839
}
3940

40-
#[derive(Clone, PartialEq, Debug)]
41+
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
4142
pub enum PrivateKey {
4243
Dss(DssPrivateKey),
4344
Ed25519(Ed25519PrivateKey),

src/proto/public_key.rs

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,37 +1,38 @@
1-
use serde::de::{Deserialize, Deserializer, Error};
2-
use serde::ser::{Serialize, Serializer, SerializeTuple};
1+
use serde::{Deserialize, Serialize};
2+
use serde::de::{Deserializer, Error};
3+
use serde::ser::{Serializer, SerializeTuple};
34
use super::error::ProtoError;
45
use super::private_key::*;
56
use super::key_type::{KeyType, KeyTypeEnum};
67

78
pub type MpInt = Vec<u8>;
89

9-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
10+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
1011
pub struct RsaPublicKey {
1112
pub e: MpInt,
1213
pub n: MpInt
1314
}
1415

15-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
16+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
1617
pub struct DssPublicKey {
1718
pub p: MpInt,
1819
pub q: MpInt,
1920
pub g: MpInt,
2021
pub y: MpInt
2122
}
2223

23-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
24+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
2425
pub struct EcDsaPublicKey {
2526
pub identifier: String,
2627
pub q: MpInt
2728
}
2829

29-
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
30+
#[derive(Clone, Debug, Eq, Hash, PartialEq, Serialize, Deserialize)]
3031
pub struct Ed25519PublicKey {
3132
pub enc_a: Vec<u8>
3233
}
3334

34-
#[derive(Clone, PartialEq, Debug)]
35+
#[derive(Clone, Debug, Eq, Hash, PartialEq)]
3536
pub enum PublicKey {
3637
Dss(DssPublicKey),
3738
Ed25519(Ed25519PublicKey),

src/proto/ser.rs

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -315,10 +315,8 @@ impl<'a, W: io::Write> ser::SerializeStructVariant for &'a mut Serializer<W> {
315315

316316

317317
pub fn to_bytes<T: Serialize>(value: &T) -> ProtoResult<Vec<u8>> {
318-
use bytes::BufMut;
319-
let writer = vec![].writer();
320-
let mut serializer = Serializer::from_writer(writer);
318+
let mut serializer = Serializer::from_writer(Vec::new());
321319
value.serialize(&mut serializer)?;
322-
Ok(serializer.writer.into_inner())
320+
Ok(serializer.writer)
323321
}
324322

src/proto/signature.rs

Lines changed: 30 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,37 @@
1+
use serde::{Deserialize, Serialize};
2+
3+
use super::private_key::*;
4+
use super::key_type::{KeyType};
5+
use super::to_bytes;
6+
7+
pub type MpInt = Vec<u8>;
8+
19
pub const RSA_SHA2_256: u32 = 0x02;
210
pub const RSA_SHA2_512: u32 = 0x04;
311

412
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
513
pub struct Signature {
614
pub algorithm: String,
715
pub blob: Vec<u8>
8-
}
16+
}
17+
18+
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
19+
pub struct EcDsaSignature {
20+
pub identifier: String,
21+
pub data: EcDsaSignatureData
22+
}
23+
24+
#[derive(Clone, PartialEq, Debug, Serialize, Deserialize)]
25+
pub struct EcDsaSignatureData {
26+
pub r: Vec<u8>,
27+
pub s: Vec<u8>
28+
}
29+
30+
impl From<EcDsaSignature> for Signature {
31+
fn from(signature: EcDsaSignature) -> Signature {
32+
Signature {
33+
algorithm: format!("{}-{}", EcDsaPrivateKey::KEY_TYPE, signature.identifier),
34+
blob: to_bytes(&signature.data).unwrap()
35+
}
36+
}
37+
}

0 commit comments

Comments
 (0)