Class: PQCrypto::Seal::OneShotEncryptor

Inherits:
Object
  • Object
show all
Defined in:
lib/pq_crypto/seal/core.rb

Instance Method Summary collapse

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
  validate_metadata!
  @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

#callObject



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