@@ -8,12 +8,13 @@ mod zklogin_benches {
88
99 use ark_std:: rand:: rngs:: StdRng ;
1010 use ark_std:: rand:: SeedableRng ;
11- use criterion:: Criterion ;
11+ use criterion:: { BatchSize , Criterion } ;
1212 use fastcrypto:: ed25519:: Ed25519KeyPair ;
1313 use fastcrypto:: error:: FastCryptoError ;
1414 use fastcrypto:: rsa:: { Base64UrlUnpadded , Encoding } ;
1515 use fastcrypto:: traits:: KeyPair ;
1616 use fastcrypto_zkp:: bn254:: utils:: gen_address_seed;
17+ use fastcrypto_zkp:: bn254:: zk_login:: clear_cache_for_testing;
1718 use fastcrypto_zkp:: bn254:: zk_login:: ZkLoginInputs ;
1819 use fastcrypto_zkp:: bn254:: zk_login:: JWK ;
1920 use fastcrypto_zkp:: bn254:: zk_login:: { JwkId , OIDCProvider } ;
@@ -106,18 +107,38 @@ mod zklogin_benches {
106107 } ,
107108 ) ;
108109
109- // Benchmark the entire `verify_zk_login` function.
110- c. bench_function ( "verify_zk_login" , move |b| {
110+ // Benchmark the entire `verify_zk_login` function (warm: modulus hash cache hit).
111+ let input_warm = input. clone ( ) ;
112+ let eph_warm = eph_pubkey. clone ( ) ;
113+ let map_warm = map. clone ( ) ;
114+ c. bench_function ( "verify_zk_login/warm" , move |b| {
111115 b. iter ( || {
112116 fastcrypto_zkp:: bn254:: zk_login_api:: verify_zk_login (
113- & input ,
117+ & input_warm ,
114118 max_epoch,
115- & eph_pubkey ,
116- & map ,
119+ & eph_warm ,
120+ & map_warm ,
117121 & ZkLoginEnv :: Test ,
118122 )
119123 } )
120124 } ) ;
125+
126+ // Benchmark `verify_zk_login` on a cold cache (first call after a JWK refresh).
127+ c. bench_function ( "verify_zk_login/cold" , move |b| {
128+ b. iter_batched (
129+ clear_cache_for_testing,
130+ |_| {
131+ fastcrypto_zkp:: bn254:: zk_login_api:: verify_zk_login (
132+ & input,
133+ max_epoch,
134+ & eph_pubkey,
135+ & map,
136+ & ZkLoginEnv :: Test ,
137+ )
138+ } ,
139+ BatchSize :: SmallInput ,
140+ )
141+ } ) ;
121142 }
122143
123144 /// Benchmark V2 proof verification for 8192-bit RSA keys
@@ -199,18 +220,38 @@ mod zklogin_benches {
199220 } ,
200221 ) ;
201222
202- // Benchmark the entire `verify_zk_login` function.
203- c. bench_function ( "verify_zk_login_v2" , move |b| {
223+ // Benchmark the entire `verify_zk_login` function (warm: modulus hash cache hit).
224+ let input_warm = input. clone ( ) ;
225+ let eph_warm = eph_pubkey. clone ( ) ;
226+ let map_warm = map. clone ( ) ;
227+ c. bench_function ( "verify_zk_login_v2/warm" , move |b| {
204228 b. iter ( || {
205229 fastcrypto_zkp:: bn254:: zk_login_api:: verify_zk_login (
206- & input ,
230+ & input_warm ,
207231 max_epoch,
208- & eph_pubkey ,
209- & map ,
232+ & eph_warm ,
233+ & map_warm ,
210234 & ZkLoginEnv :: Test ,
211235 )
212236 } )
213237 } ) ;
238+
239+ // Benchmark `verify_zk_login` on a cold cache (first call after a JWK refresh).
240+ c. bench_function ( "verify_zk_login_v2/cold" , move |b| {
241+ b. iter_batched (
242+ clear_cache_for_testing,
243+ |_| {
244+ fastcrypto_zkp:: bn254:: zk_login_api:: verify_zk_login (
245+ & input,
246+ max_epoch,
247+ & eph_pubkey,
248+ & map,
249+ & ZkLoginEnv :: Test ,
250+ )
251+ } ,
252+ BatchSize :: SmallInput ,
253+ )
254+ } ) ;
214255 }
215256
216257 criterion_group ! {
0 commit comments