use crate::types::{
intern::{FheLiteral, FheProgramNode},
Cipher, FheType,
};
pub trait GraphCipherSub {
type Left: FheType;
type Right: FheType;
fn graph_cipher_sub(
a: FheProgramNode<Cipher<Self::Left>>,
b: FheProgramNode<Cipher<Self::Right>>,
) -> FheProgramNode<Cipher<Self::Left>>;
}
pub trait GraphCipherPlainSub {
type Left: FheType;
type Right: FheType;
fn graph_cipher_plain_sub(
a: FheProgramNode<Cipher<Self::Left>>,
b: FheProgramNode<Self::Right>,
) -> FheProgramNode<Cipher<Self::Left>>;
}
pub trait GraphPlainCipherSub {
type Left: FheType;
type Right: FheType;
fn graph_plain_cipher_sub(
a: FheProgramNode<Self::Left>,
b: FheProgramNode<Cipher<Self::Right>>,
) -> FheProgramNode<Cipher<Self::Left>>;
}
pub trait GraphCipherConstSub {
type Left: FheType;
type Right: FheLiteral + TryFrom<Self::Left>;
fn graph_cipher_const_sub(
a: FheProgramNode<Cipher<Self::Left>>,
b: Self::Right,
) -> FheProgramNode<Cipher<Self::Left>>;
}
pub trait GraphConstCipherSub {
type Left: FheLiteral + TryFrom<Self::Right>;
type Right: FheType;
fn graph_const_cipher_sub(
a: Self::Left,
b: FheProgramNode<Cipher<Self::Right>>,
) -> FheProgramNode<Cipher<Self::Right>>;
}