Difference between revisions of "Principal"

From Internet Computer Wiki
Jump to: navigation, search
(Created page with "A '''principal''' is a cryptographic identifier used to describe the sender or receiver of a message. There are several types of principals owing to the different contexts...")
 
(Describe types and representations.)
Line 1: Line 1:
A '''principal''' is a cryptographic identifier used to describe the sender or receiver of a [[message]]. There are several types of principals owing to the different contexts in which a message can be sent or received.
+
A '''principal''' is a cryptographic identifier used to describe the source or destination of a [[message]].  
 +
 
 +
== Representation ==
 +
 
 +
=== Binary ===
 +
A principal consists of a variable-length byte array. The last byte is used to indicate the type. The table below gives the type inferred from the last byte.
 +
{| class="wikitable"
 +
|'''Byte'''
 +
|'''Type'''
 +
|-
 +
|none
 +
|Management
 +
|-
 +
|<code>0x01</code>
 +
|Opaque
 +
|-
 +
|<code>0x02</code>
 +
|Self-Authenticating
 +
|-
 +
|<code>0x03</code>
 +
|Derived
 +
|-
 +
|<code>0x04</code>
 +
|Anonymous
 +
|-
 +
|<code>0x05</code>
 +
|Unassigned
 +
|}
 +
 
 +
=== Textual ===
 +
A principal is shown in textual format by prepending it with its [[wikipedia:Cyclic_redundancy_check#CRC-32_algorithm|CRC-32]] value in big-endian byte order, applying [[wikipedia:Base32|Base32]] encoding without padding, grouping characters by length five, and separating them by a hyphen. The table below gives some common principals.
 +
{| class="wikitable"
 +
!Principal
 +
!Description
 +
|-
 +
|<code>aaaaa-aa</code>
 +
|[[Management Canister|management canister]]
 +
|-
 +
|<code>rrkah-fqaaa-aaaaa-aaaaq-cai</code>
 +
|[[Governance Canister|governance canister]]
 +
|-
 +
|<code>ryjl3-tyaaa-aaaaa-aaaba-cai</code>
 +
|[[Ledger Canister|ledger canister]]
 +
|-
 +
|<code>tdb26-jop6k-aogll-7ltgs-eruif-6kk7m-qpktf-gdiqx-mxtrf-vb5e6-eqe</code>
 +
|[[Network Nervous System|network nervous system]]
 +
|-
 +
|<code>2vxsx-fae</code>
 +
|anonymous user
 +
|}
 +
 
 +
== Types ==
 +
There are several types of principals.
 +
 
 +
=== Management ===
 +
The management principal is used to reference the management canister.
 +
 
 +
=== Opaque ===
 +
An opaque principal is used to reference any canister that is not the management canister.
 +
 
 +
=== Self-Authenticating ===
 +
A self-authenticating principal is used to reference a subnet or user.

Revision as of 16:42, 17 November 2021

A principal is a cryptographic identifier used to describe the source or destination of a message.

Representation

Binary

A principal consists of a variable-length byte array. The last byte is used to indicate the type. The table below gives the type inferred from the last byte.

Byte Type
none Management
0x01 Opaque
0x02 Self-Authenticating
0x03 Derived
0x04 Anonymous
0x05 Unassigned

Textual

A principal is shown in textual format by prepending it with its CRC-32 value in big-endian byte order, applying Base32 encoding without padding, grouping characters by length five, and separating them by a hyphen. The table below gives some common principals.

Principal Description
aaaaa-aa management canister
rrkah-fqaaa-aaaaa-aaaaq-cai governance canister
ryjl3-tyaaa-aaaaa-aaaba-cai ledger canister
tdb26-jop6k-aogll-7ltgs-eruif-6kk7m-qpktf-gdiqx-mxtrf-vb5e6-eqe network nervous system
2vxsx-fae anonymous user

Types

There are several types of principals.

Management

The management principal is used to reference the management canister.

Opaque

An opaque principal is used to reference any canister that is not the management canister.

Self-Authenticating

A self-authenticating principal is used to reference a subnet or user.