| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154 |
- /* This file is part of DarkFi (https://dark.fi)
- *
- * Copyright (C) 2020-2026 Dyne.org foundation
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
- /// Heap types in bincode & vm
- #[derive(Clone, Debug)]
- #[repr(u8)]
- pub enum HeapType {
- Var = 0x00,
- Lit = 0x01,
- }
- impl HeapType {
- pub fn from_repr(b: u8) -> Option<Self> {
- match b {
- 0x00 => Some(Self::Var),
- 0x01 => Some(Self::Lit),
- _ => None,
- }
- }
- }
- /// Variable types supported by the zkas VM
- #[derive(Copy, Clone, PartialEq, Eq, Debug)]
- #[repr(u8)]
- pub enum VarType {
- /// Dummy intermediate type
- Dummy = 0x00,
- /// Elliptic curve point
- EcPoint = 0x01,
- /// Elliptic curve fixed point (a constant)
- EcFixedPoint = 0x02,
- /// Elliptic curve fixed point short
- EcFixedPointShort = 0x03,
- /// Elliptic curve fixed point in base field
- EcFixedPointBase = 0x04,
- /// Elliptic curve nonidentity point
- EcNiPoint = 0x05,
- /// Base field element
- Base = 0x10,
- /// Base field element array
- BaseArray = 0x11,
- /// Scalar field element
- Scalar = 0x12,
- /// Scalar field element array
- ScalarArray = 0x13,
- /// Merkle tree path
- MerklePath = 0x20,
- /// Sparse merkle tree path
- SparseMerklePath = 0x21,
- /// Unsigned 32-bit integer
- Uint32 = 0x30,
- /// Unsigned 64-bit integer
- Uint64 = 0x31,
- /// Catch-all for any type
- Any = 0xff,
- }
- impl VarType {
- pub fn from_repr(b: u8) -> Option<Self> {
- match b {
- 0x01 => Some(Self::EcPoint),
- 0x02 => Some(Self::EcFixedPoint),
- 0x03 => Some(Self::EcFixedPointShort),
- 0x04 => Some(Self::EcFixedPointBase),
- 0x05 => Some(Self::EcNiPoint),
- 0x10 => Some(Self::Base),
- 0x11 => Some(Self::BaseArray),
- 0x12 => Some(Self::Scalar),
- 0x13 => Some(Self::ScalarArray),
- 0x20 => Some(Self::MerklePath),
- 0x21 => Some(Self::SparseMerklePath),
- 0x30 => Some(Self::Uint32),
- 0x31 => Some(Self::Uint64),
- 0xff => Some(Self::Any),
- _ => None,
- }
- }
- pub fn name(&self) -> &'static str {
- match self {
- Self::Dummy => "Dummy",
- Self::EcPoint => "EcPoint",
- Self::EcFixedPoint => "EcFixedPoint",
- Self::EcFixedPointShort => "EcFixedPointShort",
- Self::EcFixedPointBase => "EcFixedPointBase",
- Self::EcNiPoint => "EcNiPoint",
- Self::Base => "Base",
- Self::BaseArray => "BaseArray",
- Self::Scalar => "Scalar",
- Self::ScalarArray => "ScalarArray",
- Self::MerklePath => "MerklePath",
- Self::SparseMerklePath => "SparseMerklePath",
- Self::Uint32 => "Uint32",
- Self::Uint64 => "Uint64",
- Self::Any => "Any",
- }
- }
- }
- /// Literal types supported by the zkas VM
- #[derive(Copy, Clone, PartialEq, Eq, Debug)]
- #[repr(u8)]
- pub enum LitType {
- /// Dummy intermediate type
- Dummy = 0x00,
- /// Unsigned 64-bit integer
- Uint64 = 0x01,
- }
- impl LitType {
- pub fn from_repr(b: u8) -> Option<Self> {
- match b {
- 0x01 => Some(Self::Uint64),
- _ => None,
- }
- }
- pub fn to_vartype(&self) -> VarType {
- match self {
- Self::Dummy => VarType::Dummy,
- Self::Uint64 => VarType::Uint64,
- }
- }
- }
|