@@ -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 {
@@ -143,6 +144,9 @@ impl DstackGuestRpc for InternalRpcHandler {
143144 Some ( padded)
144145 }
145146 let report_data = pad64 ( & request. report_data ) . context ( "Report data is too long" ) ?;
147+ if self . state . config ( ) . simulator . enabled {
148+ return simulate_quote ( self . state . config ( ) , report_data) ;
149+ }
146150 let ( _, quote) =
147151 tdx_attest:: get_quote ( & report_data, None ) . context ( "Failed to get quote" ) ?;
148152 let event_log = read_event_logs ( ) . context ( "Failed to decode event log" ) ?;
@@ -160,6 +164,23 @@ impl DstackGuestRpc for InternalRpcHandler {
160164 }
161165}
162166
167+ fn simulate_quote ( config : & Config , report_data : [ u8 ; 64 ] ) -> Result < GetQuoteResponse > {
168+ let quote_file =
169+ fs:: read_to_string ( & config. simulator . quote_file ) . context ( "Failed to read quote file" ) ?;
170+ let mut quote = hex:: decode ( quote_file. trim ( ) ) . context ( "Failed to decode quote" ) ?;
171+ let event_log = fs:: read_to_string ( & config. simulator . event_log_file )
172+ . context ( "Failed to read event log file" ) ?;
173+ if quote. len ( ) < 632 {
174+ return Err ( anyhow:: anyhow!( "Quote is too short" ) ) ;
175+ }
176+ quote[ 568 ..632 ] . copy_from_slice ( & report_data) ;
177+ Ok ( GetQuoteResponse {
178+ quote,
179+ event_log,
180+ report_data : report_data. to_vec ( ) ,
181+ } )
182+ }
183+
163184impl RpcCall < AppState > for InternalRpcHandler {
164185 type PrpcService = DstackGuestServer < Self > ;
165186
@@ -199,7 +220,7 @@ impl TappdRpc for InternalRpcHandlerV0 {
199220 . state
200221 . inner
201222 . cert_client
202- . request_cert ( & derived_key, config)
223+ . request_cert ( & derived_key, config, self . state . config ( ) . simulator . enabled )
203224 . await
204225 . context ( "Failed to sign the CSR" ) ?;
205226 Ok ( GetTlsKeyResponse {
@@ -219,28 +240,37 @@ impl TappdRpc for InternalRpcHandlerV0 {
219240 }
220241
221242 async fn tdx_quote ( self , request : TdxQuoteArgs ) -> Result < TdxQuoteResponse > {
243+ let hash_algorithm = if request. hash_algorithm . is_empty ( ) {
244+ DEFAULT_HASH_ALGORITHM
245+ } else {
246+ & request. hash_algorithm
247+ } ;
248+ let prefix = if hash_algorithm == "raw" {
249+ "" . into ( )
250+ } else {
251+ QuoteContentType :: AppData . tag ( ) . to_string ( )
252+ } ;
222253 let content_type = if request. prefix . is_empty ( ) {
223254 QuoteContentType :: AppData
224255 } else {
225256 QuoteContentType :: Custom ( & request. prefix )
226257 } ;
227258 let report_data =
228259 content_type. to_report_data_with_hash ( & request. report_data , & request. hash_algorithm ) ?;
260+ if self . state . config ( ) . simulator . enabled {
261+ let response = simulate_quote ( self . state . config ( ) , report_data) ?;
262+ return Ok ( TdxQuoteResponse {
263+ quote : response. quote ,
264+ event_log : response. event_log ,
265+ hash_algorithm : hash_algorithm. to_string ( ) ,
266+ prefix,
267+ } ) ;
268+ }
229269 let event_log = read_event_logs ( ) . context ( "Failed to decode event log" ) ?;
230270 let event_log =
231271 serde_json:: to_string ( & event_log) . context ( "Failed to serialize event log" ) ?;
232272 let ( _, quote) =
233273 tdx_attest:: get_quote ( & report_data, None ) . context ( "Failed to get quote" ) ?;
234- let hash_algorithm = if request. hash_algorithm . is_empty ( ) {
235- DEFAULT_HASH_ALGORITHM
236- } else {
237- & request. hash_algorithm
238- } ;
239- let prefix = if hash_algorithm == "raw" {
240- "" . into ( )
241- } else {
242- QuoteContentType :: AppData . tag ( ) . to_string ( )
243- } ;
244274 Ok ( TdxQuoteResponse {
245275 quote,
246276 event_log,
0 commit comments