1pub mod transcript;
4
5use hex::FromHex;
6
7use crate::{
8 connection::{
9 CertBinding, CertBindingV1_2, ConnectionInfo, DnsName, HandshakeData, KeyType,
10 ServerEphemKey, ServerName, ServerSignature, SignatureAlgorithm, TlsVersion,
11 TranscriptLength,
12 },
13 webpki::CertificateDer,
14};
15
16#[derive(Clone)]
18#[allow(missing_docs)]
19pub struct ConnectionFixture {
20 pub server_name: ServerName,
21 pub connection_info: ConnectionInfo,
22 pub server_cert_data: HandshakeData,
23}
24
25impl ConnectionFixture {
26 pub fn tlsnotary(transcript_length: TranscriptLength) -> Self {
28 ConnectionFixture {
29 server_name: ServerName::Dns(DnsName::try_from("tlsnotary.org").unwrap()),
30 connection_info: ConnectionInfo {
31 time: 1671637529,
32 version: TlsVersion::V1_2,
33 transcript_length,
34 },
35 server_cert_data: HandshakeData {
36 certs: vec![
37 CertificateDer(include_bytes!("fixtures/data/tlsnotary.org/ee.der").to_vec()),
38 CertificateDer(
39 include_bytes!("fixtures/data/tlsnotary.org/inter.der").to_vec(),
40 ),
41 CertificateDer(include_bytes!("fixtures/data/tlsnotary.org/ca.der").to_vec()),
42 ],
43 sig: ServerSignature {
44 alg: SignatureAlgorithm::RSA_PKCS1_2048_8192_SHA256,
45 sig: Vec::<u8>::from_hex(include_bytes!(
46 "fixtures/data/tlsnotary.org/signature"
47 ))
48 .unwrap(),
49 },
50 binding: CertBinding::V1_2(CertBindingV1_2 {
51 client_random: <[u8; 32]>::from_hex(include_bytes!(
52 "fixtures/data/tlsnotary.org/client_random"
53 ))
54 .unwrap(),
55 server_random: <[u8; 32]>::from_hex(include_bytes!(
56 "fixtures/data/tlsnotary.org/server_random"
57 ))
58 .unwrap(),
59 server_ephemeral_key: ServerEphemKey {
60 typ: KeyType::SECP256R1,
61 key: Vec::<u8>::from_hex(include_bytes!(
62 "fixtures/data/tlsnotary.org/pubkey"
63 ))
64 .unwrap(),
65 },
66 }),
67 },
68 }
69 }
70
71 pub fn appliedzkp(transcript_length: TranscriptLength) -> Self {
73 ConnectionFixture {
74 server_name: ServerName::Dns(DnsName::try_from("appliedzkp.org").unwrap()),
75 connection_info: ConnectionInfo {
76 time: 1671637529,
77 version: TlsVersion::V1_2,
78 transcript_length,
79 },
80 server_cert_data: HandshakeData {
81 certs: vec![
82 CertificateDer(include_bytes!("fixtures/data/appliedzkp.org/ee.der").to_vec()),
83 CertificateDer(
84 include_bytes!("fixtures/data/appliedzkp.org/inter.der").to_vec(),
85 ),
86 CertificateDer(include_bytes!("fixtures/data/appliedzkp.org/ca.der").to_vec()),
87 ],
88 sig: ServerSignature {
89 alg: SignatureAlgorithm::ECDSA_NISTP256_SHA256,
90 sig: Vec::<u8>::from_hex(include_bytes!(
91 "fixtures/data/appliedzkp.org/signature"
92 ))
93 .unwrap(),
94 },
95 binding: CertBinding::V1_2(CertBindingV1_2 {
96 client_random: <[u8; 32]>::from_hex(include_bytes!(
97 "fixtures/data/appliedzkp.org/client_random"
98 ))
99 .unwrap(),
100 server_random: <[u8; 32]>::from_hex(include_bytes!(
101 "fixtures/data/appliedzkp.org/server_random"
102 ))
103 .unwrap(),
104 server_ephemeral_key: ServerEphemKey {
105 typ: KeyType::SECP256R1,
106 key: Vec::<u8>::from_hex(include_bytes!(
107 "fixtures/data/appliedzkp.org/pubkey"
108 ))
109 .unwrap(),
110 },
111 }),
112 },
113 }
114 }
115
116 pub fn server_ephemeral_key(&self) -> &ServerEphemKey {
118 let CertBinding::V1_2(CertBindingV1_2 {
119 server_ephemeral_key,
120 ..
121 }) = &self.server_cert_data.binding;
122 server_ephemeral_key
123 }
124}