File tree Expand file tree Collapse file tree 3 files changed +55
-0
lines changed
Expand file tree Collapse file tree 3 files changed +55
-0
lines changed Original file line number Diff line number Diff line change @@ -6,4 +6,6 @@ module Config
66 TRACK_EVENT = "/track"
77 VERIFY_EVENT = "/verify"
88 FLOW_EVENT = "/flow"
9+ CIPHER_SIZE = 256
10+ AES_BLOCK_SIZE = 32
911end
Original file line number Diff line number Diff line change 1+ require_relative 'config'
2+ require "logger"
13require "base64"
24require "json"
35require 'openssl'
46
7+
58module Utils
69 def self . verify_signature ( secret , text_body , header_signature )
710 begin
@@ -38,4 +41,34 @@ def self.parse_cookie(cookie = nil)
3841 return fp , cid
3942 end
4043 end
44+
45+ def self . encrypt ( plain_text , key )
46+ cipher = OpenSSL ::Cipher ::AES . new ( Config ::CIPHER_SIZE , :CBC ) . encrypt
47+ cipher . padding = 0
48+
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" )
53+ return nil
54+ 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
61+ end
62+
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
4174end
Original file line number Diff line number Diff line change 2525 expect ( cookie [ 0 ] ) . to be_empty
2626 expect ( cookie [ 1 ] ) . to be_empty
2727 end
28+
29+ it "encrypt text" do
30+ plain_text = "Some random plain text for test"
31+ key = "6EA4915349C0AAC6F6572DA4F6B00C42DAD33E75"
32+ encrypted = "B8D770D0F7388EC3DF62B0097C36C05CAB03E934F2E2760536004F87FE11644C"
33+
34+ res = Utils . encrypt ( plain_text , key )
35+ expect ( res ) . to_not be_empty
36+ expect ( res ) . to eq ( encrypted )
37+ end
38+
39+ it "decrypt text" do
40+ encrypted_text = "B8D770D0F7388EC3DF62B0097C36C05CAB03E934F2E2760536004F87FE11644C"
41+ decrypted = "Some random plain text for test"
42+ key = "6EA4915349C0AAC6F6572DA4F6B00C42DAD33E75"
43+
44+ res = Utils . decrypt ( encrypted_text , key )
45+ expect ( res ) . to_not be_empty
46+ expect ( res ) . to eq ( decrypted )
47+ end
2848end
You can’t perform that action at this time.
0 commit comments