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;
Engine Related Types¶
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;