Skip to main contentThe following types are supported:
u8, u16, u32, u64, u128, usize, i8, i16, i32, i64, i128, isize
f64, f32 (Note: these types are emulated by the fixed-point numbers k-2^-52, for k between -2^250 and 2^250.)
- tuples of supported types, including
()
- fixed-length arrays of a supported type
- (mutable) references to a supported type
- user-defined structs of supported types
- functions (but not as input or output of an encrypted instruction)
ArcisPublicKey, an Arcis public key wrapper.
- Arcis-defined
Enc, Mxe and Shared.
In particular, we do not currently support HashMap, Vec, String (we do not support types with a variable len). Constant-size byte strings (like b"hello_world") are supported.
Here, Enc type defines the encrypted data input, which is used as Enc<Owner, T> where Owner can be either Mxe or Shared, signaling which party the data of type T can be decrypted by. You can read more about dealing with encrypted inputs/outputs here.
Note: Currently all these types get mapped to secret shares over the curve25519 scalar field under the hood, meaning they all take up the same amount of space. Changing this for better space utilization is on the roadmap and will be implemented soon.