Module 0x1::decryption
This module provides a decryption key unique to every block. This resource is updated in every block prologue. The decryption key is the key used to decrypt the encrypted transactions in the block.
- Resource
PerBlockDecryptionKey - Resource
PerEpochEncryptionKey - Function
initialize - Function
on_new_block - Function
set_for_next_epoch - Function
on_new_epoch
use 0x1::config_buffer;
use 0x1::option;
use 0x1::system_addresses;
Resource PerBlockDecryptionKey
Decryption key unique to every block. This resource is updated in every block prologue.
struct PerBlockDecryptionKey has drop, key
Fields
-
epoch: u64 -
round: u64 -
decryption_key: option::Option<vector<u8>>
Resource PerEpochEncryptionKey
Encryption key derived from the DKG result, valid for one epoch.
struct PerEpochEncryptionKey has drop, store, key
Fields
-
epoch: u64 -
encryption_key: option::Option<vector<u8>>
Function initialize
Called during genesis initialization.
public fun initialize(framework: &signer)
Implementation
public fun initialize(framework: &signer) {
system_addresses::assert_aptos_framework(framework);
if (!exists<PerBlockDecryptionKey>(@aptos_framework)) {
move_to(
framework,
PerBlockDecryptionKey { epoch: 0, round: 0, decryption_key: option::none() }
);
};
if (!exists<PerEpochEncryptionKey>(@aptos_framework)) {
move_to(
framework,
PerEpochEncryptionKey { epoch: 0, encryption_key: option::none() }
);
}
}
Function on_new_block
Invoked in block prologues to update the block decryption key.
public(friend) fun on_new_block(vm: &signer, epoch: u64, round: u64, decryption_key_for_new_block: option::Option<vector<u8>>)
Implementation
public(friend) fun on_new_block(
vm: &signer,
epoch: u64,
round: u64,
decryption_key_for_new_block: Option<vector<u8>>
) acquires PerBlockDecryptionKey {
system_addresses::assert_vm(vm);
if (exists<PerBlockDecryptionKey>(@aptos_framework)) {
let decryption_key =
borrow_global_mut<PerBlockDecryptionKey>(@aptos_framework);
decryption_key.epoch = epoch;
decryption_key.round = round;
decryption_key.decryption_key = decryption_key_for_new_block;
}
}
Function set_for_next_epoch
Buffer the encryption key for the next epoch.
public(friend) fun set_for_next_epoch(epoch: u64, encryption_key: vector<u8>)
Implementation
public(friend) fun set_for_next_epoch(epoch: u64, encryption_key: vector<u8>) {
config_buffer::upsert(PerEpochEncryptionKey {
epoch,
encryption_key: option::some(encryption_key)
});
}
Function on_new_epoch
Apply buffered PerEpochEncryptionKey on epoch transition.
public(friend) fun on_new_epoch(framework: &signer)
Implementation
public(friend) fun on_new_epoch(framework: &signer) acquires PerEpochEncryptionKey {
system_addresses::assert_aptos_framework(framework);
if (config_buffer::does_exist<PerEpochEncryptionKey>()) {
let new_key = config_buffer::extract_v2<PerEpochEncryptionKey>();
if (exists<PerEpochEncryptionKey>(@aptos_framework)) {
*borrow_global_mut<PerEpochEncryptionKey>(@aptos_framework) = new_key;
} else {
move_to(framework, new_key);
}
}
}