| 1058 | |
| 1059 | #[test] |
| 1060 | fn encrypt_decrypt_timing() { |
| 1061 | fn check(chunk_bit_size: u8, count: u8) { |
| 1062 | let mut rng = StdRng::seed_from_u64(0u64); |
| 1063 | let (gens, g_i, sk, ek, dk) = enc_setup(chunk_bit_size, &mut rng); |
| 1064 | let prepared_gens = PreparedEncryptionGens::from(gens.clone()); |
| 1065 | let prepared_ek = PreparedEncryptionKey::from(ek.clone()); |
| 1066 | let prepared_dk = PreparedDecryptionKey::from(dk.clone()); |
| 1067 | let pairing_powers = prepared_dk.pairing_powers(chunk_bit_size, &g_i).unwrap(); |
| 1068 | |
| 1069 | let mut total_enc = Duration::default(); |
| 1070 | let mut total_ver_com = Duration::default(); |
| 1071 | let mut total_ver_com_prep = Duration::default(); |
| 1072 | let mut total_dec = Duration::default(); |
| 1073 | let mut total_dec_prep = Duration::default(); |
| 1074 | let mut total_dec_prep_powers = Duration::default(); |
| 1075 | let mut total_ver_dec = Duration::default(); |
| 1076 | let mut total_ver_dec_prep = Duration::default(); |
| 1077 | |
| 1078 | for _ in 0..count { |
| 1079 | let m = Fr::rand(&mut rng); |
| 1080 | |
| 1081 | let start = Instant::now(); |
| 1082 | let (ct, _) = Encryption::encrypt(&mut rng, &m, &ek, &g_i, chunk_bit_size).unwrap(); |
| 1083 | total_enc += start.elapsed(); |
| 1084 | |
| 1085 | let start = Instant::now(); |
| 1086 | ct.verify_commitment(ek.clone(), gens.clone()).unwrap(); |
| 1087 | total_ver_com += start.elapsed(); |
| 1088 | |
| 1089 | let start = Instant::now(); |
| 1090 | ct.verify_commitment(prepared_ek.clone(), prepared_gens.clone()) |
| 1091 | .unwrap(); |
| 1092 | total_ver_com_prep += start.elapsed(); |
| 1093 | |
| 1094 | let (chunks, nu) = Encryption::decrypt_to_chunks( |
| 1095 | &ct.X_r, |
| 1096 | &ct.enc_chunks, |
| 1097 | &sk, |
| 1098 | dk.clone(), |
| 1099 | &g_i, |
| 1100 | chunk_bit_size, |
| 1101 | ) |
| 1102 | .unwrap(); |
| 1103 | |
| 1104 | let decomposed = decompose(&m, chunk_bit_size).unwrap(); |
| 1105 | assert_eq!(decomposed, chunks); |
| 1106 | |
| 1107 | let start = Instant::now(); |
| 1108 | let (m_, nu_) = ct.decrypt(&sk, dk.clone(), &g_i, chunk_bit_size).unwrap(); |
| 1109 | total_dec += start.elapsed(); |
| 1110 | assert_eq!(m, m_); |
| 1111 | assert_eq!(nu, nu_); |
| 1112 | |
| 1113 | let start = Instant::now(); |
| 1114 | let (m_, nu_) = ct |
| 1115 | .decrypt(&sk, prepared_dk.clone(), &g_i, chunk_bit_size) |
| 1116 | .unwrap(); |
| 1117 | total_dec_prep += start.elapsed(); |