1pub mod bls12381;
7pub mod bn254;
8
9#[cfg(feature = "ecdsa")]
10pub mod ecdsa;
11
12pub mod ed25519;
13pub mod io;
14pub mod mprotect;
15pub mod poseidon2;
16pub mod secp256k1;
17pub mod secp256r1;
18pub mod unconstrained;
19pub mod utils;
20
21#[cfg(feature = "verify")]
22pub mod verify;
23
24extern "C" {
25 pub fn syscall_halt(exit_code: u8) -> !;
27
28 pub fn syscall_write(fd: u32, write_buf: *const u8, nbytes: usize);
30
31 pub fn syscall_read(fd: u32, read_buf: *mut u8, nbytes: usize);
33
34 pub fn syscall_sha256_extend(w: *mut [u64; 64]);
36
37 pub fn syscall_sha256_compress(w: *mut [u64; 64], state: *mut [u64; 8]);
39
40 pub fn syscall_ed_add(p: *mut [u64; 8], q: *const [u64; 8]);
42
43 pub fn syscall_ed_decompress(point: &mut [u64; 8]);
45
46 pub fn syscall_secp256k1_add(p: *mut [u64; 8], q: *const [u64; 8]);
48
49 pub fn syscall_secp256k1_double(p: *mut [u64; 8]);
51
52 pub fn syscall_secp256k1_decompress(point: &mut [u64; 8], is_odd: bool);
54
55 pub fn syscall_secp256r1_add(p: *mut [u64; 8], q: *const [u64; 8]);
57
58 pub fn syscall_secp256r1_double(p: *mut [u64; 8]);
60
61 pub fn syscall_secp256r1_decompress(point: &mut [u64; 8], is_odd: bool);
63
64 pub fn syscall_bn254_add(p: *mut [u64; 8], q: *const [u64; 8]);
66
67 pub fn syscall_bn254_double(p: *mut [u64; 8]);
69
70 pub fn syscall_bls12381_add(p: *mut [u64; 12], q: *const [u64; 12]);
72
73 pub fn syscall_bls12381_double(p: *mut [u64; 12]);
75
76 pub fn syscall_keccak_permute(state: *mut [u64; 25]);
78
79 pub fn syscall_uint256_mulmod(x: *mut [u64; 4], y: *const [u64; 4]);
81
82 pub fn syscall_u256x2048_mul(
84 x: *const [u64; 4],
85 y: *const [u64; 32],
86 lo: *mut [u64; 32],
87 hi: *mut [u64; 4],
88 );
89
90 pub fn syscall_uint256_add_with_carry(
92 a: *const [u64; 4],
93 b: *const [u64; 4],
94 c: *const [u64; 4],
95 d: *mut [u64; 4],
96 e: *mut [u64; 4],
97 );
98
99 pub fn syscall_uint256_mul_with_carry(
101 a: *const [u64; 4],
102 b: *const [u64; 4],
103 c: *const [u64; 4],
104 d: *mut [u64; 4],
105 e: *mut [u64; 4],
106 );
107
108 pub fn syscall_enter_unconstrained() -> bool;
110
111 pub fn syscall_exit_unconstrained();
113
114 pub fn syscall_verify_sp1_proof(vk_digest: &[u64; 4], pv_digest: &[u64; 4]);
116
117 pub fn syscall_hint_len() -> usize;
119
120 pub fn syscall_hint_read(ptr: *mut u8, len: usize);
122
123 pub fn sys_alloc_aligned(bytes: usize, align: usize) -> *mut u8;
125
126 pub fn syscall_bls12381_decompress(point: &mut [u64; 12], is_odd: bool);
128
129 pub fn sys_bigint(
131 result: *mut [u64; 4],
132 op: u64,
133 x: *const [u64; 4],
134 y: *const [u64; 4],
135 modulus: *const [u64; 4],
136 );
137
138 pub fn syscall_bls12381_fp_addmod(p: *mut u64, q: *const u64);
140
141 pub fn syscall_bls12381_fp_submod(p: *mut u64, q: *const u64);
143
144 pub fn syscall_bls12381_fp_mulmod(p: *mut u64, q: *const u64);
146
147 pub fn syscall_bls12381_fp2_addmod(p: *mut u64, q: *const u64);
149
150 pub fn syscall_bls12381_fp2_submod(p: *mut u64, q: *const u64);
152
153 pub fn syscall_bls12381_fp2_mulmod(p: *mut u64, q: *const u64);
155
156 pub fn syscall_bn254_fp_addmod(p: *mut u64, q: *const u64);
158
159 pub fn syscall_bn254_fp_submod(p: *mut u64, q: *const u64);
161
162 pub fn syscall_bn254_fp_mulmod(p: *mut u64, q: *const u64);
164
165 pub fn syscall_bn254_fp2_addmod(p: *mut u64, q: *const u64);
167
168 pub fn syscall_bn254_fp2_submod(p: *mut u64, q: *const u64);
170
171 pub fn syscall_bn254_fp2_mulmod(p: *mut u64, q: *const u64);
173
174 pub fn syscall_mprotect(addr: *const u8, prot: u8);
176
177 pub fn read_vec_raw() -> ReadVecResult;
179
180 pub fn syscall_poseidon2(inout: &mut crate::poseidon2::Poseidon2State);
182}
183
184#[repr(C)]
185pub struct ReadVecResult {
186 pub ptr: *mut u8,
187 pub len: usize,
188 pub capacity: usize,
189}