@@ -240,7 +240,11 @@ impl SignatureBuiltinRunner {
240240 }
241241 private_inputs. sort_by_key ( |input| match input {
242242 PrivateInput :: Signature ( sig) => sig. index ,
243- _ => unreachable ! ( ) ,
243+ _ => unreachable ! (
244+ "Unexpected variant in private_inputs: {:?}.
245+ This private input of the signature builtin is always a Signature variant." ,
246+ input
247+ ) ,
244248 } ) ;
245249 private_inputs
246250 }
@@ -558,4 +562,67 @@ mod tests {
558562 assert_eq ! ( signature_a. s, signature_b. s) ;
559563 }
560564 }
565+ #[ test]
566+ fn get_air_private_input ( ) {
567+ let mut builtin = SignatureBuiltinRunner :: new ( Some ( 512 ) , true ) ;
568+
569+ builtin. base = 0 ;
570+
571+ let signature1_r = Felt252 :: from ( 1234 ) ;
572+ let signature1_s = Felt252 :: from ( 5678 ) ;
573+ let signature2_r = Felt252 :: from ( 8765 ) ;
574+ let signature2_s = Felt252 :: from ( 4321 ) ;
575+
576+ let sig1_addr = Relocatable :: from ( ( builtin. base as isize , 0 ) ) ;
577+ let sig2_addr = Relocatable :: from ( ( builtin. base as isize , CELLS_PER_SIGNATURE as usize ) ) ;
578+
579+ builtin
580+ . add_signature ( sig1_addr, & ( signature1_r, signature1_s) )
581+ . unwrap ( ) ;
582+ builtin
583+ . add_signature ( sig2_addr, & ( signature2_r, signature2_s) )
584+ . unwrap ( ) ;
585+
586+ let pubkey1 = Felt252 :: from ( 1111 ) ;
587+ let msg1 = Felt252 :: from ( 2222 ) ;
588+ let pubkey2 = Felt252 :: from ( 3333 ) ;
589+ let msg2 = Felt252 :: from ( 4444 ) ;
590+
591+ let segments = segments ! [
592+ ( ( 0 , 0 ) , 1111 ) ,
593+ ( ( 0 , 1 ) , 2222 ) ,
594+ ( ( 0 , 2 ) , 3333 ) ,
595+ ( ( 0 , 3 ) , 4444 )
596+ ] ;
597+ let w1 =
598+ Felt252 :: from ( & div_mod ( & BigInt :: one ( ) , & signature1_s. to_bigint ( ) , & * EC_ORDER ) . unwrap ( ) ) ;
599+
600+ let w2 =
601+ Felt252 :: from ( & div_mod ( & BigInt :: one ( ) , & signature2_s. to_bigint ( ) , & * EC_ORDER ) . unwrap ( ) ) ;
602+
603+ let expected_private_inputs = vec ! [
604+ PrivateInput :: Signature ( PrivateInputSignature {
605+ index: 0 ,
606+ pubkey: pubkey1,
607+ msg: msg1,
608+ signature_input: SignatureInput {
609+ r: signature1_r,
610+ w: w1,
611+ } ,
612+ } ) ,
613+ PrivateInput :: Signature ( PrivateInputSignature {
614+ index: 1 ,
615+ pubkey: pubkey2,
616+ msg: msg2,
617+ signature_input: SignatureInput {
618+ r: signature2_r,
619+ w: w2,
620+ } ,
621+ } ) ,
622+ ] ;
623+
624+ let private_inputs = builtin. air_private_input ( & segments. memory ) ;
625+
626+ assert_eq ! ( private_inputs, expected_private_inputs) ;
627+ }
561628}
0 commit comments