use cfg_if::cfg_if;
cfg_if! {
if #[cfg(zisk_guest)] {
use core::arch::asm;
use crate::{
ziskos_fcall, ziskos_fcall_param,
zisklib::{FCALL_BLS12_381_TWIST_ADD_LINE_COEFFS_ID, FCALL_BLS12_381_TWIST_DBL_LINE_COEFFS_ID},
};
#[cfg(not(feature = "inputcpy"))]
use crate::ziskos_fcall_get;
#[cfg(feature = "inputcpy")]
use crate::ziskos_inputcpy;
} else {
use crate::zisklib::fcalls_impl::bls12_381::{bls12_381_twist_add_line_coeffs, bls12_381_twist_dbl_line_coeffs};
}
}
#[allow(unused_variables)]
pub fn fcall_bls12_381_twist_add_line_coeffs(
p1: &[u64; 24],
p2: &[u64; 24],
#[cfg(feature = "hints")] hints: &mut Vec<u64>,
) -> ([u64; 12], [u64; 12]) {
#[cfg(not(zisk_guest))]
{
let x1: [u64; 12] = p1[0..12].try_into().unwrap();
let y1: [u64; 12] = p1[12..24].try_into().unwrap();
let x2: [u64; 12] = p2[0..12].try_into().unwrap();
let y2: [u64; 12] = p2[12..24].try_into().unwrap();
let (lambda, mu): ([u64; 12], [u64; 12]) =
bls12_381_twist_add_line_coeffs(&x1, &y1, &x2, &y2);
#[cfg(feature = "hints")]
{
hints.push(24);
hints.extend_from_slice(&lambda);
hints.extend_from_slice(&mu);
}
(lambda, mu)
}
#[cfg(zisk_guest)]
{
ziskos_fcall_param!(p1, 24);
ziskos_fcall_param!(p2, 24);
ziskos_fcall!(FCALL_BLS12_381_TWIST_ADD_LINE_COEFFS_ID);
#[cfg(not(feature = "inputcpy"))]
{
(
[
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
],
[
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
],
)
}
#[cfg(feature = "inputcpy")]
{
use core::mem::MaybeUninit;
let mut lambda: MaybeUninit<[u64; 12]> = MaybeUninit::uninit();
ziskos_inputcpy!(lambda, 12 * 8);
let mut mu: MaybeUninit<[u64; 12]> = MaybeUninit::uninit();
ziskos_inputcpy!(mu, 12 * 8);
(unsafe { lambda.assume_init() }, unsafe { mu.assume_init() })
}
}
}
#[allow(unused_variables)]
pub fn fcall_bls12_381_twist_dbl_line_coeffs(
p: &[u64; 24],
#[cfg(feature = "hints")] hints: &mut Vec<u64>,
) -> ([u64; 12], [u64; 12]) {
#[cfg(not(zisk_guest))]
{
let x: [u64; 12] = p[0..12].try_into().unwrap();
let y: [u64; 12] = p[12..24].try_into().unwrap();
let (lambda, mu): ([u64; 12], [u64; 12]) = bls12_381_twist_dbl_line_coeffs(&x, &y);
#[cfg(feature = "hints")]
{
hints.push(24);
hints.extend_from_slice(&lambda);
hints.extend_from_slice(&mu);
}
(lambda, mu)
}
#[cfg(zisk_guest)]
{
ziskos_fcall_param!(p, 24);
ziskos_fcall!(FCALL_BLS12_381_TWIST_DBL_LINE_COEFFS_ID);
#[cfg(not(feature = "inputcpy"))]
{
(
[
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
],
[
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
ziskos_fcall_get(),
],
)
}
#[cfg(feature = "inputcpy")]
{
use core::mem::MaybeUninit;
let mut lambda: MaybeUninit<[u64; 12]> = MaybeUninit::uninit();
ziskos_inputcpy!(lambda, 12 * 8);
let mut mu: MaybeUninit<[u64; 12]> = MaybeUninit::uninit();
ziskos_inputcpy!(mu, 12 * 8);
(unsafe { lambda.assume_init() }, unsafe { mu.assume_init() })
}
}
}