Class: PQCrypto::Seal::OneShotEncryptor
- Inherits:
-
Object
- Object
- PQCrypto::Seal::OneShotEncryptor
- Defined in:
- lib/pq_crypto/seal/core.rb
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(data, to:, metadata:, public_metadata:, recipient_capacity:, slot_size:, padding:) ⇒ OneShotEncryptor
constructor
A new instance of OneShotEncryptor.
Constructor Details
#initialize(data, to:, metadata:, public_metadata:, recipient_capacity:, slot_size:, padding:) ⇒ OneShotEncryptor
Returns a new instance of OneShotEncryptor.
6 7 8 9 10 11 12 13 14 15 |
# File 'lib/pq_crypto/seal/core.rb', line 6 def initialize(data, to:, metadata:, public_metadata:, recipient_capacity:, slot_size:, padding:) @data = String(data).b @metadata = String().b @recipients = KeyMaterial.public_keys(to) @capacity = Format.validate_capacity!(recipient_capacity, @recipients.length) @slot_size = Format.validate_slot_size!(slot_size) @public_metadata = @padding = padding end |
Instance Method Details
#call ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |
# File 'lib/pq_crypto/seal/core.rb', line 17 def call plan = EncryptionPlan.build( recipients: @recipients, capacity: @capacity, slot_size: @slot_size, padding: @padding, public_metadata: @public_metadata, content_size: @data.bytesize, metadata_size: @metadata.bytesize ) padding = Native.random_bytes(plan.padding_length) inner = plan.inner_prefix + @metadata + @data + padding ciphertext, tag = Native.aegis256_encrypt( plan.dek, plan.payload_nonce, plan.header_hash, inner ) plan.header + plan.section + ciphertext + tag ensure plan.wipe! if plan Secrets.wipe_each!(inner, padding, @metadata, @data) end |