write some key tests (#1095)
This commit is contained in:
parent
491433afd5
commit
db83d9598f
1 changed files with 60 additions and 7 deletions
|
@ -70,6 +70,8 @@ pub fn encode_key(key: &Key) -> Result<String> {
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn decode_key(key: String) -> Result<Key> {
|
pub fn decode_key(key: String) -> Result<Key> {
|
||||||
|
use rmp::decode;
|
||||||
|
|
||||||
let buf = BASE64_STANDARD
|
let buf = BASE64_STANDARD
|
||||||
.decode(key.trim_end())
|
.decode(key.trim_end())
|
||||||
.wrap_err("encryption key is not a valid base64 encoding")?;
|
.wrap_err("encryption key is not a valid base64 encoding")?;
|
||||||
|
@ -80,14 +82,27 @@ pub fn decode_key(key: String) -> Result<Key> {
|
||||||
Ok(key) => Ok(key.into()),
|
Ok(key) => Ok(key.into()),
|
||||||
Err(_) => {
|
Err(_) => {
|
||||||
let mut bytes = rmp::decode::Bytes::new(&buf);
|
let mut bytes = rmp::decode::Bytes::new(&buf);
|
||||||
let key_len =
|
|
||||||
rmp::decode::read_array_len(&mut bytes).map_err(|err| eyre!("{err:?}"))?;
|
match Marker::from_u8(buf[0]) {
|
||||||
ensure!(key_len == 32, "encryption key is not the correct size");
|
Marker::Bin8 => {
|
||||||
let mut key = Key::default();
|
let len = decode::read_bin_len(&mut bytes).map_err(|err| eyre!("{err:?}"))?;
|
||||||
for i in &mut key {
|
ensure!(len == 32, "encryption key is not the correct size");
|
||||||
*i = rmp::decode::read_int(&mut bytes).map_err(|err| eyre!("{err:?}"))?;
|
let key = <[u8; 32]>::try_from(bytes.remaining_slice())
|
||||||
|
.context("could not decode encryption key")?;
|
||||||
|
Ok(key.into())
|
||||||
|
}
|
||||||
|
Marker::Array16 => {
|
||||||
|
let len = decode::read_array_len(&mut bytes).map_err(|err| eyre!("{err:?}"))?;
|
||||||
|
ensure!(len == 32, "encryption key is not the correct size");
|
||||||
|
|
||||||
|
let mut key = Key::default();
|
||||||
|
for i in &mut key {
|
||||||
|
*i = rmp::decode::read_int(&mut bytes).map_err(|err| eyre!("{err:?}"))?;
|
||||||
|
}
|
||||||
|
Ok(key)
|
||||||
|
}
|
||||||
|
_ => bail!("could not decode encryption key"),
|
||||||
}
|
}
|
||||||
Ok(key)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -348,4 +363,42 @@ mod test {
|
||||||
let h = decode(&bytes).unwrap();
|
let h = decode(&bytes).unwrap();
|
||||||
assert_eq!(history, h);
|
assert_eq!(history, h);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn key_encodings() {
|
||||||
|
use super::{decode_key, encode_key, Key};
|
||||||
|
|
||||||
|
// a history of our key encodings.
|
||||||
|
// v11.0.0 xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q==
|
||||||
|
// v12.0.0 xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q==
|
||||||
|
// v13.0.0 xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q==
|
||||||
|
// v13.0.1 xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q==
|
||||||
|
// v14.0.0 xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q==
|
||||||
|
// v14.0.1 xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q==
|
||||||
|
// c7d89c1 3AAgG1sqW8zSawnM2MyqzL7M8j4GVEXMlMyUNcz7dczizKfMrTRSIsyKbsypfFzM5Q== (https://github.com/ellie/atuin/pull/805)
|
||||||
|
// b53ca35 3AAgG1sqW8zSawnM2MyqzL7M8j4GVEXMlMyUNcz7dczizKfMrTRSIsyKbsypfFzM5Q== (https://github.com/ellie/atuin/pull/974)
|
||||||
|
// v15.0.0 3AAgG1sqW8zSawnM2MyqzL7M8j4GVEXMlMyUNcz7dczizKfMrTRSIsyKbsypfFzM5Q==
|
||||||
|
// b8b57c8 xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q== (https://github.com/ellie/atuin/pull/1057)
|
||||||
|
// 8c94d79 3AAgG1sqW8zSawnM2MyqzL7M8j4GVEXMlMyUNcz7dczizKfMrTRSIsyKbsypfFzM5Q== (https://github.com/ellie/atuin/pull/1089)
|
||||||
|
|
||||||
|
let key = Key::from([
|
||||||
|
27, 91, 42, 91, 210, 107, 9, 216, 170, 190, 242, 62, 6, 84, 69, 148, 148, 53, 251, 117,
|
||||||
|
226, 167, 173, 52, 82, 34, 138, 110, 169, 124, 92, 229,
|
||||||
|
]);
|
||||||
|
|
||||||
|
assert_eq!(
|
||||||
|
encode_key(&key).unwrap(),
|
||||||
|
"3AAgG1sqW8zSawnM2MyqzL7M8j4GVEXMlMyUNcz7dczizKfMrTRSIsyKbsypfFzM5Q=="
|
||||||
|
);
|
||||||
|
|
||||||
|
// key encodings we have to support
|
||||||
|
let valid_encodings = [
|
||||||
|
"xCAbWypb0msJ2Kq+8j4GVEWUlDX7deKnrTRSIopuqXxc5Q==",
|
||||||
|
"3AAgG1sqW8zSawnM2MyqzL7M8j4GVEXMlMyUNcz7dczizKfMrTRSIsyKbsypfFzM5Q==",
|
||||||
|
];
|
||||||
|
|
||||||
|
for k in valid_encodings {
|
||||||
|
assert_eq!(decode_key(k.to_owned()).expect(k), key);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue