Class: PQCrypto::Seal::OneShotOpener

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

Instance Method Summary collapse

Constructor Details

#initialize(envelope, credentials:, required_padding:, limits:) ⇒ OneShotOpener

Returns a new instance of OneShotOpener.



48
49
50
51
52
53
# File 'lib/pq_crypto/seal/core.rb', line 48

def initialize(envelope, credentials:, required_padding:, limits:)
  @envelope = Envelope.parse(envelope, limits: limits)
  @credentials = credentials
  @required_padding = required_padding
  @limits = limits
end

Instance Method Details

#callObject



55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/pq_crypto/seal/core.rb', line 55

def call
  dek = @envelope.unwrap_dek(@credentials)
  inner_bytes = @envelope.decrypt_inner(dek)
  inner = Format::InnerCodec.parse(inner_bytes)
  enforce_plaintext_limit!(inner)
  Padding.verify!(
    @required_padding,
    header: @envelope.header,
    envelope_bytes: @envelope.size,
    content_bytes: inner.content.bytesize,
    metadata_bytes: inner..bytesize
  )
  opened = Opened.build(
    @envelope.header,
    @envelope.section,
    data: inner.content,
    metadata: inner.
  )
  opened
ensure
  Secrets.wipe_each!(dek, inner_bytes)
  Secrets.wipe_each!(inner.content, inner.) if inner && !opened
end