|
3 | 3 | use crate::{
|
4 | 4 | keys::{CoefficientCommitment, VerifiableSecretSharingCommitment},
|
5 | 5 | tests::helpers::generate_element,
|
6 |
| - Group, |
| 6 | + Error, Group, |
7 | 7 | };
|
8 | 8 | use debugless_unwrap::DebuglessUnwrap;
|
9 | 9 | use rand_core::{CryptoRng, RngCore};
|
@@ -46,6 +46,40 @@ pub fn check_serialize_vss_commitment<C: Ciphersuite, R: RngCore + CryptoRng>(mu
|
46 | 46 | .all(|(e, c)| e.as_ref() == c));
|
47 | 47 | }
|
48 | 48 |
|
| 49 | +/// Test serialize_whole VerifiableSecretSharingCommitment |
| 50 | +pub fn check_serialize_whole_vss_commitment<C: Ciphersuite, R: RngCore + CryptoRng>(mut rng: R) { |
| 51 | + // Generate test CoefficientCommitments |
| 52 | + |
| 53 | + // --- |
| 54 | + let input_1 = generate_element::<C, R>(&mut rng); |
| 55 | + let input_2 = generate_element::<C, R>(&mut rng); |
| 56 | + let input_3 = generate_element::<C, R>(&mut rng); |
| 57 | + |
| 58 | + let coeff_comms = vec![ |
| 59 | + CoefficientCommitment::<C>::new(input_1), |
| 60 | + CoefficientCommitment::new(input_2), |
| 61 | + CoefficientCommitment::new(input_3), |
| 62 | + ]; |
| 63 | + |
| 64 | + // --- |
| 65 | + |
| 66 | + let expected = [ |
| 67 | + <C::Group>::serialize(&input_1).unwrap(), |
| 68 | + <C::Group>::serialize(&input_2).unwrap(), |
| 69 | + <C::Group>::serialize(&input_3).unwrap(), |
| 70 | + ] |
| 71 | + .into_iter() |
| 72 | + .map(|element| element.as_ref().to_vec()) |
| 73 | + .collect::<Vec<_>>() |
| 74 | + .concat(); |
| 75 | + |
| 76 | + let vss_commitment = VerifiableSecretSharingCommitment(coeff_comms) |
| 77 | + .serialize_whole() |
| 78 | + .unwrap(); |
| 79 | + |
| 80 | + assert!(expected == vss_commitment); |
| 81 | +} |
| 82 | + |
49 | 83 | /// Test deserialize VerifiableSecretSharingCommitment
|
50 | 84 | pub fn check_deserialize_vss_commitment<C: Ciphersuite, R: RngCore + CryptoRng>(mut rng: R) {
|
51 | 85 | // Generate test CoefficientCommitments
|
@@ -76,6 +110,40 @@ pub fn check_deserialize_vss_commitment<C: Ciphersuite, R: RngCore + CryptoRng>(
|
76 | 110 | assert!(expected == vss_value.unwrap());
|
77 | 111 | }
|
78 | 112 |
|
| 113 | +/// Test deserialize_whole VerifiableSecretSharingCommitment |
| 114 | +pub fn check_deserialize_whole_vss_commitment<C: Ciphersuite, R: RngCore + CryptoRng>(mut rng: R) { |
| 115 | + // Generate test CoefficientCommitments |
| 116 | + |
| 117 | + // --- |
| 118 | + let input_1 = generate_element::<C, R>(&mut rng); |
| 119 | + let input_2 = generate_element::<C, R>(&mut rng); |
| 120 | + let input_3 = generate_element::<C, R>(&mut rng); |
| 121 | + |
| 122 | + let coeff_comms = vec![ |
| 123 | + CoefficientCommitment::<C>::new(input_1), |
| 124 | + CoefficientCommitment::new(input_2), |
| 125 | + CoefficientCommitment::new(input_3), |
| 126 | + ]; |
| 127 | + // --- |
| 128 | + |
| 129 | + let expected = VerifiableSecretSharingCommitment(coeff_comms); |
| 130 | + |
| 131 | + let data = vec![ |
| 132 | + <C::Group>::serialize(&input_1).unwrap(), |
| 133 | + <C::Group>::serialize(&input_2).unwrap(), |
| 134 | + <C::Group>::serialize(&input_3).unwrap(), |
| 135 | + ] |
| 136 | + .into_iter() |
| 137 | + .map(|element| element.as_ref().to_vec()) |
| 138 | + .collect::<Vec<_>>() |
| 139 | + .concat(); |
| 140 | + |
| 141 | + let vss_value = VerifiableSecretSharingCommitment::deserialize_whole(&data); |
| 142 | + |
| 143 | + assert!(vss_value.is_ok()); |
| 144 | + assert!(expected == vss_value.unwrap()); |
| 145 | +} |
| 146 | + |
79 | 147 | /// Test deserialize VerifiableSecretSharingCommitment error
|
80 | 148 | pub fn check_deserialize_vss_commitment_error<C: Ciphersuite, R: RngCore + CryptoRng>(
|
81 | 149 | mut rng: R,
|
@@ -109,6 +177,60 @@ pub fn check_deserialize_vss_commitment_error<C: Ciphersuite, R: RngCore + Crypt
|
109 | 177 | assert!(vss_value.is_err());
|
110 | 178 | }
|
111 | 179 |
|
| 180 | +/// Test deserialize_whole VerifiableSecretSharingCommitment error |
| 181 | +pub fn check_deserialize_whole_vss_commitment_error<C: Ciphersuite, R: RngCore + CryptoRng>( |
| 182 | + mut rng: R, |
| 183 | + commitment_helpers: &Value, |
| 184 | +) { |
| 185 | + // Generate test CoefficientCommitments |
| 186 | + |
| 187 | + // --- |
| 188 | + let values = &commitment_helpers["elements"]; |
| 189 | + |
| 190 | + let input_1 = generate_element::<C, R>(&mut rng); |
| 191 | + let input_2 = generate_element::<C, R>(&mut rng); |
| 192 | + let input_3 = generate_element::<C, R>(&mut rng); |
| 193 | + |
| 194 | + let serialized: <C::Group as Group>::Serialization = |
| 195 | + <C::Group as Group>::Serialization::try_from( |
| 196 | + hex::decode(values["invalid_element"].as_str().unwrap()).unwrap(), |
| 197 | + ) |
| 198 | + .debugless_unwrap(); |
| 199 | + // --- |
| 200 | + |
| 201 | + let data = vec![ |
| 202 | + <C::Group>::serialize(&input_1).unwrap(), |
| 203 | + <C::Group>::serialize(&input_2).unwrap(), |
| 204 | + <C::Group>::serialize(&input_3).unwrap(), |
| 205 | + serialized, |
| 206 | + ] |
| 207 | + .into_iter() |
| 208 | + .map(|element| element.as_ref().to_vec()) |
| 209 | + .collect::<Vec<_>>() |
| 210 | + .concat(); |
| 211 | + |
| 212 | + let vss_value = VerifiableSecretSharingCommitment::<C>::deserialize_whole(&data); |
| 213 | + |
| 214 | + assert!(vss_value.is_err()); |
| 215 | + |
| 216 | + // Generate test CoefficientCommitments with invalid length |
| 217 | + |
| 218 | + let mut data = vec![ |
| 219 | + <C::Group>::serialize(&input_1).unwrap(), |
| 220 | + <C::Group>::serialize(&input_2).unwrap(), |
| 221 | + <C::Group>::serialize(&input_3).unwrap(), |
| 222 | + ] |
| 223 | + .into_iter() |
| 224 | + .map(|element| element.as_ref().to_vec()) |
| 225 | + .collect::<Vec<_>>() |
| 226 | + .concat(); |
| 227 | + data.append(&mut vec![0x00]); |
| 228 | + |
| 229 | + let vss_value = VerifiableSecretSharingCommitment::<C>::deserialize_whole(&data); |
| 230 | + |
| 231 | + assert_eq!(vss_value, Err(Error::InvalidCoefficient)); |
| 232 | +} |
| 233 | + |
112 | 234 | /// Test computing the public key package from a list of commitments.
|
113 | 235 | pub fn check_compute_public_key_package<C: Ciphersuite, R: RngCore + CryptoRng>(mut rng: R) {
|
114 | 236 | let max_signers = 3;
|
|
0 commit comments