1- use std:: {
2- net:: { IpAddr , SocketAddr } ,
3- sync:: Arc ,
4- } ;
1+ use std:: net:: SocketAddr ;
52
6- use attested_tls_proxy:: { attestation:: AttestationExchangeMessage , QuoteGenerator } ;
3+ use attested_tls_proxy:: attestation:: {
4+ AttestationExchangeMessage , AttestationGenerator , AttestationVerifier ,
5+ } ;
76use axum:: {
87 extract:: { Path , State } ,
98 http:: StatusCode ,
109 response:: { IntoResponse , Response } ,
1110} ;
1211use parity_scale_codec:: { Decode , Encode } ;
1312use tokio:: net:: TcpListener ;
14- use tokio_rustls:: rustls:: pki_types:: { CertificateDer , PrivateKeyDer , PrivatePkcs8KeyDer } ;
1513
1614#[ derive( Clone ) ]
1715struct SharedState {
18- attestation_generator : Arc < dyn QuoteGenerator > ,
16+ attestation_generator : AttestationGenerator ,
1917}
2018
2119pub async fn dummy_attestation_server (
2220 listener : TcpListener ,
23- attestation_generator : Arc < dyn QuoteGenerator > ,
21+ attestation_generator : AttestationGenerator ,
2422) -> anyhow:: Result < SocketAddr > {
2523 let addr = listener. local_addr ( ) ?;
2624
@@ -41,20 +39,21 @@ async fn get_attest(
4139 State ( shared_state) : State < SharedState > ,
4240 Path ( input_data) : Path < String > ,
4341) -> Result < ( StatusCode , Vec < u8 > ) , ServerError > {
44- let ( cert_chain, _) = generate_certificate_chain ( "0.0.0.0" . parse ( ) . unwrap ( ) ) ;
4542 let input_data: [ u8 ; 64 ] = hex:: decode ( input_data) . unwrap ( ) . try_into ( ) . unwrap ( ) ;
4643
47- let attestation = AttestationExchangeMessage :: from_attestation_generator (
48- & cert_chain,
49- input_data[ ..32 ] . try_into ( ) . unwrap ( ) ,
50- shared_state. attestation_generator ,
51- ) ?
52- . encode ( ) ;
44+ let attestation = shared_state
45+ . attestation_generator
46+ . generate_attestation ( input_data)
47+ . await ?
48+ . encode ( ) ;
5349
5450 Ok ( ( StatusCode :: OK , attestation) )
5551}
5652
57- pub async fn dummy_attestation_client ( server_addr : SocketAddr ) -> anyhow:: Result < ( ) > {
53+ pub async fn dummy_attestation_client (
54+ server_addr : SocketAddr ,
55+ attestation_verifier : AttestationVerifier ,
56+ ) -> anyhow:: Result < AttestationExchangeMessage > {
5857 let input_data = [ 0 ; 64 ] ;
5958 let response = reqwest:: get ( format ! (
6059 "http://{server_addr}/attest/{}" ,
@@ -68,10 +67,14 @@ pub async fn dummy_attestation_client(server_addr: SocketAddr) -> anyhow::Result
6867
6968 let remote_attestation_message = AttestationExchangeMessage :: decode ( & mut & response[ ..] ) ?;
7069 let remote_attestation_type = remote_attestation_message. attestation_type ;
71- println ! ( "{remote_attestation_type}" ) ;
7270
73- // TODO validate the attestation
74- Ok ( ( ) )
71+ println ! ( "Remote attestation type: {remote_attestation_type}" ) ;
72+
73+ attestation_verifier
74+ . verify_attestation ( remote_attestation_message. clone ( ) , input_data)
75+ . await ?;
76+
77+ Ok ( remote_attestation_message)
7578}
7679
7780struct ServerError ( pub anyhow:: Error ) ;
@@ -92,24 +95,6 @@ impl IntoResponse for ServerError {
9295 }
9396}
9497
95- /// Helper to generate a self-signed certificate for testing
96- fn generate_certificate_chain (
97- ip : IpAddr ,
98- ) -> ( Vec < CertificateDer < ' static > > , PrivateKeyDer < ' static > ) {
99- let mut params = rcgen:: CertificateParams :: new ( vec ! [ ] ) . unwrap ( ) ;
100- params. subject_alt_names . push ( rcgen:: SanType :: IpAddress ( ip) ) ;
101- params
102- . distinguished_name
103- . push ( rcgen:: DnType :: CommonName , ip. to_string ( ) ) ;
104-
105- let keypair = rcgen:: KeyPair :: generate ( ) . unwrap ( ) ;
106- let cert = params. self_signed ( & keypair) . unwrap ( ) ;
107-
108- let certs = vec ! [ CertificateDer :: from( cert) ] ;
109- let key = PrivateKeyDer :: Pkcs8 ( PrivatePkcs8KeyDer :: from ( keypair. serialize_der ( ) ) ) ;
110- ( certs, key)
111- }
112-
11398#[ cfg( test) ]
11499mod tests {
115100
@@ -119,13 +104,17 @@ mod tests {
119104
120105 #[ tokio:: test]
121106 async fn test_dummy_server ( ) {
122- let attestation_generator = AttestationType :: None . get_quote_generator ( ) . unwrap ( ) ;
107+ let attestation_generator = AttestationGenerator {
108+ attestation_type : AttestationType :: None ,
109+ } ;
123110
124111 let listener = TcpListener :: bind ( "127.0.0.1:0" ) . await . unwrap ( ) ;
125112 let server_addr = listener. local_addr ( ) . unwrap ( ) ;
126113 dummy_attestation_server ( listener, attestation_generator)
127114 . await
128115 . unwrap ( ) ;
129- dummy_attestation_client ( server_addr) . await . unwrap ( ) ;
116+ dummy_attestation_client ( server_addr, AttestationVerifier :: do_not_verify ( ) )
117+ . await
118+ . unwrap ( ) ;
130119 }
131120}
0 commit comments