Issue #6980 has been updated by stouset (Stephen Touset).


=begin
I'm not necessarily happy with a GCM-specific (({gcm_tag})), and an (unimplemented but hypothetical) (({ccm_tag})) et al. But having a single ({{tag})) method that probed for which mode it was currently in seemed too magical. I'm open to ideas.
=end
----------------------------------------
Feature #6980: OpenSSL support for AEAD additional authenticated data and tags
https://bugs.ruby-lang.org/issues/6980#change-29180

Author: stouset (Stephen Touset)
Status: Assigned
Priority: Normal
Assignee: MartinBosslet (Martin Bosslet)
Category: ext
Target version: 2.0.0


=begin
I've added support to OpenSSL::Cipher to support AEAD modes of operation. AEAD modes allow for plaintext additional authentication data to be combined with a ciphertext to generate a "tag" (e.g., a MAC). This tag can then be verified during decryption to ensure the secret key, nonce (IV), additional authentication data, ciphertext, and tag have not been changed or manipulated.

Usage can be inferred through documentation and tests.

  
 cipher = OpenSSL::Cipher.new('aes-256-gcm')
 cipher.encrypt
 cipher.key = 'key'
 cipher.iv = 'iv'
 cipher.aad = 'aad'
  
 ct = cipher.update('plain')
 tag = cipher.gcm_tag
 
 cipher.reset
 cipher.decrypt
 cipher.key = 'key'
 cipher.iv = 'iv'
 cipher.gcm_tag = 'tag'
 cipher.aad = 'aad'

 cipher.update(ct) + cipher.verify + cipher.final # => 'plain'

 cipher.reset
 cipher.decrypt
 cipher.key = 'key'
 cipher.iv = 'iv'
 cipher.gcm_tag = 'tag'
 cipher.aad = 'aad'

 cipher.update(ct[0..-2] << ct[-1].succ) + cipher.verify + cipherfinal # => OpenSSL::Cipher::CipherError
=end


-- 
http://bugs.ruby-lang.org/