1use crate::{syscall_handler::*, RuntimeContextWrapper};
2use fluentbase_types::{
3 CryptoAPI, UnwrapExitCode, BLS12381_FP_SIZE, BLS12381_G1_COMPRESSED_SIZE,
4 BLS12381_G1_RAW_AFFINE_SIZE, BN254_FP_SIZE, BN254_G1_RAW_AFFINE_SIZE,
5 ED25519_POINT_COMPRESSED_SIZE, ED25519_POINT_DECOMPRESSED_SIZE, SECP256K1_G1_COMPRESSED_SIZE,
6 SECP256K1_G1_RAW_AFFINE_SIZE, SECP256R1_G1_COMPRESSED_SIZE, SECP256R1_G1_RAW_AFFINE_SIZE,
7};
8
9#[rustfmt::skip]
10impl CryptoAPI for RuntimeContextWrapper {
11 #[inline(always)]
12 fn keccak256_permute(state: &mut [u64; 25]) {
13 syscall_hashing_keccak256_permute_impl(state);
14 }
15 #[inline(always)]
16 fn sha256_extend(w: &mut [u32; 64]) {
17 syscall_hashing_sha256_extend_impl(w);
18 }
19 #[inline(always)]
20 fn sha256_compress(state: &mut [u32; 8], w: &[u32; 64]) {
21 syscall_hashing_sha256_compress_impl(state, w);
22 }
23
24 #[inline(always)]
25 fn ed25519_decompress(y: [u8; ED25519_POINT_COMPRESSED_SIZE], sign: u32) -> [u8; ED25519_POINT_DECOMPRESSED_SIZE] {
26 syscall_ed25519_decompress_impl(y, sign).unwrap_exit_code()
27 }
28 #[inline(always)]
29 fn ed25519_add(p: [u8; ED25519_POINT_DECOMPRESSED_SIZE], q: [u8; ED25519_POINT_DECOMPRESSED_SIZE]) -> [u8; ED25519_POINT_DECOMPRESSED_SIZE] {
30 syscall_edwards_add_impl(p, q).unwrap_exit_code()
31 }
32
33 #[inline(always)]
34 fn tower_fp1_bn254_add(x: [u8; BN254_FP_SIZE], y: [u8; BN254_FP_SIZE]) -> [u8; BN254_FP_SIZE] {
35 syscall_tower_fp1_bn254_add_impl(x, y).unwrap_exit_code()
36 }
37 #[inline(always)]
38 fn tower_fp1_bn254_sub(x: [u8; BN254_FP_SIZE], y: [u8; BN254_FP_SIZE]) -> [u8; BN254_FP_SIZE] {
39 syscall_tower_fp1_bn254_sub_impl(x, y).unwrap_exit_code()
40 }
41 #[inline(always)]
42 fn tower_fp1_bn254_mul(x: [u8; BN254_FP_SIZE], y: [u8; BN254_FP_SIZE]) -> [u8; BN254_FP_SIZE] {
43 syscall_tower_fp1_bn254_mul_impl(x, y).unwrap_exit_code()
44 }
45 #[inline(always)]
46 fn tower_fp1_bls12381_add(x: [u8; BLS12381_FP_SIZE], y: [u8; BLS12381_FP_SIZE]) -> [u8; BLS12381_FP_SIZE] {
47 syscall_tower_fp1_bls12381_add_impl(x, y).unwrap_exit_code()
48 }
49 #[inline(always)]
50 fn tower_fp1_bls12381_sub(x: [u8; BLS12381_FP_SIZE], y: [u8; BLS12381_FP_SIZE]) -> [u8; BLS12381_FP_SIZE] {
51 syscall_tower_fp1_bls12381_sub_impl(x, y).unwrap_exit_code()
52 }
53 #[inline(always)]
54 fn tower_fp1_bls12381_mul(x: [u8; BLS12381_FP_SIZE], y: [u8; BLS12381_FP_SIZE]) -> [u8; BLS12381_FP_SIZE] {
55 syscall_tower_fp1_bls12381_mul_impl(x, y).unwrap_exit_code()
56 }
57 #[inline(always)]
58 fn tower_fp2_bn254_add(a_c0: [u8; BN254_FP_SIZE], a_c1: [u8; BN254_FP_SIZE], b_c0: [u8; BN254_FP_SIZE], b_c1: [u8; BN254_FP_SIZE]) -> ([u8; BN254_FP_SIZE], [u8; BN254_FP_SIZE]) {
59 syscall_tower_fp2_bn254_add_impl(a_c0, a_c1, b_c0, b_c1).unwrap_exit_code()
60 }
61 #[inline(always)]
62 fn tower_fp2_bn254_sub(a_c0: [u8; BN254_FP_SIZE], a_c1: [u8; BN254_FP_SIZE], b_c0: [u8; BN254_FP_SIZE], b_c1: [u8; BN254_FP_SIZE]) -> ([u8; BN254_FP_SIZE], [u8; BN254_FP_SIZE]) {
63 syscall_tower_fp2_bn254_sub_impl(a_c0, a_c1, b_c0, b_c1).unwrap_exit_code()
64 }
65 #[inline(always)]
66 fn tower_fp2_bn254_mul(a_c0: [u8; BN254_FP_SIZE], a_c1: [u8; BN254_FP_SIZE], b_c0: [u8; BN254_FP_SIZE], b_c1: [u8; BN254_FP_SIZE]) -> ([u8; BN254_FP_SIZE], [u8; BN254_FP_SIZE]) {
67 syscall_tower_fp2_bn254_mul_impl(a_c0, a_c1, b_c0, b_c1).unwrap_exit_code()
68 }
69 #[inline(always)]
70 fn tower_fp2_bls12381_add(a_c0: [u8; BLS12381_FP_SIZE], a_c1: [u8; BLS12381_FP_SIZE], b_c0: [u8; BLS12381_FP_SIZE], b_c1: [u8; BLS12381_FP_SIZE]) -> ([u8; BLS12381_FP_SIZE], [u8; BLS12381_FP_SIZE]) {
71 syscall_tower_fp2_bls12381_add_impl(a_c0, a_c1, b_c0, b_c1).unwrap_exit_code()
72 }
73 #[inline(always)]
74 fn tower_fp2_bls12381_sub(a_c0: [u8; BLS12381_FP_SIZE], a_c1: [u8; BLS12381_FP_SIZE], b_c0: [u8; BLS12381_FP_SIZE], b_c1: [u8; BLS12381_FP_SIZE]) -> ([u8; BLS12381_FP_SIZE], [u8; BLS12381_FP_SIZE]) {
75 syscall_tower_fp2_bls12381_sub_impl(a_c0, a_c1, b_c0, b_c1).unwrap_exit_code()
76 }
77 #[inline(always)]
78 fn tower_fp2_bls12381_mul(a_c0: [u8; BLS12381_FP_SIZE], a_c1: [u8; BLS12381_FP_SIZE], b_c0: [u8; BLS12381_FP_SIZE], b_c1: [u8; BLS12381_FP_SIZE]) -> ([u8; BLS12381_FP_SIZE], [u8; BLS12381_FP_SIZE]) {
79 syscall_tower_fp2_bls12381_mul_impl(a_c0, a_c1, b_c0, b_c1).unwrap_exit_code()
80 }
81
82 #[inline(always)]
83 fn secp256k1_add(p: [u8; SECP256K1_G1_RAW_AFFINE_SIZE], q: [u8; SECP256K1_G1_RAW_AFFINE_SIZE]) -> [u8; SECP256K1_G1_RAW_AFFINE_SIZE] {
84 syscall_secp256k1_add_impl(p, q).unwrap_exit_code()
85 }
86 #[inline(always)]
87 fn secp256k1_decompress(mut x: [u8; SECP256K1_G1_COMPRESSED_SIZE], sign: u32) -> [u8; SECP256K1_G1_RAW_AFFINE_SIZE] {
88 x.reverse();
89 let mut result = syscall_secp256k1_decompress_impl(x, sign).unwrap_exit_code();
90 result.reverse();
91 result
92 }
93 #[inline(always)]
94 fn secp256k1_double(p: [u8; SECP256K1_G1_RAW_AFFINE_SIZE]) -> [u8; SECP256K1_G1_RAW_AFFINE_SIZE] {
95 syscall_secp256k1_double_impl(p).unwrap_exit_code()
96 }
97
98 #[inline(always)]
99 fn secp256r1_add(p: [u8; SECP256R1_G1_RAW_AFFINE_SIZE], q: [u8; SECP256R1_G1_RAW_AFFINE_SIZE]) -> [u8; SECP256R1_G1_RAW_AFFINE_SIZE] {
100 syscall_secp256r1_add_impl(p, q).unwrap_exit_code()
101 }
102 #[inline(always)]
103 fn secp256r1_decompress(mut x: [u8; SECP256R1_G1_COMPRESSED_SIZE], sign: u32) -> [u8; SECP256R1_G1_RAW_AFFINE_SIZE] {
104 x.reverse();
105 let mut result = syscall_secp256r1_decompress_impl(x, sign).unwrap_exit_code();
106 result.reverse();
107 result
108 }
109 #[inline(always)]
110 fn secp256r1_double(p: [u8; SECP256R1_G1_RAW_AFFINE_SIZE]) -> [u8; SECP256R1_G1_RAW_AFFINE_SIZE] {
111 syscall_secp256r1_double_impl(p).unwrap_exit_code()
112 }
113
114 #[inline(always)]
115 fn bls12381_add(p: [u8; BLS12381_G1_RAW_AFFINE_SIZE], q: [u8; BLS12381_G1_RAW_AFFINE_SIZE]) -> [u8; BLS12381_G1_RAW_AFFINE_SIZE] {
116 syscall_bls12381_add_impl(p, q).unwrap_exit_code()
117 }
118 #[inline(always)]
119 fn bls12381_decompress(mut x: [u8; BLS12381_G1_COMPRESSED_SIZE], sign: u32) -> [u8; BLS12381_G1_RAW_AFFINE_SIZE] {
120 x.reverse();
121 let mut result = syscall_bls12381_decompress_impl(x, sign).unwrap_exit_code();
122 result.reverse();
123 result
124 }
125 #[inline(always)]
126 fn bls12381_double(p: [u8; BLS12381_G1_RAW_AFFINE_SIZE]) -> [u8; BLS12381_G1_RAW_AFFINE_SIZE] {
127 syscall_bls12381_double_impl(p).unwrap_exit_code()
128 }
129
130 #[inline(always)]
131 fn bn254_add(p: [u8; BN254_G1_RAW_AFFINE_SIZE], q: [u8; BN254_G1_RAW_AFFINE_SIZE]) -> [u8; BN254_G1_RAW_AFFINE_SIZE] {
132 syscall_bn254_add_impl(p, q).unwrap_exit_code()
133 }
134 #[inline(always)]
135 fn bn254_double(p: [u8; BN254_G1_RAW_AFFINE_SIZE]) -> [u8; BN254_G1_RAW_AFFINE_SIZE] {
136 syscall_bn254_double_impl(p).unwrap_exit_code()
137 }
138
139 #[inline(always)]
140 fn uint256_mul_mod(x: &[u8; 32], y: &[u8; 32], m: &[u8; 32]) -> [u8; 32] {
141 syscall_uint256_mul_mod_impl(x, y, m)
142 }
143 #[inline(always)]
144 fn uint256_x2048_mul(a: &[u8; 32], b: &[u8; 256]) -> ([u8; 256], [u8; 32]) {
145 syscall_uint256_x2048_mul_impl(a, b)
146 }
147}