use crate::{opcodes::HeapVector, HeapArray, MemoryAddress};
use serde::{Deserialize, Serialize};
#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
pub enum BlackBoxOp {
AES128Encrypt {
inputs: HeapVector,
iv: HeapArray,
key: HeapArray,
outputs: HeapVector,
},
Sha256 {
message: HeapVector,
output: HeapArray,
},
Blake2s {
message: HeapVector,
output: HeapArray,
},
Blake3 {
message: HeapVector,
output: HeapArray,
},
Keccak256 {
message: HeapVector,
output: HeapArray,
},
Keccakf1600 {
message: HeapVector,
output: HeapArray,
},
EcdsaSecp256k1 {
hashed_msg: HeapVector,
public_key_x: HeapArray,
public_key_y: HeapArray,
signature: HeapArray,
result: MemoryAddress,
},
EcdsaSecp256r1 {
hashed_msg: HeapVector,
public_key_x: HeapArray,
public_key_y: HeapArray,
signature: HeapArray,
result: MemoryAddress,
},
SchnorrVerify {
public_key_x: MemoryAddress,
public_key_y: MemoryAddress,
message: HeapVector,
signature: HeapVector,
result: MemoryAddress,
},
PedersenCommitment {
inputs: HeapVector,
domain_separator: MemoryAddress,
output: HeapArray,
},
PedersenHash {
inputs: HeapVector,
domain_separator: MemoryAddress,
output: MemoryAddress,
},
MultiScalarMul {
points: HeapVector,
scalars: HeapVector,
outputs: HeapArray,
},
EmbeddedCurveAdd {
input1_x: MemoryAddress,
input1_y: MemoryAddress,
input2_x: MemoryAddress,
input2_y: MemoryAddress,
result: HeapArray,
},
BigIntAdd {
lhs: MemoryAddress,
rhs: MemoryAddress,
output: MemoryAddress,
},
BigIntSub {
lhs: MemoryAddress,
rhs: MemoryAddress,
output: MemoryAddress,
},
BigIntMul {
lhs: MemoryAddress,
rhs: MemoryAddress,
output: MemoryAddress,
},
BigIntDiv {
lhs: MemoryAddress,
rhs: MemoryAddress,
output: MemoryAddress,
},
BigIntFromLeBytes {
inputs: HeapVector,
modulus: HeapVector,
output: MemoryAddress,
},
BigIntToLeBytes {
input: MemoryAddress,
output: HeapVector,
},
Poseidon2Permutation {
message: HeapVector,
output: HeapArray,
len: MemoryAddress,
},
Sha256Compression {
input: HeapVector,
hash_values: HeapVector,
output: HeapArray,
},
}