44require "json"
55require 'openssl'
66
7- logger = Logger . new ( STDOUT )
8- logger . level = Logger ::WARN
9-
107
118module Utils
129 def self . verify_signature ( secret , text_body , header_signature )
@@ -45,24 +42,33 @@ def self.parse_cookie(cookie = nil)
4542 end
4643 end
4744
48- def self . decrypt ( encrypted , cipher_key )
49- decipher = OpenSSL ::Cipher ::AES . new ( Config ::CIPHER_SIZE , :CBC ) . decrypt
50- decipher . padding = 0
51-
52- begin
53- cipher_key = cipher_key . each_byte . map { |b | b . to_s ( 16 ) } . join
54- encrypted = encrypted . each_byte . map { |b | b . to_s ( 16 ) } . join
45+ def self . encrypt ( plain_text , key )
46+ cipher = OpenSSL ::Cipher ::AES . new ( Config ::CIPHER_SIZE , :CBC ) . encrypt
47+ cipher . padding = 0
5548
56- decipher . key = cipher_key . slice ( 0 , Config ::AES_KEY_SIZE )
57- decipher . iv = encrypted . slice ( 0 , Config ::AES_BLOCK_SIZE )
58-
59- decrypted = decipher . update ( encrypted ) + decipher . final
60- decrypted = decrypted . each_byte . map { |b | b . to_s ( 16 ) } . join
61- return decrypted
62- rescue => err
63- logger . fatal ( "Could not decrypt encrypted data: " + err . message )
49+ if plain_text . size % Config ::AES_BLOCK_SIZE != 0
50+ logger = Logger . new ( STDOUT )
51+ logger . level = Logger ::WARN
52+ logger . fatal ( "data not multiple of block length" )
6453 return nil
6554 end
55+
56+ key = Digest ::SHA1 . hexdigest key
57+ cipher . key = key . slice ( 0 , Config ::AES_BLOCK_SIZE )
58+ s = cipher . update ( plain_text ) + cipher . final
59+
60+ s . unpack ( 'H*' ) [ 0 ] . upcase
6661 end
6762
63+ def self . decrypt ( encrypted , key )
64+ cipher = OpenSSL ::Cipher ::AES . new ( Config ::CIPHER_SIZE , :CBC ) . decrypt
65+ cipher . padding = 0
66+
67+ key = Digest ::SHA1 . hexdigest key
68+ cipher . key = key . slice ( 0 , Config ::AES_BLOCK_SIZE )
69+ s = [ encrypted ] . pack ( "H*" ) . unpack ( "C*" ) . pack ( "c*" )
70+
71+ rv = cipher . update ( s ) + cipher . final
72+ return rv . strip
73+ end
6874end
0 commit comments