Module: RCS::Crypt
Constant Summary collapse
- PAD_NOPAD =
0
- PAD_PKCS5 =
1
- SHA1_DIGEST_LENGTH =
20
Instance Method Summary collapse
- #aes_decrypt(enc_text, key, padding = PAD_PKCS5) ⇒ Object
- #aes_decrypt_integrity(enc_text, key, padding = PAD_PKCS5) ⇒ Object
- #aes_encrypt(clear_text, key, padding = PAD_PKCS5) ⇒ Object
- #aes_encrypt_integrity(clear_text, key, padding = PAD_PKCS5) ⇒ Object
Instance Method Details
#aes_decrypt(enc_text, key, padding = PAD_PKCS5) ⇒ Object
28 29 30 31 32 33 34 35 36 37 |
# File 'lib/rcs-common/crypt.rb', line 28 def aes_decrypt(enc_text, key, padding=PAD_PKCS5) decipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc') decipher.decrypt decipher.padding = padding decipher.key = key decipher.iv = "\x00" * decipher.iv_len data = decipher.update(enc_text) data << decipher.final return data end |
#aes_decrypt_integrity(enc_text, key, padding = PAD_PKCS5) ⇒ Object
45 46 47 48 49 50 51 |
# File 'lib/rcs-common/crypt.rb', line 45 def aes_decrypt_integrity(enc_text, key, padding=PAD_PKCS5) text = aes_decrypt(enc_text, key, padding) # check the integrity at the end of the message check = text.slice!(text.length - SHA1_DIGEST_LENGTH, text.length) raise "Invalid sha1 check" unless check == Digest::SHA1.digest(text) return text end |
#aes_encrypt(clear_text, key, padding = PAD_PKCS5) ⇒ Object
17 18 19 20 21 22 23 24 25 26 |
# File 'lib/rcs-common/crypt.rb', line 17 def aes_encrypt(clear_text, key, padding=PAD_PKCS5) cipher = OpenSSL::Cipher::Cipher.new('aes-128-cbc') cipher.encrypt cipher.padding = padding cipher.key = key cipher.iv = "\x00" * cipher.iv_len edata = cipher.update(clear_text) edata << cipher.final return edata end |
#aes_encrypt_integrity(clear_text, key, padding = PAD_PKCS5) ⇒ Object
39 40 41 42 43 |
# File 'lib/rcs-common/crypt.rb', line 39 def aes_encrypt_integrity(clear_text, key, padding=PAD_PKCS5) # add the integrity check at the end of the message clear_text += Digest::SHA1.digest(clear_text) return aes_encrypt(clear_text, key, padding) end |