Skip to content

Commit e348516

Browse files
committed
Create constants ED25519_VERIFY_CODE_{IN,}VALID and SECP256K1_VERIFY_CODE_{IN,}VALID
1 parent 2534999 commit e348516

File tree

1 file changed

+45
-14
lines changed

1 file changed

+45
-14
lines changed

packages/vm/src/imports.rs

Lines changed: 45 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -212,6 +212,12 @@ pub fn do_addr_humanize<A: BackendApi, S: Storage, Q: Querier>(
212212
}
213213
}
214214

215+
/// Return code (error code) for a valid signature
216+
const SECP256K1_VERIFY_CODE_VALID: u32 = 0;
217+
218+
/// Return code (error code) for an invalid signature
219+
const SECP256K1_VERIFY_CODE_INVALID: u32 = 1;
220+
215221
pub fn do_secp256k1_verify<A: BackendApi, S: Storage, Q: Querier>(
216222
env: &Environment<A, S, Q>,
217223
hash_ptr: u32,
@@ -225,9 +231,15 @@ pub fn do_secp256k1_verify<A: BackendApi, S: Storage, Q: Querier>(
225231
let gas_info = GasInfo::with_cost(env.gas_config.secp256k1_verify_cost);
226232
process_gas_info::<A, S, Q>(env, gas_info)?;
227233
let result = secp256k1_verify(&hash, &signature, &pubkey);
228-
#[allow(clippy::bool_to_int_with_if)]
229-
Ok(result.map_or_else(
230-
|err| match err {
234+
let code = match result {
235+
Ok(valid) => {
236+
if valid {
237+
SECP256K1_VERIFY_CODE_VALID
238+
} else {
239+
SECP256K1_VERIFY_CODE_INVALID
240+
}
241+
}
242+
Err(err) => match err {
231243
CryptoError::InvalidHashFormat { .. }
232244
| CryptoError::InvalidPubkeyFormat { .. }
233245
| CryptoError::InvalidSignatureFormat { .. }
@@ -236,8 +248,8 @@ pub fn do_secp256k1_verify<A: BackendApi, S: Storage, Q: Querier>(
236248
panic!("Error must not happen for this call")
237249
}
238250
},
239-
|valid| if valid { 0 } else { 1 },
240-
))
251+
};
252+
Ok(code)
241253
}
242254

243255
pub fn do_secp256k1_recover_pubkey<A: BackendApi, S: Storage, Q: Querier>(
@@ -273,6 +285,12 @@ pub fn do_secp256k1_recover_pubkey<A: BackendApi, S: Storage, Q: Querier>(
273285
}
274286
}
275287

288+
/// Return code (error code) for a valid signature
289+
const ED25519_VERIFY_CODE_VALID: u32 = 0;
290+
291+
/// Return code (error code) for an invalid signature
292+
const ED25519_VERIFY_CODE_INVALID: u32 = 1;
293+
276294
pub fn do_ed25519_verify<A: BackendApi, S: Storage, Q: Querier>(
277295
env: &Environment<A, S, Q>,
278296
message_ptr: u32,
@@ -286,9 +304,15 @@ pub fn do_ed25519_verify<A: BackendApi, S: Storage, Q: Querier>(
286304
let gas_info = GasInfo::with_cost(env.gas_config.ed25519_verify_cost);
287305
process_gas_info::<A, S, Q>(env, gas_info)?;
288306
let result = ed25519_verify(&message, &signature, &pubkey);
289-
#[allow(clippy::bool_to_int_with_if)]
290-
Ok(result.map_or_else(
291-
|err| match err {
307+
let code = match result {
308+
Ok(valid) => {
309+
if valid {
310+
ED25519_VERIFY_CODE_VALID
311+
} else {
312+
ED25519_VERIFY_CODE_INVALID
313+
}
314+
}
315+
Err(err) => match err {
292316
CryptoError::InvalidPubkeyFormat { .. }
293317
| CryptoError::InvalidSignatureFormat { .. }
294318
| CryptoError::GenericErr { .. } => err.code(),
@@ -298,8 +322,8 @@ pub fn do_ed25519_verify<A: BackendApi, S: Storage, Q: Querier>(
298322
panic!("Error must not happen for this call")
299323
}
300324
},
301-
|valid| if valid { 0 } else { 1 },
302-
))
325+
};
326+
Ok(code)
303327
}
304328

305329
pub fn do_ed25519_batch_verify<A: BackendApi, S: Storage, Q: Querier>(
@@ -336,8 +360,15 @@ pub fn do_ed25519_batch_verify<A: BackendApi, S: Storage, Q: Querier>(
336360
let gas_info = GasInfo::with_cost(max(gas_cost, env.gas_config.ed25519_verify_cost));
337361
process_gas_info::<A, S, Q>(env, gas_info)?;
338362
let result = ed25519_batch_verify(&messages, &signatures, &public_keys);
339-
Ok(result.map_or_else(
340-
|err| match err {
363+
let code = match result {
364+
Ok(valid) => {
365+
if valid {
366+
ED25519_VERIFY_CODE_VALID
367+
} else {
368+
ED25519_VERIFY_CODE_INVALID
369+
}
370+
}
371+
Err(err) => match err {
341372
CryptoError::BatchErr { .. }
342373
| CryptoError::InvalidPubkeyFormat { .. }
343374
| CryptoError::InvalidSignatureFormat { .. }
@@ -346,8 +377,8 @@ pub fn do_ed25519_batch_verify<A: BackendApi, S: Storage, Q: Querier>(
346377
panic!("Error must not happen for this call")
347378
}
348379
},
349-
|valid| (!valid).into(),
350-
))
380+
};
381+
Ok(code)
351382
}
352383

353384
/// Prints a debug message to console.

0 commit comments

Comments
 (0)