1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
/// A Signing Intent
///
/// An intent is a compact struct serves as the domain separator for a message that a signature
/// commits to. It consists of three parts:
/// 1. [enum IntentScope] (what the type of the message is)
/// 2. [enum IntentVersion]
/// 3. [enum AppId] (what application that the signature refers to).
///
/// The serialization of an Intent is a 3-byte array where each field is represented by a byte and
/// it is prepended onto a message before it is signed in Sui.
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
pub struct Intent {
pub scope: IntentScope,
pub version: IntentVersion,
pub app_id: IntentAppId,
}
impl Intent {
pub fn new(scope: IntentScope, version: IntentVersion, app_id: IntentAppId) -> Self {
Self {
scope,
version,
app_id,
}
}
pub fn to_bytes(self) -> [u8; 3] {
[self.scope as u8, self.version as u8, self.app_id as u8]
}
pub fn scope(self) -> IntentScope {
self.scope
}
pub fn version(self) -> IntentVersion {
self.version
}
pub fn app_id(self) -> IntentAppId {
self.app_id
}
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u8)]
#[non_exhaustive]
pub enum IntentScope {
TransactionData = 0, // Used for a user signature on a transaction data.
TransactionEffects = 1, // Used for an authority signature on transaction effects.
CheckpointSummary = 2, // Used for an authority signature on a checkpoint summary.
PersonalMessage = 3, // Used for a user signature on a personal message.
SenderSignedTransaction = 4, // Used for an authority signature on a user signed transaction.
ProofOfPossession = 5, // Used as a signature representing an authority's proof of possession of its authority protocol key.
HeaderDigest = 6, // Used for narwhal authority signature on header digest.
BridgeEventUnused = 7, // for bridge purposes but it's currently not included in messages.
ConsensusBlock = 8, // Used for consensus authority signature on block's digest
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u8)]
#[non_exhaustive]
pub enum IntentVersion {
V0 = 0,
}
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u8)]
#[non_exhaustive]
pub enum IntentAppId {
Sui = 0,
Narwhal = 1,
Consensus = 2,
}