Class: PQCrypto::Seal::OneShotOpener
- Inherits:
-
Object
- Object
- PQCrypto::Seal::OneShotOpener
- Defined in:
- lib/pq_crypto/seal/core.rb
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(envelope, credentials:, required_padding:, limits:) ⇒ OneShotOpener
constructor
A new instance of OneShotOpener.
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
#call ⇒ Object
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 |