Message class abstract interface

Message transformation workflow and cryptographic operations.

This framework defines three stages of message processing with increasing security guarantees, enabling secure communication between entities:

Instant Message → Secure Message → Reliable Message
(Plaintext)      (Encrypted)      (Encrypted + Signed)

Data Structure Evolution

Field Instant Message Secure Message Reliable Message
sender ✅ ✅ ✅
receiver ✅ ✅ ✅
time ✅ ✅ ✅
content ✅ (plaintext) ❌ ❌
data ❌ ✅ (encrypted) ✅ (encrypted)
keys ❌ ✅ (encrypted) ✅ (encrypted)
signature ❌ ❌ ✅ (signed)

Core Cryptographic Algorithms

  1. Content encryption: data = symmetric_key.encrypt(content)
  2. Key encryption: key = receiver.public_key.encrypt(symmetric_key)
  3. Signature generation: signature = sender.private_key.sign(data)

Reverse Transformation

Reliable Message → Secure Message → Instant Message (with decryption/verification)

  • Verify signature → Extract secure message
  • Decrypt keys to get symmetric key → Decrypt data to get content

Base interface for all message types (Instant/Secure/Reliable).

All messages share a common envelope (routing metadata) and implement Mapper for serialization to/from structured formats (Map/JSON). This interface provides unified access to core message metadata (sender, receiver, time, etc.) across all message stages.

Base serialized format (Map/JSON):

{
  // Envelope (routing metadata)
  "sender"   : "moki@xxx",  // Sender's unique ID
  "receiver" : "hulk@yyy",  // Receiver's unique ID
  "time"     : 123.45,      // Message timestamp (Unix timestamp in seconds)
  // Message body (varies by message type)
  ...
}
Implemented types
  • MutableMapping<K, V>

Properties

entries → Iterable<MapEntry<String, dynamic>>
The map entries of this Map.
no setterinherited
envelope → Envelope
Complete message envelope containing routing metadata.
no setter
group → ID?
Returns the group ID for group messages (content.group or envelope.group).
no setter
hashCode → int
The hash code for this object.
no setterinherited
isEmpty → bool
Whether there is no key/value pair in the map.
no setterinherited
isNotEmpty → bool
Whether there is at least one key/value pair in the map.
no setterinherited
keys → Iterable<String>
The keys of this Map.
no setterinherited
length → int
The number of key/value pairs in the map.
no setterinherited
receiver → ID
Returns the message receiver ID (envelope.receiver).
no setter
runtimeType → Type
A representation of the runtime type of the object.
no setterinherited
sender → ID
Returns the message sender ID (envelope.sender).
no setter
time → DateTime?
Returns the message timestamp (content.time or envelope.time).
no setter
type → String?
Returns the message type (content.type or envelope.type).
no setter
values → Iterable
The values of this Map.
no setterinherited

Methods

addAll(Map<String, dynamic> other) → void
Adds all key/value pairs of other to this map.
inherited
addEntries(Iterable<MapEntry<String, dynamic>> newEntries) → void
Adds all key/value pairs of newEntries to this map.
inherited
cast<RK, RV>() → Map<RK, RV>
Provides a view of this map as having RK keys and RV instances, if necessary.
inherited
clear() → void
Removes all entries from the map.
inherited
containsKey(Object? key) → bool
Whether this map contains the given key.
inherited
containsValue(Object? value) → bool
Whether this map contains the given value.
inherited
copyMap([bool deepCopy = false]) → Map<String, dynamic>
Copy inner map.
inherited
forEach(void action(String key, dynamic value)) → void
Applies action to each key/value pair of the map.
inherited
getBool(String key, [bool? defaultValue]) → bool?
inherited
getDateTime(String key, [DateTime? defaultValue]) → DateTime?
inherited
getDouble(String key, [double? defaultValue]) → double?
inherited
getInt(String key, [int? defaultValue]) → int?
inherited
getString(String key, [String? defaultValue]) → String?
Get string value for key, if value is None, return the default value.
inherited
map<K2, V2>(MapEntry<K2, V2> convert(String key, dynamic value)) → Map<K2, V2>
Returns a new map where all entries of this map are transformed by the given convert function.
inherited
noSuchMethod(Invocation invocation) → dynamic
Invoked when a nonexistent method or property is accessed.
inherited
putIfAbsent(String key, dynamic ifAbsent()) → dynamic
Look up the value of key, or add a new entry if it isn't there.
inherited
remove(Object? key) → dynamic
Removes key and its associated value, if present, from the map.
inherited
removeWhere(bool test(String key, dynamic value)) → void
Removes all entries of this map that satisfy the given test.
inherited
setDateTime(String key, DateTime? time) → void
inherited
setMap(String key, Mapper? mapper) → void
inherited
setString(String key, Stringer? stringer) → void
inherited
toMap() → MutableMapping
Get inner map.
inherited
toString() → String
A string representation of this object.
inherited
update(String key, dynamic update(dynamic value), {dynamic ifAbsent()?}) → dynamic
Updates the value for the provided key.
inherited
updateAll(dynamic update(String key, dynamic value)) → void
Updates all values.
inherited

Operators

operator ==(Object other) → bool
The equality operator.
inherited
operator [](Object? key) → dynamic
The value for the given key, or null if key is not in the map.
inherited
operator []=(String key, dynamic value) → void
Associates the key with the given value.
inherited