asherah 0.2.0-arm64-darwin → 0.3.0-arm64-darwin

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 36d11cdfa0e749a52efaf5be5ee101fc2991333f3c213e093fef10bd8c4de57e
4
- data.tar.gz: 884d871772aac9491693c40e8eaf84798549f8558ec2d0e7b3f284f6a4374c52
3
+ metadata.gz: 6a43b4d34ccce682cf20e8e0154704be1e88f43fd83243143b1eb29cb184e5e1
4
+ data.tar.gz: 4e1f4ba3d4f67096204bc126eea95e2dcc50666ecf1dc4d3e4f2dac2108b19e4
5
5
  SHA512:
6
- metadata.gz: f6fe6c2b92a504aefb07f5837df30e08415e16280c76514cc6c326ecf2f922616d7d6f48c3fa1afdfefb93328db28154f9a4d664e50565780f4086c783a98ce6
7
- data.tar.gz: 4e0edff8c2f9b9b609977036c771cbcd94d94e3022e379f4bc1d3ccc84a35c3436fcd22e4877b084e9c9deaa35330d22e67cc9a01141b1f6268b03be41f841aa
6
+ metadata.gz: 5ff13c55e0d1eee27ed301a854e353fe0edc7acdbe99f9da41a1e215ee64f7311353bc45f89f1ad652508545e74e9f1949e92e50e9dd6d41ebe8c2bea47ef1c6
7
+ data.tar.gz: 63dab48dfb85fe4e794dc5a5431cf1a7e5abc2f27ff62a90d9e7cec7939e85e24e04ccdd14107274a341f9f7b1020867bcae41b93ef0ce8d4064d48bf544bc3e
data/CHANGELOG.md CHANGED
@@ -1,5 +1,11 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [0.3.0] - 2022-03-22
4
+
5
+ - Free up cobhan buffers after encrypt/decrypt to prevent growing heap memory
6
+ - Use local `estimate_buffer` calculation instead of FFI call
7
+ - Upgrade to use asherah-cobhan v0.4.3
8
+
3
9
  ## [0.2.0] - 2022-03-21
4
10
 
5
11
  - Implement versioning for asherah-cobhan binaries
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Asherah
4
- VERSION = '0.2.0'
4
+ VERSION = '0.3.0'
5
5
  end
data/lib/asherah.rb CHANGED
@@ -14,10 +14,13 @@ module Asherah
14
14
  [:SetupJson, [:pointer], :int32],
15
15
  [:EncryptToJson, [:pointer, :pointer, :pointer], :int32],
16
16
  [:DecryptFromJson, [:pointer, :pointer, :pointer], :int32],
17
- [:EstimateBuffer, [:int32, :int32], :int32],
18
17
  [:Shutdown, [], :void]
19
18
  ].freeze)
20
19
 
20
+ ESTIMATED_ENCRYPTION_OVERHEAD = 48
21
+ ESTIMATED_ENVELOPE_OVERHEAD = 185
22
+ BASE64_OVERHEAD = 1.34
23
+
21
24
  class << self
22
25
  # Configures Asherah
23
26
  #
@@ -27,6 +30,7 @@ module Asherah
27
30
  config = Config.new
28
31
  yield config
29
32
  config.validate!
33
+ @intermediated_key_overhead_bytesize = config.product_id.bytesize + config.service_name.bytesize
30
34
 
31
35
  config_buffer = string_to_cbuffer(config.to_json)
32
36
 
@@ -52,13 +56,15 @@ module Asherah
52
56
  def encrypt(partition_id, data)
53
57
  partition_id_buffer = string_to_cbuffer(partition_id)
54
58
  data_buffer = string_to_cbuffer(data)
55
- estimated_length = EstimateBuffer(data.bytesize, partition_id.bytesize)
56
- output_buffer = allocate_cbuffer(estimated_length)
59
+ estimated_buffer_bytesize = estimate_buffer(data.bytesize, partition_id.bytesize)
60
+ output_buffer = allocate_cbuffer(estimated_buffer_bytesize)
57
61
 
58
62
  result = EncryptToJson(partition_id_buffer, data_buffer, output_buffer)
59
63
  Error.check_result!(result, 'EncryptToJson failed')
60
64
 
61
65
  cbuffer_to_string(output_buffer)
66
+ ensure
67
+ [partition_id_buffer, data_buffer, output_buffer].map(&:free)
62
68
  end
63
69
 
64
70
  # Decrypts a DataRowRecord in JSON format for a partition_id and returns decrypted data.
@@ -75,11 +81,22 @@ module Asherah
75
81
  Error.check_result!(result, 'DecryptFromJson failed')
76
82
 
77
83
  cbuffer_to_string(output_buffer)
84
+ ensure
85
+ [partition_id_buffer, data_buffer, output_buffer].map(&:free)
78
86
  end
79
87
 
80
88
  # Stop the Asherah instance
81
89
  def shutdown
82
90
  Shutdown()
83
91
  end
92
+
93
+ private
94
+
95
+ def estimate_buffer(data_bytesize, partition_bytesize)
96
+ ESTIMATED_ENVELOPE_OVERHEAD +
97
+ @intermediated_key_overhead_bytesize +
98
+ partition_bytesize +
99
+ ((data_bytesize + ESTIMATED_ENCRYPTION_OVERHEAD) * BASE64_OVERHEAD)
100
+ end
84
101
  end
85
102
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: asherah
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: arm64-darwin
6
6
  authors:
7
7
  - GoDaddy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-03-21 00:00:00.000000000 Z
11
+ date: 2022-03-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cobhan