@@ -58,6 +58,7 @@ impl AppState {
5858 usage_client_auth : true ,
5959 ext_quote : true ,
6060 } ,
61+ config. simulator . enabled ,
6162 )
6263 . await
6364 . context ( "Failed to get app cert" ) ?
@@ -101,7 +102,7 @@ impl DstackGuestRpc for InternalRpcHandler {
101102 . state
102103 . inner
103104 . cert_client
104- . request_cert ( & derived_key, config)
105+ . request_cert ( & derived_key, config, self . state . config ( ) . simulator . enabled )
105106 . await
106107 . context ( "Failed to sign the CSR" ) ?;
107108 Ok ( GetTlsKeyResponse {
@@ -145,6 +146,9 @@ impl DstackGuestRpc for InternalRpcHandler {
145146 Some ( padded)
146147 }
147148 let report_data = pad64 ( & request. report_data ) . context ( "Report data is too long" ) ?;
149+ if self . state . config ( ) . simulator . enabled {
150+ return simulate_quote ( self . state . config ( ) , report_data) ;
151+ }
148152 let ( _, quote) =
149153 tdx_attest:: get_quote ( & report_data, None ) . context ( "Failed to get quote" ) ?;
150154 let event_log = read_event_logs ( ) . context ( "Failed to decode event log" ) ?;
@@ -162,6 +166,23 @@ impl DstackGuestRpc for InternalRpcHandler {
162166 }
163167}
164168
169+ fn simulate_quote ( config : & Config , report_data : [ u8 ; 64 ] ) -> Result < GetQuoteResponse > {
170+ let quote_file =
171+ fs:: read_to_string ( & config. simulator . quote_file ) . context ( "Failed to read quote file" ) ?;
172+ let mut quote = hex:: decode ( quote_file. trim ( ) ) . context ( "Failed to decode quote" ) ?;
173+ let event_log = fs:: read_to_string ( & config. simulator . event_log_file )
174+ . context ( "Failed to read event log file" ) ?;
175+ if quote. len ( ) < 632 {
176+ return Err ( anyhow:: anyhow!( "Quote is too short" ) ) ;
177+ }
178+ quote[ 568 ..632 ] . copy_from_slice ( & report_data) ;
179+ Ok ( GetQuoteResponse {
180+ quote,
181+ event_log,
182+ report_data : report_data. to_vec ( ) ,
183+ } )
184+ }
185+
165186impl RpcCall < AppState > for InternalRpcHandler {
166187 type PrpcService = DstackGuestServer < Self > ;
167188
@@ -201,7 +222,7 @@ impl TappdRpc for InternalRpcHandlerV0 {
201222 . state
202223 . inner
203224 . cert_client
204- . request_cert ( & derived_key, config)
225+ . request_cert ( & derived_key, config, self . state . config ( ) . simulator . enabled )
205226 . await
206227 . context ( "Failed to sign the CSR" ) ?;
207228 Ok ( GetTlsKeyResponse {
@@ -221,28 +242,37 @@ impl TappdRpc for InternalRpcHandlerV0 {
221242 }
222243
223244 async fn tdx_quote ( self , request : TdxQuoteArgs ) -> Result < TdxQuoteResponse > {
245+ let hash_algorithm = if request. hash_algorithm . is_empty ( ) {
246+ DEFAULT_HASH_ALGORITHM
247+ } else {
248+ & request. hash_algorithm
249+ } ;
250+ let prefix = if hash_algorithm == "raw" {
251+ "" . into ( )
252+ } else {
253+ QuoteContentType :: AppData . tag ( ) . to_string ( )
254+ } ;
224255 let content_type = if request. prefix . is_empty ( ) {
225256 QuoteContentType :: AppData
226257 } else {
227258 QuoteContentType :: Custom ( & request. prefix )
228259 } ;
229260 let report_data =
230261 content_type. to_report_data_with_hash ( & request. report_data , & request. hash_algorithm ) ?;
262+ if self . state . config ( ) . simulator . enabled {
263+ let response = simulate_quote ( self . state . config ( ) , report_data) ?;
264+ return Ok ( TdxQuoteResponse {
265+ quote : response. quote ,
266+ event_log : response. event_log ,
267+ hash_algorithm : hash_algorithm. to_string ( ) ,
268+ prefix,
269+ } ) ;
270+ }
231271 let event_log = read_event_logs ( ) . context ( "Failed to decode event log" ) ?;
232272 let event_log =
233273 serde_json:: to_string ( & event_log) . context ( "Failed to serialize event log" ) ?;
234274 let ( _, quote) =
235275 tdx_attest:: get_quote ( & report_data, None ) . context ( "Failed to get quote" ) ?;
236- let hash_algorithm = if request. hash_algorithm . is_empty ( ) {
237- DEFAULT_HASH_ALGORITHM
238- } else {
239- & request. hash_algorithm
240- } ;
241- let prefix = if hash_algorithm == "raw" {
242- "" . into ( )
243- } else {
244- QuoteContentType :: AppData . tag ( ) . to_string ( )
245- } ;
246276 Ok ( TdxQuoteResponse {
247277 quote,
248278 event_log,
0 commit comments