net-wire 0.1.0

Allocation-free no_std wire views and codecs for network protocols.
Documentation
use super::fixtures::only_extension;
use net_wire::tls::{
    TlsCipherSuite, TlsExtensionType, TlsNamedGroup, TlsProtocolVersion, TlsPskKeyExchangeMode,
    TlsSignatureScheme,
};

#[test]
fn registry_values_preserve_unknowns_and_classify_grease_exactly() {
    for value in (0x0a0a..=0xfafa).step_by(0x1010) {
        assert!(TlsExtensionType::new(value).is_grease());
        assert!(TlsCipherSuite::new(value).is_grease());
        assert!(TlsNamedGroup::new(value).is_grease());
        assert!(TlsSignatureScheme::new(value).is_grease());
        assert!(TlsProtocolVersion::new(value).is_grease());
    }
    assert!(!TlsExtensionType::new(0x0a1a).is_grease());
    assert_eq!(TlsExtensionType::new(0xfefe).raw(), 0xfefe);

    for value in [0x0b, 0x2a, 0x49, 0x68, 0x87, 0xa6, 0xc5, 0xe4] {
        assert!(TlsPskKeyExchangeMode::new(value).is_grease());
    }
    assert!(!TlsPskKeyExchangeMode::new(0x1b).is_grease());

    let grease_alpn = only_extension(&[0, 16, 0, 5, 0, 3, 2, 0x0a, 0x0a]);
    assert!(
        grease_alpn
            .alpn_protocol_list()
            .unwrap()
            .iter()
            .next()
            .unwrap()
            .unwrap()
            .is_grease()
    );
}