feat: parse id_ecdsa
This commit is contained in:
70
src/sshrw.rs
70
src/sshrw.rs
@@ -204,11 +204,72 @@ ffd2e773ebc594c17b2cdd1dc20c25e33220d3b8743",
|
||||
|
||||
let id_ecdsa = "b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAaAAAABNlY2RzYS\
|
||||
1zaGEyLW5pc3RwMjU2AAAACG5pc3RwMjU2AAAAQQS7A9eqDzPYZEnh8R6ydfhTCtsTU3fi\
|
||||
xdewP1lt2GEwQs/LUL4bYDkA4kpP/S53PrxZTBeyzdHcIMJeMyINO4dDAAAAuK3kG36t5B\"
|
||||
t+AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLsD16oPM9hkSeHx\"
|
||||
HrJ1+FMK2xNTd+LF17A/WW3YYTBCz8tQvhtgOQDiSk/9Lnc+vFlMF7LN0dwgwl4zIg07h0\"
|
||||
MAAAAhAIC5cYUvZZw5X4LGn2hZR+l7kdiMKsTly/luHG7VNN4WAAAAHWhhdHRlcmppYW5n\"
|
||||
xdewP1lt2GEwQs/LUL4bYDkA4kpP/S53PrxZTBeyzdHcIMJeMyINO4dDAAAAuK3kG36t5B\
|
||||
t+AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBLsD16oPM9hkSeHx\
|
||||
HrJ1+FMK2xNTd+LF17A/WW3YYTBCz8tQvhtgOQDiSk/9Lnc+vFlMF7LN0dwgwl4zIg07h0\
|
||||
MAAAAhAIC5cYUvZZw5X4LGn2hZR+l7kdiMKsTly/luHG7VNN4WAAAAHWhhdHRlcmppYW5n\
|
||||
QEhhdHRlckppYW5nX21hY09TAQI=";
|
||||
|
||||
let mut ssh_reader = SshReader::new(STANDARD.decode(id_ecdsa).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_ec_algorithm = public_key1_reader.read_string().unwrap();
|
||||
let public_key1_public_key = public_key1_reader.read_string().unwrap();
|
||||
assert_eq!(b"ecdsa-sha2-nistp256", public_key1_algorithm.as_slice());
|
||||
assert_eq!(b"nistp256", public_key1_ec_algorithm.as_slice());
|
||||
assert_eq!("04bb03d7aa0f33d86449e1f11eb275f8530adb135377e2c5d7b03f596dd8613042cfcb50be1b6039\
|
||||
00e24a4ffd2e773ebc594c17b2cdd1dc20c25e33220d3b8743",
|
||||
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()));
|
||||
assert_eq!(check1, check2);
|
||||
|
||||
let private_key1_algorithm = encrypted_reader.read_string().unwrap();
|
||||
assert_eq!(b"ecdsa-sha2-nistp256", private_key1_algorithm.as_slice());
|
||||
|
||||
let private_key1_ec_algorithm = encrypted_reader.read_string().unwrap();
|
||||
assert_eq!(b"nistp256", private_key1_ec_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!("0080b971852f659c395f82c69f685947e97b91d88c2ac4e5cbf96e1c6ed534de16",
|
||||
hex::encode(&private_key1_private_key));
|
||||
|
||||
let comment = encrypted_reader.read_string().unwrap();
|
||||
assert_eq!(b"hatterjiang@HatterJiang_macOS", comment.as_slice());
|
||||
|
||||
let left_padding = encrypted_reader.read_left().unwrap();
|
||||
assert_eq!("0102", hex::encode(&left_padding));
|
||||
|
||||
assert_eq!(0, encrypted_reader.left_bytes());
|
||||
|
||||
assert_eq!(0, ssh_reader.left_bytes());
|
||||
}
|
||||
|
||||
#[test]
|
||||
@@ -273,6 +334,7 @@ M7fjASfvAUUTu7A7QqzWAAAAHWhhdHRlcmppYW5nQEhhdHRlckppYW5nX21hY09T";
|
||||
let check2 = encrypted_reader.read_u32().unwrap();
|
||||
println!("check1 {}", hex::encode(&check1.to_be_bytes()));
|
||||
println!("check2 {}", hex::encode(&check2.to_be_bytes()));
|
||||
assert_eq!(check1, check2);
|
||||
|
||||
let private_key1_algorithm = encrypted_reader.read_string().unwrap();
|
||||
assert_eq!(b"ssh-ed25519", private_key1_algorithm.as_slice());
|
||||
|
||||
Reference in New Issue
Block a user