@@ -27,15 +27,23 @@ const AES_IV_LENGTH: usize = 16;
2727#[ cfg_attr( test, derive( Debug ) ) ]
2828#[ derive( Clone , Default ) ]
2929pub struct Dataset {
30+ pub address : String ,
3031 pub url : String ,
3132 pub checksum : String ,
3233 pub filename : String ,
3334 pub key : String ,
3435}
3536
3637impl Dataset {
37- pub fn new ( url : String , checksum : String , filename : String , key : String ) -> Self {
38+ pub fn new (
39+ address : String ,
40+ url : String ,
41+ checksum : String ,
42+ filename : String ,
43+ key : String ,
44+ ) -> Self {
3845 Dataset {
46+ address,
3947 url,
4048 checksum,
4149 filename,
@@ -48,7 +56,6 @@ impl Dataset {
4856 /// # Arguments
4957 ///
5058 /// * `chain_task_id` - The chain task ID for logging
51- /// * `index` - The dataset index for error reporting
5259 ///
5360 /// # Returns
5461 ///
@@ -58,7 +65,6 @@ impl Dataset {
5865 pub fn download_encrypted_dataset (
5966 & self ,
6067 chain_task_id : & str ,
61- index : usize ,
6268 ) -> Result < Vec < u8 > , ReplicateStatusCause > {
6369 info ! (
6470 "Downloading encrypted dataset file [chainTaskId:{chain_task_id}, url:{}]" ,
@@ -81,7 +87,9 @@ impl Dataset {
8187 } else {
8288 download_from_url ( & self . url )
8389 }
84- . ok_or ( ReplicateStatusCause :: PreComputeDatasetDownloadFailed ( index) ) ?;
90+ . ok_or ( ReplicateStatusCause :: PreComputeDatasetDownloadFailed (
91+ self . address . clone ( ) ,
92+ ) ) ?;
8593
8694 info ! ( "Checking encrypted dataset checksum [chainTaskId:{chain_task_id}]" ) ;
8795 let actual_checksum = sha256_from_bytes ( & encrypted_content) ;
@@ -92,7 +100,7 @@ impl Dataset {
92100 self . checksum
93101 ) ;
94102 return Err ( ReplicateStatusCause :: PreComputeInvalidDatasetChecksum (
95- index ,
103+ self . address . clone ( ) ,
96104 ) ) ;
97105 }
98106
@@ -108,7 +116,6 @@ impl Dataset {
108116 /// # Arguments
109117 ///
110118 /// * `encrypted_content` - Full encrypted dataset, including the IV prefix.
111- /// * `index` - The dataset index for error reporting
112119 ///
113120 /// # Returns
114121 ///
@@ -117,15 +124,14 @@ impl Dataset {
117124 pub fn decrypt_dataset (
118125 & self ,
119126 encrypted_content : & [ u8 ] ,
120- index : usize ,
121127 ) -> Result < Vec < u8 > , ReplicateStatusCause > {
122- let key = general_purpose:: STANDARD
123- . decode ( & self . key )
124- . map_err ( |_| ReplicateStatusCause :: PreComputeDatasetDecryptionFailed ( index ) ) ?;
128+ let key = general_purpose:: STANDARD . decode ( & self . key ) . map_err ( |_| {
129+ ReplicateStatusCause :: PreComputeDatasetDecryptionFailed ( self . address . clone ( ) )
130+ } ) ?;
125131
126132 if encrypted_content. len ( ) < AES_IV_LENGTH || key. len ( ) != AES_KEY_LENGTH {
127133 return Err ( ReplicateStatusCause :: PreComputeDatasetDecryptionFailed (
128- index ,
134+ self . address . clone ( ) ,
129135 ) ) ;
130136 }
131137
@@ -135,7 +141,9 @@ impl Dataset {
135141
136142 Aes256CbcDec :: new ( key_slice. into ( ) , iv_slice. into ( ) )
137143 . decrypt_padded_vec_mut :: < Pkcs7 > ( ciphertext)
138- . map_err ( |_| ReplicateStatusCause :: PreComputeDatasetDecryptionFailed ( index) )
144+ . map_err ( |_| {
145+ ReplicateStatusCause :: PreComputeDatasetDecryptionFailed ( self . address . clone ( ) )
146+ } )
139147 }
140148}
141149
@@ -157,6 +165,7 @@ mod tests {
157165
158166 fn get_test_dataset ( ) -> Dataset {
159167 Dataset :: new (
168+ "0xDatasetAddress" . to_string ( ) ,
160169 HTTP_DATASET_URL . to_string ( ) ,
161170 DATASET_CHECKSUM . to_string ( ) ,
162171 PLAIN_DATA_FILE . to_string ( ) ,
@@ -168,18 +177,21 @@ mod tests {
168177 #[ test]
169178 fn download_encrypted_dataset_success ( ) {
170179 let dataset = get_test_dataset ( ) ;
171- let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID , 0 ) ;
180+ let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID ) ;
172181 assert ! ( actual_content. is_ok( ) ) ;
173182 }
174183
175184 #[ test]
176185 fn download_encrypted_dataset_failure_with_invalid_dataset_url ( ) {
177186 let mut dataset = get_test_dataset ( ) ;
178187 dataset. url = "http://bad-url" . to_string ( ) ;
179- let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID , 10 ) ;
188+ dataset. address = "0xbaddataset" . to_string ( ) ;
189+ let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID ) ;
180190 assert_eq ! (
181191 actual_content,
182- Err ( ReplicateStatusCause :: PreComputeDatasetDownloadFailed ( 10 ) )
192+ Err ( ReplicateStatusCause :: PreComputeDatasetDownloadFailed (
193+ "0xbaddataset" . to_string( )
194+ ) )
183195 ) ;
184196 }
185197
@@ -189,7 +201,7 @@ mod tests {
189201 dataset. url = IPFS_DATASET_URL . to_string ( ) ;
190202 dataset. checksum =
191203 "0x323b1637c7999942fbebfe5d42fe15dbfe93737577663afa0181938d7ad4a2ac" . to_string ( ) ;
192- let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID , 0 ) ;
204+ let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID ) ;
193205 let expected_content = Ok ( "hello world !\n " . as_bytes ( ) . to_vec ( ) ) ;
194206 assert_eq ! ( actual_content, expected_content) ;
195207 }
@@ -198,17 +210,23 @@ mod tests {
198210 fn download_encrypted_dataset_failure_with_invalid_gateway ( ) {
199211 let mut dataset = get_test_dataset ( ) ;
200212 dataset. url = "/ipfs/INVALID_IPFS_DATASET_URL" . to_string ( ) ;
201- let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID , 1 ) ;
202- let expected_content = Err ( ReplicateStatusCause :: PreComputeDatasetDownloadFailed ( 1 ) ) ;
213+ dataset. address = "0xinvalidgateway" . to_string ( ) ;
214+ let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID ) ;
215+ let expected_content = Err ( ReplicateStatusCause :: PreComputeDatasetDownloadFailed (
216+ "0xinvalidgateway" . to_string ( ) ,
217+ ) ) ;
203218 assert_eq ! ( actual_content, expected_content) ;
204219 }
205220
206221 #[ test]
207222 fn download_encrypted_dataset_failure_with_invalid_dataset_checksum ( ) {
208223 let mut dataset = get_test_dataset ( ) ;
209224 dataset. checksum = "invalid_dataset_checksum" . to_string ( ) ;
210- let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID , 9999 ) ;
211- let expected_content = Err ( ReplicateStatusCause :: PreComputeInvalidDatasetChecksum ( 9999 ) ) ;
225+ dataset. address = "0xinvalidchecksum" . to_string ( ) ;
226+ let actual_content = dataset. download_encrypted_dataset ( CHAIN_TASK_ID ) ;
227+ let expected_content = Err ( ReplicateStatusCause :: PreComputeInvalidDatasetChecksum (
228+ "0xinvalidchecksum" . to_string ( ) ,
229+ ) ) ;
212230 assert_eq ! ( actual_content, expected_content) ;
213231 }
214232 // endregion
@@ -218,11 +236,9 @@ mod tests {
218236 fn decrypt_dataset_success_with_valid_dataset ( ) {
219237 let dataset = get_test_dataset ( ) ;
220238
221- let encrypted_data = dataset
222- . download_encrypted_dataset ( CHAIN_TASK_ID , 3 )
223- . unwrap ( ) ;
239+ let encrypted_data = dataset. download_encrypted_dataset ( CHAIN_TASK_ID ) . unwrap ( ) ;
224240 let expected_plain_data = Ok ( "Some very useful data." . as_bytes ( ) . to_vec ( ) ) ;
225- let actual_plain_data = dataset. decrypt_dataset ( & encrypted_data, 3 ) ;
241+ let actual_plain_data = dataset. decrypt_dataset ( & encrypted_data) ;
226242
227243 assert_eq ! ( actual_plain_data, expected_plain_data) ;
228244 }
@@ -231,14 +247,15 @@ mod tests {
231247 fn decrypt_dataset_failure_with_bad_key ( ) {
232248 let mut dataset = get_test_dataset ( ) ;
233249 dataset. key = "bad_key" . to_string ( ) ;
234- let encrypted_data = dataset
235- . download_encrypted_dataset ( CHAIN_TASK_ID , 55 )
236- . unwrap ( ) ;
237- let actual_plain_data = dataset. decrypt_dataset ( & encrypted_data, 55 ) ;
250+ dataset. address = "0xbadkey" . to_string ( ) ;
251+ let encrypted_data = dataset. download_encrypted_dataset ( CHAIN_TASK_ID ) . unwrap ( ) ;
252+ let actual_plain_data = dataset. decrypt_dataset ( & encrypted_data) ;
238253
239254 assert_eq ! (
240255 actual_plain_data,
241- Err ( ReplicateStatusCause :: PreComputeDatasetDecryptionFailed ( 55 ) )
256+ Err ( ReplicateStatusCause :: PreComputeDatasetDecryptionFailed (
257+ "0xbadkey" . to_string( )
258+ ) )
242259 ) ;
243260 }
244261 // endregion
0 commit comments