11module KmsEncrypted
22 class Box
3- attr_reader :key_id , :version , :previous_versions
3+ attr_reader :key_id , :version , :previous_versions , :client
44
5- def initialize ( key_id : nil , version : nil , previous_versions : nil )
5+ def initialize ( key_id : nil , version : nil , previous_versions : nil , client : nil )
66 @key_id = key_id || KmsEncrypted . key_id
77 @version = version || 1
88 @previous_versions = previous_versions || { }
9+ @client = client
910 end
1011
1112 def encrypt ( plaintext , context : nil )
1213 context = version_context ( context , version )
1314 key_id = version_key_id ( version )
14- ciphertext = KmsEncrypted ::Client . new ( key_id : key_id , data_key : true ) . encrypt ( plaintext , context : context )
15+ ciphertext = KmsEncrypted ::Client . new ( key_id : key_id , data_key : true , client : client ) . encrypt ( plaintext , context : context )
1516 "v#{ version } :#{ encode64 ( ciphertext ) } "
1617 end
1718
@@ -43,11 +44,13 @@ def decrypt(ciphertext, context: nil)
4344 key_id ||= version_key_id ( version )
4445 ciphertext = decode64 ( ciphertext )
4546 context = version_context ( context , version )
47+ client = version_client ( version )
4648
4749 KmsEncrypted ::Client . new (
4850 key_id : key_id ,
4951 data_key : true ,
50- legacy_context : legacy_context
52+ legacy_context : legacy_context ,
53+ client : client
5154 ) . decrypt ( ciphertext , context : context )
5255 end
5356
@@ -68,6 +71,10 @@ def version_key_id(version)
6871 key_id
6972 end
7073
74+ def version_client ( version )
75+ previous_versions . dig ( version , :client ) || self . client
76+ end
77+
7178 def version_context ( context , version )
7279 if context . respond_to? ( :call )
7380 if context . arity == 0
0 commit comments