Skip to content
Juvix imports

module arch.node.types.identities;

import arch.node.types.crypto open public;
import prelude open;

Types for network identities

Types in this section are used to represent identities within the network.

Basic Types

Signable

A type representing data that can be cryptographically signed.

Signable : Type := ByteString;

Plaintext

Raw unencrypted data.

Plaintext : Type := ByteString;

Ciphertext

Encrypted data.

Ciphertext : Type := ByteString;

Cryptographic Keys

DecryptionKey : Type := ByteString;

SigningKey : Type := ByteString;

Identity Types

ExternalID

A unique identifier, such as a public key, represented as a natural number.

syntax alias ExternalID := PublicKey;

InternalID

A unique identifier, such as a private key, used internally within the network.

syntax alias InternalID := PrivateKey;

Identity

A pair combining an ExternalID and an InternalID.

Identity : Type := Pair ExternalID InternalID;

Commitment

A cryptographic signature or commitment.

syntax alias Commitment := Signature;

axiom emptyCommitment : Commitment;

Network Identifiers

NodeID

Cryptographic node identity.

syntax alias NodeID := ExternalID;

TopicID

Cryptographic topic identity.

syntax alias TopicID := ExternalID;

PublisherID

Cryptographic identity of a publisher in a pub/sub topic.

syntax alias PublisherID := ExternalID;

DomainID

Cryptographic domain identity.

syntax alias DomainID := ExternalID;

MemberID

Cryptographic identity of a member in a domain.

syntax alias MemberID := ExternalID;

ChunkID

Cryptographic content addressed hash digest of a data chunk.

syntax alias ChunkID := Digest;

EngineName

Engine instance name as an opaque string.

syntax alias EngineName := String;

ExternalIdentity

An alias for engine name.

syntax alias ExternalIdentity := EngineName;

EngineID

Engine instance identity combining node identity and engine name.

EngineID : Type := Pair (Option NodeID) EngineName;

isLocalEngineID (eid : EngineID) : Bool :=
case eid of
| mkPair none _ := true
| _ := false;

isRemoteEngineID (eid : EngineID) : Bool := not (isLocalEngineID eid);

Engine Helper Functions

nameGen (str : String) (name : EngineName) (addr : EngineID) : EngineName :=
name ++str "_" ++str str ++str "_" ++str snd addr;

String Comparison

axiom stringCmp : String -> String -> Ordering;

instance
StringOrd : Ord String :=
mkOrd@{
cmp := stringCmp;
};

Identity Parameters and Capabilities

IDParams

Supported identity parameter types.

type IDParams :=
| Ed25519
| Secp256k1
| BLS;

Backend

Backend connection types.

type Backend :=
| BackendLocalMemory
| BackendLocalConnection@{
subtype : String;
}
| BackendRemoteConnection@{
externalIdentity : ExternalIdentity;
};

Capabilities

Available identity capabilities.

type Capabilities :=
| CapabilityCommit
| CapabilityDecrypt
| CapabilityCommitAndDecrypt;

Identity Evidence Types

IdentityName

Hierarchical identity naming structure.

type IdentityName :=
| LocalName@{
name : String;
}
| DotName@{
parent : ExternalIdentity;
child : String;
};
Instances

axiom IdentityNameCmpDummy : IdentityName -> IdentityName -> Ordering;

instance
IdentityNameOrd : Ord IdentityName :=
mkOrd@{
cmp := IdentityNameCmpDummy;
};

ReadsForEvidence

Evidence of read permissions between identities.

type ReadsForEvidence :=
mkReadsForEvidence@{
fromIdentity : ExternalIdentity;
toIdentity : ExternalIdentity;
proof : ByteString;
};
Instances

axiom ReadsForCmpDummy : ReadsForEvidence -> ReadsForEvidence -> Ordering;

instance
ReadsForOrd : Ord ReadsForEvidence :=
mkOrd@{
cmp := ReadsForCmpDummy;
};

SignsForEvidence

Evidence of signing permissions between identities.

type SignsForEvidence :=
mkSignsForEvidence@{
fromIdentity : ExternalIdentity;
toIdentity : ExternalIdentity;
proof : ByteString;
};
Instances

axiom SignsForCmpDummy : SignsForEvidence -> SignsForEvidence -> Ordering;

instance
SignsForOrd : Ord SignsForEvidence :=
mkOrd@{
cmp := SignsForCmpDummy;
};

IdentityNameEvidence

Evidence linking identity names to external identities.

type IdentityNameEvidence :=
mkIdentityNameEvidence@{
identityName : IdentityName;
externalIdentity : ExternalIdentity;
proof : ByteString;
};
Instances

axiom IdentityNameEvidenceCmpDummy
: IdentityNameEvidence -> IdentityNameEvidence -> Ordering;

instance
IdentityNameEvidenceOrd : Ord IdentityNameEvidence :=
mkOrd@{
cmp := IdentityNameEvidenceCmpDummy;
};

Ordering Aliases

syntax alias KVSKey := String;

syntax alias ReadLabel := KVSKey;

syntax alias WriteLabel := KVSKey;

type TransactionLabel :=
mkTransactionLabel@{
read : List ReadLabel;
write : List WriteLabel;
};

syntax alias KVSDatum := String;

syntax alias TxFingerprint := Nat;

type ProgramState :=
mkProgramState@{
data : ByteString;
halted : Bool;
};

syntax alias Executable := ByteString;

type TransactionCandidate :=
mkTransactionCandidate@{
label : TransactionLabel;
executable : Executable;
};

syntax alias NarwhalBlock := String;

syntax alias BatchNumber := Nat;

syntax alias WallClockTime := Nat;

Don't know a better place to put this.

axiom keyToShard : KVSKey -> EngineID;