sshcerts 0.12.0

A library for parsing, verifying, and creating SSH Certificates
Documentation
use sshcerts::ssh::Reader;
use sshcerts::error::Error;


#[test]
fn rfc4251_mpint_test_vector_one() {
    let test_vector = [0, 0, 0, 0];
    let mut reader = Reader::new(&test_vector);
    let num = reader.read_positive_mpint();
    assert_eq!(num.unwrap(), vec![]);
}

#[test]
fn rfc4251_mpint_test_vector_two() {
    let test_vector =[0x00, 0x00, 0x00, 0x08, 0x09, 0xa3, 0x78, 0xf9, 0xb2, 0xe3, 0x32, 0xa7];
    let mut reader = Reader::new(&test_vector);
    let num = reader.read_positive_mpint();
    assert_eq!(num.unwrap(), vec![0x09, 0xa3, 0x78, 0xf9, 0xb2, 0xe3, 0x32, 0xa7]);
}

#[test]
fn rfc4251_mpint_test_vector_three() {
    let test_vector =[0x00, 0x00, 0x00, 0x02, 0x00, 0x80];
    let mut reader = Reader::new(&test_vector);
    let num = reader.read_positive_mpint();
    assert_eq!(num.unwrap(), vec![0x80]);
}

#[test]
fn rfc4251_mpint_test_vector_four() {
    let test_vector =[0x00, 0x00, 0x00, 0x02, 0xed, 0xcc];
    let mut reader = Reader::new(&test_vector);
    match reader.read_positive_mpint() {
        Err(Error::InvalidFormat) => (),
        Ok(n) => panic!("This should have failed to parse as it's a negative mpint but instead got {:?}", n),
        Err(other) => panic!("Got {other}, when expected InvalidFormat"),
    }
}

#[test]
fn rfc4251_mpint_test_vector_five() {
    let test_vector =[0x00, 0x00, 0x00, 0x05, 0xff, 0x21, 0x52, 0x41, 0x11];
    let mut reader = Reader::new(&test_vector);
    match reader.read_positive_mpint() {
        Err(Error::InvalidFormat) => (),
        Ok(n) => panic!("This should have failed to parse as it's a negative mpint but instead got {:?}", n),
        Err(other) => panic!("Got {other}, when expected InvalidFormat"),
    }
}

#[test]
fn malicious_mpint_wrong_zero() {
    let test_vector =[0x00, 0x00, 0x00, 0x01, 0x00];
    let mut reader = Reader::new(&test_vector);
    match reader.read_positive_mpint() {
        Err(Error::InvalidFormat) => (),
        Ok(n) => panic!("This should have failed to parse as it's a negative mpint but instead got {:?}", n),
        Err(other) => panic!("Got {other}, when expected InvalidFormat"),
    }
}

#[test]
fn malicious_mpint_unneeded_zero() {
    let test_vector =[0x00, 0x00, 0x00, 0x02, 0x00, 0x01];
    let mut reader = Reader::new(&test_vector);
    match reader.read_positive_mpint() {
        Err(Error::InvalidFormat) => (),
        Ok(n) => panic!("This should have failed to parse as it's a negative mpint but instead got {:?}", n),
        Err(other) => panic!("Got {other}, when expected InvalidFormat"),
    }
}

#[test]
fn malicious_mpint_too_many_zeros() {
    let test_vector =[0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xFF];
    let mut reader = Reader::new(&test_vector);
    match reader.read_positive_mpint() {
        Err(Error::InvalidFormat) => (),
        Ok(n) => panic!("This should have failed to parse as it's a negative mpint but instead got {:?}", n),
        Err(other) => panic!("Got {other}, when expected InvalidFormat"),
    }
}

#[test]
fn extra_good_check() {
    let test_vector =[0x00, 0x00, 0x00, 0x01, 0x7F];
    let mut reader = Reader::new(&test_vector);
    let num = reader.read_positive_mpint();
    assert_eq!(num.unwrap(), vec![0x7F]);
}

#[test]
fn extra_good_check_two() {
    let test_vector =[0x00, 0x00, 0x00, 0x02, 0x00, 0x80];
    let mut reader = Reader::new(&test_vector);
    let num = reader.read_positive_mpint();
    assert_eq!(num.unwrap(), vec![0x80]);
}

#[test]
fn read_raw_bytes() {
    let test_vector =[0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11];
    let mut reader = Reader::new(&test_vector);
    let num = reader.read_raw_bytes(10);
    assert_eq!(num.unwrap(), vec![0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11,]);
}

#[test]
fn read_raw_too_many() {
    let test_vector =[0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11];
    let mut reader = Reader::new(&test_vector);
    let num = reader.read_raw_bytes(40);
    assert_eq!(num.is_err(), true);
}

#[test]
fn read_raw_wrap() {
    let test_vector =[0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11, 0xff, 0x21, 0x52, 0x41, 0x11];
    let mut reader = Reader::new(&test_vector);
    reader.read_raw_bytes(4).unwrap();
    let num = reader.read_raw_bytes(2 ^ 64 - 1);
    assert_eq!(num.is_err(), true);
}