use sshcerts::fido::verification::Transport;
use sshcerts::fido::*;
const YUBIKEY_BIO_AUTH_DATA_ED25519: [u8; 225] = [
159, 134, 208, 129, 136, 76, 125, 101, 154, 47, 234, 160, 197, 90, 208, 21, 163, 191, 79, 27,
43, 11, 130, 44, 209, 93, 108, 21, 176, 240, 10, 8, 69, 0, 0, 0, 4, 216, 82, 45, 159, 87, 91,
72, 102, 136, 169, 186, 153, 250, 2, 243, 91, 0, 128, 187, 175, 246, 203, 246, 168, 180, 21,
189, 218, 30, 138, 67, 114, 210, 112, 219, 54, 100, 217, 198, 11, 242, 135, 179, 16, 97, 54,
122, 37, 5, 179, 239, 60, 253, 239, 165, 185, 110, 16, 15, 64, 106, 235, 66, 169, 194, 144, 26,
13, 62, 19, 92, 236, 67, 12, 244, 95, 85, 76, 6, 158, 250, 224, 36, 16, 118, 123, 117, 5, 208,
170, 12, 184, 153, 127, 131, 34, 88, 87, 187, 96, 88, 63, 11, 177, 132, 141, 108, 188, 43, 98,
74, 119, 56, 152, 47, 185, 150, 91, 75, 24, 211, 200, 186, 202, 212, 72, 1, 163, 77, 32, 123,
143, 64, 167, 77, 104, 248, 66, 74, 8, 173, 85, 227, 182, 110, 105, 164, 1, 1, 3, 39, 32, 6,
33, 88, 32, 169, 114, 64, 116, 199, 57, 16, 33, 164, 172, 100, 85, 52, 105, 107, 184, 133, 57,
167, 125, 245, 119, 15, 217, 69, 223, 26, 160, 108, 250, 208, 254,
];
const YUBIKEY_BIO_AUTH_SIG_ED25519: [u8; 72] = [
48, 70, 2, 33, 0, 155, 249, 91, 55, 178, 134, 80, 255, 47, 189, 218, 141, 171, 224, 158, 174,
86, 225, 13, 4, 201, 203, 71, 155, 72, 111, 63, 98, 233, 50, 147, 105, 2, 33, 0, 150, 52, 141,
217, 224, 105, 182, 118, 22, 74, 251, 149, 149, 106, 31, 101, 53, 78, 169, 33, 28, 94, 86, 215,
159, 84, 62, 181, 133, 161, 72, 9,
];
const YUBIKEY_BIO_CHALLENGE_ED25519: [u8; 32] = [
159, 69, 175, 144, 191, 241, 46, 53, 60, 61, 10, 226, 116, 217, 243, 221, 68, 124, 248, 177,
150, 25, 249, 110, 113, 19, 36, 95, 60, 172, 83, 35,
];
const YUBIKEY_BIO_INTERMEDIATE: [u8; 732] = [
48, 130, 2, 216, 48, 130, 1, 192, 160, 3, 2, 1, 2, 2, 9, 0, 255, 135, 108, 45, 175, 115, 121,
200, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11, 5, 0, 48, 46, 49, 44, 48, 42, 6, 3, 85,
4, 3, 19, 35, 89, 117, 98, 105, 99, 111, 32, 85, 50, 70, 32, 82, 111, 111, 116, 32, 67, 65, 32,
83, 101, 114, 105, 97, 108, 32, 52, 53, 55, 50, 48, 48, 54, 51, 49, 48, 32, 23, 13, 49, 52, 48,
56, 48, 49, 48, 48, 48, 48, 48, 48, 90, 24, 15, 50, 48, 53, 48, 48, 57, 48, 52, 48, 48, 48, 48,
48, 48, 90, 48, 110, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19, 2, 83, 69, 49, 18, 48, 16, 6, 3, 85, 4,
10, 12, 9, 89, 117, 98, 105, 99, 111, 32, 65, 66, 49, 34, 48, 32, 6, 3, 85, 4, 11, 12, 25, 65,
117, 116, 104, 101, 110, 116, 105, 99, 97, 116, 111, 114, 32, 65, 116, 116, 101, 115, 116, 97,
116, 105, 111, 110, 49, 39, 48, 37, 6, 3, 85, 4, 3, 12, 30, 89, 117, 98, 105, 99, 111, 32, 85,
50, 70, 32, 69, 69, 32, 83, 101, 114, 105, 97, 108, 32, 55, 54, 50, 48, 56, 55, 52, 50, 51, 48,
89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4,
37, 241, 35, 160, 72, 40, 63, 197, 121, 108, 207, 136, 125, 153, 72, 159, 217, 53, 194, 65,
152, 196, 181, 216, 213, 178, 194, 191, 215, 221, 93, 21, 175, 228, 91, 112, 112, 119, 101,
103, 213, 181, 176, 178, 62, 4, 86, 11, 91, 234, 119, 180, 131, 177, 246, 73, 30, 83, 163, 242,
190, 230, 163, 154, 163, 129, 129, 48, 127, 48, 19, 6, 10, 43, 6, 1, 4, 1, 130, 196, 10, 13, 1,
4, 5, 4, 3, 5, 5, 6, 48, 34, 6, 9, 43, 6, 1, 4, 1, 130, 196, 10, 2, 4, 21, 49, 46, 51, 46, 54,
46, 49, 46, 52, 46, 49, 46, 52, 49, 52, 56, 50, 46, 49, 46, 57, 48, 19, 6, 11, 43, 6, 1, 4, 1,
130, 229, 28, 2, 1, 1, 4, 4, 3, 2, 5, 32, 48, 33, 6, 11, 43, 6, 1, 4, 1, 130, 229, 28, 1, 1, 4,
4, 18, 4, 16, 216, 82, 45, 159, 87, 91, 72, 102, 136, 169, 186, 153, 250, 2, 243, 91, 48, 12,
6, 3, 85, 29, 19, 1, 1, 255, 4, 2, 48, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11, 5,
0, 3, 130, 1, 1, 0, 82, 176, 105, 73, 219, 170, 209, 166, 76, 27, 169, 235, 193, 152, 179, 23,
236, 49, 249, 163, 115, 99, 186, 81, 97, 179, 66, 227, 164, 156, 173, 80, 79, 52, 231, 66, 139,
184, 150, 233, 207, 210, 141, 3, 173, 16, 206, 50, 90, 6, 131, 142, 155, 108, 78, 203, 23, 173,
64, 208, 144, 161, 108, 158, 124, 52, 73, 131, 50, 255, 133, 59, 98, 116, 126, 143, 205, 240,
13, 174, 98, 117, 110, 87, 189, 64, 177, 109, 103, 121, 7, 168, 53, 192, 67, 90, 46, 188, 233,
176, 185, 6, 156, 161, 34, 191, 157, 150, 74, 115, 32, 106, 247, 79, 243, 192, 1, 68, 235, 255,
61, 231, 199, 117, 141, 49, 71, 200, 194, 249, 254, 135, 193, 47, 42, 150, 117, 162, 4, 107, 1,
7, 99, 97, 169, 151, 33, 135, 31, 167, 143, 176, 222, 41, 69, 181, 121, 249, 22, 108, 72, 173,
47, 213, 12, 60, 229, 108, 130, 33, 167, 80, 131, 246, 86, 17, 147, 148, 54, 143, 241, 125, 44,
146, 12, 99, 160, 159, 1, 237, 37, 1, 20, 107, 125, 241, 171, 57, 112, 162, 163, 41, 56, 250,
154, 81, 122, 244, 113, 8, 94, 22, 11, 60, 167, 151, 100, 35, 23, 70, 186, 106, 187, 166, 142,
13, 19, 206, 37, 151, 150, 188, 210, 160, 58, 216, 60, 116, 225, 83, 49, 50, 142, 171, 67, 142,
106, 65, 151, 203, 18, 236, 111, 209, 227, 136,
];
const YUBIKEY_5C_NFC_AUTH_DATA_ED25519: [u8; 225] = [
159, 134, 208, 129, 136, 76, 125, 101, 154, 47, 234, 160, 197, 90, 208, 21, 163, 191, 79, 27,
43, 11, 130, 44, 209, 93, 108, 21, 176, 240, 10, 8, 69, 0, 0, 0, 2, 47, 192, 87, 159, 129, 19,
71, 234, 177, 22, 187, 90, 141, 185, 32, 42, 0, 128, 195, 26, 28, 253, 69, 244, 112, 119, 113,
206, 206, 49, 184, 54, 67, 101, 113, 98, 161, 219, 30, 65, 173, 94, 219, 63, 247, 199, 142, 88,
11, 82, 169, 142, 112, 26, 135, 21, 18, 154, 218, 138, 226, 104, 148, 159, 64, 81, 59, 69, 202,
4, 80, 163, 126, 134, 205, 96, 93, 236, 95, 99, 136, 59, 202, 216, 201, 88, 4, 37, 170, 209,
15, 54, 226, 155, 48, 208, 222, 18, 194, 236, 183, 127, 38, 180, 253, 240, 77, 221, 201, 77,
66, 177, 215, 36, 8, 178, 121, 3, 176, 235, 187, 167, 122, 116, 190, 88, 86, 68, 77, 177, 116,
53, 94, 89, 207, 227, 123, 184, 241, 155, 64, 166, 228, 229, 84, 67, 164, 1, 1, 3, 39, 32, 6,
33, 88, 32, 205, 173, 255, 190, 98, 148, 49, 124, 44, 124, 44, 190, 97, 14, 162, 203, 99, 97,
34, 226, 212, 107, 64, 13, 223, 245, 108, 146, 100, 58, 232, 11,
];
const YUBIKEY_5C_NFC_AUTH_SIG_ED25519: [u8; 72] = [
48, 70, 2, 33, 0, 220, 90, 136, 45, 153, 231, 169, 168, 36, 213, 98, 189, 179, 101, 228, 125,
27, 247, 191, 150, 196, 90, 5, 141, 54, 160, 167, 204, 101, 108, 159, 119, 2, 33, 0, 138, 59,
159, 214, 240, 123, 36, 203, 15, 202, 216, 136, 3, 123, 25, 223, 38, 62, 225, 254, 239, 254,
145, 35, 23, 225, 236, 237, 227, 174, 116, 212,
];
const YUBIKEY_5C_NFC_CHALLENGE_ED25519: [u8; 32] = [
150, 37, 143, 154, 46, 53, 105, 39, 63, 194, 72, 239, 202, 197, 10, 126, 218, 217, 27, 150,
200, 239, 27, 97, 153, 78, 162, 122, 15, 190, 11, 44,
];
const YUBIKEY_5C_NFC_INTERMEDIATE: [u8; 705] = [
48, 130, 2, 189, 48, 130, 1, 165, 160, 3, 2, 1, 2, 2, 4, 30, 143, 135, 52, 48, 13, 6, 9, 42,
134, 72, 134, 247, 13, 1, 1, 11, 5, 0, 48, 46, 49, 44, 48, 42, 6, 3, 85, 4, 3, 19, 35, 89, 117,
98, 105, 99, 111, 32, 85, 50, 70, 32, 82, 111, 111, 116, 32, 67, 65, 32, 83, 101, 114, 105, 97,
108, 32, 52, 53, 55, 50, 48, 48, 54, 51, 49, 48, 32, 23, 13, 49, 52, 48, 56, 48, 49, 48, 48,
48, 48, 48, 48, 90, 24, 15, 50, 48, 53, 48, 48, 57, 48, 52, 48, 48, 48, 48, 48, 48, 90, 48,
110, 49, 11, 48, 9, 6, 3, 85, 4, 6, 19, 2, 83, 69, 49, 18, 48, 16, 6, 3, 85, 4, 10, 12, 9, 89,
117, 98, 105, 99, 111, 32, 65, 66, 49, 34, 48, 32, 6, 3, 85, 4, 11, 12, 25, 65, 117, 116, 104,
101, 110, 116, 105, 99, 97, 116, 111, 114, 32, 65, 116, 116, 101, 115, 116, 97, 116, 105, 111,
110, 49, 39, 48, 37, 6, 3, 85, 4, 3, 12, 30, 89, 117, 98, 105, 99, 111, 32, 85, 50, 70, 32, 69,
69, 32, 83, 101, 114, 105, 97, 108, 32, 53, 49, 50, 55, 50, 50, 55, 52, 48, 48, 89, 48, 19, 6,
7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 168, 121, 248,
35, 56, 237, 20, 148, 186, 192, 112, 75, 204, 127, 198, 99, 209, 178, 113, 113, 89, 118, 36,
49, 1, 199, 96, 81, 21, 215, 193, 82, 158, 40, 28, 28, 103, 50, 45, 56, 75, 92, 213, 93, 211,
233, 129, 141, 95, 216, 92, 34, 175, 50, 110, 12, 100, 252, 32, 175, 227, 63, 35, 102, 163,
108, 48, 106, 48, 34, 6, 9, 43, 6, 1, 4, 1, 130, 196, 10, 2, 4, 21, 49, 46, 51, 46, 54, 46, 49,
46, 52, 46, 49, 46, 52, 49, 52, 56, 50, 46, 49, 46, 55, 48, 19, 6, 11, 43, 6, 1, 4, 1, 130,
229, 28, 2, 1, 1, 4, 4, 3, 2, 4, 48, 48, 33, 6, 11, 43, 6, 1, 4, 1, 130, 229, 28, 1, 1, 4, 4,
18, 4, 16, 47, 192, 87, 159, 129, 19, 71, 234, 177, 22, 187, 90, 141, 185, 32, 42, 48, 12, 6,
3, 85, 29, 19, 1, 1, 255, 4, 2, 48, 0, 48, 13, 6, 9, 42, 134, 72, 134, 247, 13, 1, 1, 11, 5, 0,
3, 130, 1, 1, 0, 134, 147, 255, 98, 223, 13, 87, 121, 212, 116, 141, 127, 200, 209, 2, 39, 49,
138, 142, 88, 14, 106, 58, 87, 193, 8, 233, 78, 3, 195, 133, 104, 179, 102, 137, 79, 206, 86,
36, 190, 74, 62, 253, 127, 52, 17, 139, 61, 153, 55, 67, 247, 146, 161, 152, 145, 96, 200, 252,
154, 224, 176, 78, 61, 249, 238, 21, 227, 232, 140, 4, 252, 130, 168, 220, 191, 88, 24, 225, 8,
220, 194, 150, 133, 119, 174, 121, 255, 102, 43, 148, 115, 78, 61, 236, 69, 151, 48, 93, 115,
230, 229, 94, 226, 190, 185, 205, 150, 120, 202, 9, 53, 229, 51, 235, 99, 143, 142, 38, 250,
187, 129, 124, 218, 68, 31, 190, 152, 49, 131, 42, 229, 246, 226, 173, 153, 47, 158, 187, 219,
76, 98, 35, 139, 143, 141, 122, 180, 129, 214, 211, 38, 59, 205, 191, 158, 74, 87, 85, 3, 112,
152, 138, 213, 129, 52, 64, 250, 3, 44, 173, 182, 114, 60, 173, 216, 248, 215, 186, 128, 159,
117, 180, 60, 255, 160, 165, 185, 173, 209, 66, 50, 239, 157, 158, 20, 129, 38, 56, 35, 60, 76,
164, 168, 115, 185, 248, 172, 152, 227, 43, 161, 145, 103, 96, 110, 21, 144, 159, 205, 219, 74,
45, 255, 189, 174, 70, 32, 36, 159, 154, 102, 70, 172, 129, 228, 131, 45, 17, 25, 254, 191,
170, 115, 26, 136, 45, 162, 90, 119, 130, 125, 70, 209, 144, 23,
];
#[test]
fn verify_and_parse_auth_data_yubikey_bio() {
let verified_data = verification::verify_auth_data(
&YUBIKEY_BIO_AUTH_DATA_ED25519,
&YUBIKEY_BIO_AUTH_SIG_ED25519,
&YUBIKEY_BIO_CHALLENGE_ED25519,
-7,
&YUBIKEY_BIO_INTERMEDIATE,
None,
)
.unwrap();
assert_eq!(verified_data.transports, Some(vec![Transport::USB]));
assert_eq!(verified_data.firmware, Some(format!("5.5.6")));
assert_eq!(
verified_data.aaguid,
Some(hex::decode("d8522d9f575b486688a9ba99fa02f35b").unwrap())
);
assert_eq!(
verified_data.auth_data.aaguid,
verified_data.aaguid.unwrap()
);
assert_eq!(
verified_data.auth_data.rpid_hash,
hex::decode("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08").unwrap()
);
}
#[test]
fn verify_and_parse_auth_data_yubikey_5c_nfc() {
let verified_data = verification::verify_auth_data(
&YUBIKEY_5C_NFC_AUTH_DATA_ED25519,
&YUBIKEY_5C_NFC_AUTH_SIG_ED25519,
&YUBIKEY_5C_NFC_CHALLENGE_ED25519,
-7,
&YUBIKEY_5C_NFC_INTERMEDIATE,
None,
)
.unwrap();
assert_eq!(
verified_data.transports,
Some(vec![Transport::USB, Transport::NFC])
);
assert_eq!(
verified_data.aaguid,
Some(hex::decode("2fc0579f811347eab116bb5a8db9202a").unwrap())
);
assert_eq!(
verified_data.auth_data.aaguid,
verified_data.aaguid.unwrap()
);
assert_eq!(
verified_data.auth_data.rpid_hash,
hex::decode("9f86d081884c7d659a2feaa0c55ad015a3bf4f1b2b0b822cd15d6c15b0f00a08").unwrap()
);
}