feat(runtime): implement verifyEcdsaSecp256k1Signature

This commit is contained in:
rvcas 2023-02-04 16:26:05 -05:00 committed by Lucas
parent d224fe5356
commit c2ff9389c5
1 changed files with 26 additions and 1 deletions

View File

@ -674,7 +674,32 @@ impl DefaultFunction {
_ => unreachable!(),
}
}
DefaultFunction::VerifyEcdsaSecp256k1Signature => todo!(),
DefaultFunction::VerifyEcdsaSecp256k1Signature => {
match (args[0].as_ref(), args[1].as_ref(), args[2].as_ref()) {
(Value::Con(public_key), Value::Con(message), Value::Con(signature)) => {
match (public_key.as_ref(), message.as_ref(), signature.as_ref()) {
(
Constant::ByteString(public_key),
Constant::ByteString(message),
Constant::ByteString(signature),
) => {
use k256::ecdsa::{self, signature::Verifier};
let verifying_key =
ecdsa::VerifyingKey::try_from(public_key.as_slice())?;
let signature = ecdsa::Signature::try_from(signature.as_slice())?;
let valid = verifying_key.verify(message, &signature);
Ok(Value::Con(Constant::Bool(valid.is_ok()).into()).into())
}
_ => unreachable!(),
}
}
_ => unreachable!(),
}
}
DefaultFunction::VerifySchnorrSecp256k1Signature => todo!(),
DefaultFunction::AppendString => match (args[0].as_ref(), args[1].as_ref()) {
(Value::Con(string1), Value::Con(string2)) => {