pub mod bls12381;
pub mod bn254;
#[cfg(feature = "ecdsa")]
pub mod ecdsa;
pub mod ed25519;
pub mod io;
pub mod mprotect;
pub mod poseidon2;
pub mod secp256k1;
pub mod secp256r1;
pub mod unconstrained;
pub mod utils;
#[cfg(feature = "verify")]
pub mod verify;
#[inline(never)]
pub fn halt_invalid_hint() -> ! {
unsafe { syscall_halt(3) }
}
#[doc(hidden)]
#[cold]
#[inline(never)]
pub fn __invalid_hint_fmt(args: std::fmt::Arguments<'_>) -> ! {
let msg = std::format!("invalid prover hint: {}\n", args);
unsafe {
syscall_write(2, msg.as_ptr(), msg.len());
}
halt_invalid_hint()
}
#[macro_export]
macro_rules! invalid_hint {
() => {{
$crate::halt_invalid_hint()
}};
($($arg:tt)*) => {{
$crate::__invalid_hint_fmt(::core::format_args!($($arg)*))
}};
}
extern "C" {
pub fn syscall_halt(exit_code: u8) -> !;
pub fn syscall_write(fd: u32, write_buf: *const u8, nbytes: usize);
pub fn syscall_read(fd: u32, read_buf: *mut u8, nbytes: usize);
pub fn syscall_sha256_extend(w: *mut [u64; 64]);
pub fn syscall_sha256_compress(w: *mut [u64; 64], state: *mut [u64; 8]);
pub fn syscall_ed_add(p: *mut [u64; 8], q: *const [u64; 8]);
pub fn syscall_ed_decompress(point: &mut [u64; 8]);
pub fn syscall_secp256k1_add(p: *mut [u64; 8], q: *const [u64; 8]);
pub fn syscall_secp256k1_double(p: *mut [u64; 8]);
pub fn syscall_secp256k1_decompress(point: &mut [u64; 8], is_odd: bool);
pub fn syscall_secp256r1_add(p: *mut [u64; 8], q: *const [u64; 8]);
pub fn syscall_secp256r1_double(p: *mut [u64; 8]);
pub fn syscall_secp256r1_decompress(point: &mut [u64; 8], is_odd: bool);
pub fn syscall_bn254_add(p: *mut [u64; 8], q: *const [u64; 8]);
pub fn syscall_bn254_double(p: *mut [u64; 8]);
pub fn syscall_bls12381_add(p: *mut [u64; 12], q: *const [u64; 12]);
pub fn syscall_bls12381_double(p: *mut [u64; 12]);
pub fn syscall_keccak_permute(state: *mut [u64; 25]);
pub fn syscall_uint256_mulmod(x: *mut [u64; 4], y: *const [u64; 4]);
pub fn syscall_u256x2048_mul(
x: *const [u64; 4],
y: *const [u64; 32],
lo: *mut [u64; 32],
hi: *mut [u64; 4],
);
pub fn syscall_uint256_add_with_carry(
a: *const [u64; 4],
b: *const [u64; 4],
c: *const [u64; 4],
d: *mut [u64; 4],
e: *mut [u64; 4],
);
pub fn syscall_uint256_mul_with_carry(
a: *const [u64; 4],
b: *const [u64; 4],
c: *const [u64; 4],
d: *mut [u64; 4],
e: *mut [u64; 4],
);
pub fn syscall_enter_unconstrained() -> bool;
pub fn syscall_exit_unconstrained();
pub fn syscall_verify_sp1_proof(vk_digest: &[u64; 4], pv_digest: &[u64; 4]);
pub fn syscall_hint_len() -> usize;
pub fn syscall_hint_read(ptr: *mut u8, len: usize);
pub fn sys_alloc_aligned(bytes: usize, align: usize) -> *mut u8;
pub fn syscall_bls12381_decompress(point: &mut [u64; 12], is_odd: bool);
pub fn sys_bigint(
result: *mut [u64; 4],
op: u64,
x: *const [u64; 4],
y: *const [u64; 4],
modulus: *const [u64; 4],
);
pub fn syscall_bls12381_fp_addmod(p: *mut u64, q: *const u64);
pub fn syscall_bls12381_fp_submod(p: *mut u64, q: *const u64);
pub fn syscall_bls12381_fp_mulmod(p: *mut u64, q: *const u64);
pub fn syscall_bls12381_fp2_addmod(p: *mut u64, q: *const u64);
pub fn syscall_bls12381_fp2_submod(p: *mut u64, q: *const u64);
pub fn syscall_bls12381_fp2_mulmod(p: *mut u64, q: *const u64);
pub fn syscall_bn254_fp_addmod(p: *mut u64, q: *const u64);
pub fn syscall_bn254_fp_submod(p: *mut u64, q: *const u64);
pub fn syscall_bn254_fp_mulmod(p: *mut u64, q: *const u64);
pub fn syscall_bn254_fp2_addmod(p: *mut u64, q: *const u64);
pub fn syscall_bn254_fp2_submod(p: *mut u64, q: *const u64);
pub fn syscall_bn254_fp2_mulmod(p: *mut u64, q: *const u64);
pub fn syscall_mprotect(addr: *const u8, prot: u8);
pub fn syscall_mprotect_flush();
pub fn read_vec_raw() -> ReadVecResult;
pub fn syscall_poseidon2(inout: &mut crate::poseidon2::Poseidon2State);
}
#[repr(C)]
pub struct ReadVecResult {
pub ptr: *mut u8,
pub len: usize,
pub capacity: usize,
}