feat: parse id_ed25519
This commit is contained in:
54
src/sshrw.rs
54
src/sshrw.rs
@@ -53,7 +53,6 @@ impl SshReader {
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn left_bytes(&self) -> usize {
|
pub fn left_bytes(&self) -> usize {
|
||||||
println!("{} .. {}", self.read_len, self.buffer_len);
|
|
||||||
assert!(self.read_len <= self.buffer_len);
|
assert!(self.read_len <= self.buffer_len);
|
||||||
self.buffer_len - self.read_len
|
self.buffer_len - self.read_len
|
||||||
}
|
}
|
||||||
@@ -238,4 +237,57 @@ QyNTUxOQAAACBMHC+ZHtpqkQ1zFjN+FVuN9jO34wEn7wFFE7uwO0Ks1gAAAKCwNsNtsDbD\
|
|||||||
bQAAAAtzc2gtZWQyNTUxOQAAACBMHC+ZHtpqkQ1zFjN+FVuN9jO34wEn7wFFE7uwO0Ks1g\
|
bQAAAAtzc2gtZWQyNTUxOQAAACBMHC+ZHtpqkQ1zFjN+FVuN9jO34wEn7wFFE7uwO0Ks1g\
|
||||||
AAAEBG1hWO0trqejMtL8JlEUkm2w4+Wqvl4e4PkjC0Ee6fD0wcL5ke2mqRDXMWM34VW432\
|
AAAEBG1hWO0trqejMtL8JlEUkm2w4+Wqvl4e4PkjC0Ee6fD0wcL5ke2mqRDXMWM34VW432\
|
||||||
M7fjASfvAUUTu7A7QqzWAAAAHWhhdHRlcmppYW5nQEhhdHRlckppYW5nX21hY09T";
|
M7fjASfvAUUTu7A7QqzWAAAAHWhhdHRlcmppYW5nQEhhdHRlckppYW5nX21hY09T";
|
||||||
|
|
||||||
|
let mut ssh_reader = SshReader::new(STANDARD.decode(id_ed25519).unwrap());
|
||||||
|
|
||||||
|
let auth_magic = ssh_reader.read_bytes(15).unwrap();
|
||||||
|
// why has '\x00' ?
|
||||||
|
assert_eq!(b"openssh-key-v1\x00", auth_magic.as_slice());
|
||||||
|
|
||||||
|
let ciphername = ssh_reader.read_string().unwrap();
|
||||||
|
assert_eq!(b"none", ciphername.as_slice());
|
||||||
|
|
||||||
|
let kdfname = ssh_reader.read_string().unwrap();
|
||||||
|
assert_eq!(b"none", kdfname.as_slice());
|
||||||
|
|
||||||
|
let kdfoptions = ssh_reader.read_string().unwrap();
|
||||||
|
assert_eq!(b"", kdfoptions.as_slice());
|
||||||
|
|
||||||
|
let number_of_keys = ssh_reader.read_u32().unwrap();
|
||||||
|
assert_eq!(1, number_of_keys);
|
||||||
|
|
||||||
|
let public_key1 = ssh_reader.read_string().unwrap();
|
||||||
|
let mut public_key1_reader = SshReader::new(public_key1);
|
||||||
|
let public_key1_algorithm = public_key1_reader.read_string().unwrap();
|
||||||
|
let public_key1_public_key = public_key1_reader.read_string().unwrap();
|
||||||
|
assert_eq!(b"ssh-ed25519", public_key1_algorithm.as_slice());
|
||||||
|
assert_eq!("4c1c2f991eda6a910d7316337e155b8df633b7e30127ef014513bbb03b42acd6",
|
||||||
|
hex::encode(&public_key1_public_key));
|
||||||
|
assert_eq!(0, public_key1_reader.left_bytes());
|
||||||
|
|
||||||
|
let encrypted = ssh_reader.read_string().unwrap();
|
||||||
|
|
||||||
|
let mut encrypted_reader = SshReader::new(encrypted);
|
||||||
|
// check1 always equals check2, is generated by random
|
||||||
|
let check1 = encrypted_reader.read_u32().unwrap();
|
||||||
|
let check2 = encrypted_reader.read_u32().unwrap();
|
||||||
|
println!("check1 {}", hex::encode(&check1.to_be_bytes()));
|
||||||
|
println!("check2 {}", hex::encode(&check2.to_be_bytes()));
|
||||||
|
|
||||||
|
let private_key1_algorithm = encrypted_reader.read_string().unwrap();
|
||||||
|
assert_eq!(b"ssh-ed25519", private_key1_algorithm.as_slice());
|
||||||
|
|
||||||
|
let private_key1_public_key = encrypted_reader.read_string().unwrap();
|
||||||
|
let private_key1_private_key = encrypted_reader.read_string().unwrap();
|
||||||
|
assert_eq!(&public_key1_public_key, &private_key1_public_key);
|
||||||
|
assert_eq!("46d6158ed2daea7a332d2fc265114926db0e3e5aabe5e1ee0f9230b411ee9f0f4c1c2f991eda6a910d\
|
||||||
|
7316337e155b8df633b7e30127ef014513bbb03b42acd6",
|
||||||
|
hex::encode(&private_key1_private_key));
|
||||||
|
|
||||||
|
let comment = encrypted_reader.read_string().unwrap();
|
||||||
|
assert_eq!(b"hatterjiang@HatterJiang_macOS", comment.as_slice());
|
||||||
|
|
||||||
|
assert_eq!(0, encrypted_reader.left_bytes());
|
||||||
|
|
||||||
|
assert_eq!(0, ssh_reader.left_bytes());
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user