enveloperb 0.1.2-x86_64-linux → 0.1.4-x86_64-linux

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e91c3431752cf11579e997eab0cf22f781270083365185c3650261c2692844fb
4
- data.tar.gz: aa6bc449d349dd533ef4d3ae1e1f66a4ea37e7f9400cdac5405f75b80efbef91
3
+ metadata.gz: c783aeda24e29352ee837e44e082310ff6679e235a3f66861ff73267a29af7cb
4
+ data.tar.gz: b2af145d653968417b5f9ad7618ca8419473494ea69dfc78d9bf187e572eefe7
5
5
  SHA512:
6
- metadata.gz: 8e49f7e046080b0c766d13ab0f5616af5305ac008a092ef6112146a925b0cd888aa0b5915dbe199d9aa0d25d6342432ac4e4a5d44cfd5396778d12218bb4c095
7
- data.tar.gz: ea9826c9e2b125c4f599ce2c21b50a1ad47ca2d2506d9606a796440d9036c6dde141be9341e1772b09ac9d03ad35e3ee455bf6d79fe047e53cb3433ffd93b7b4
6
+ metadata.gz: 1298feeaffa939f9652519d194dca45de664f0fd270a00cad1c863605b101ec59bd6493550492411645ffdcfb7c31d53dabc17952f29691c962573ebbc5f2d20
7
+ data.tar.gz: a9708a5ff1bd0ffcbd63d6b3a0c74a6d5c88375c85358c66278328a70bb3abab74e6074f51f2993c8f127eba347153a2321794a22a33d81fbb383ec7d6859aa0
data/README.md CHANGED
@@ -19,24 +19,22 @@ Except for testing purposes, it is not common to use envelope encryption in situ
19
19
 
20
20
  # Installation
21
21
 
22
- In order to build the `enveloperb` gem, you must have Rust 1.31.0 or later installed.
23
- On an ARM-based platform, you must use Rust nightly, for SIMD intrinsics support.
22
+ For the most common platforms, we provide "native" gems (which have the shared object that provides the cryptographic primitives pre-compiled).
23
+ At present, we provide native gems for:
24
24
 
25
- With that available, you should be able to install it like any other gem:
25
+ * Linux `x86_64` and `aarch64`
26
+ * macOS `x86_64` and `arm64`
26
27
 
27
- gem install enveloperb
28
+ On these platforms, you can just install the `enveloperb` gem via your preferred method, and it should "just work".
29
+ If it doesn't, please [report that as a bug](https://github.com/cipherstash/enveloperb/issues).
28
30
 
29
- There's also the wonders of [the Gemfile](http://bundler.io):
31
+ For other platforms, you will need to install the source gem, which requires that you have Rust 1.31.0 or later installed.
32
+ On ARM-based platforms, you must use Rust nightly, for SIMD intrinsics support.
30
33
 
31
- gem 'enveloperb'
34
+ ## Installing from Git
32
35
 
33
- If you're the sturdy type that likes to run from git:
34
-
35
- bundle install
36
- rake install
37
-
38
- Or, if you've eschewed the convenience of Rubygems entirely, then you
39
- presumably know what to do already.
36
+ If you have a burning need to install directly from a checkout of the git repository, you can do so by running `bundle install && rake install`.
37
+ As this is a source-based installation, you will need to have Rust installed, as described above.
40
38
 
41
39
 
42
40
  # Usage
data/enveloperb.gemspec CHANGED
@@ -24,10 +24,9 @@ Gem::Specification.new do |s|
24
24
 
25
25
  s.required_ruby_version = ">= 2.7.0"
26
26
 
27
- s.add_runtime_dependency "rutie", "~> 0.0.4"
27
+ s.add_runtime_dependency 'fiddle', '~> 1.1'
28
28
 
29
29
  s.add_development_dependency 'bundler'
30
- s.add_development_dependency 'gem-compiler'
31
30
  s.add_development_dependency 'github-release'
32
31
  s.add_development_dependency 'guard-rspec'
33
32
  s.add_development_dependency 'rake', '~> 10.4', '>= 10.4.2'
data/lib/enveloperb.rb CHANGED
@@ -1,7 +1,13 @@
1
- require "rutie"
1
+ require "fiddle"
2
2
 
3
- module Enveloperb
4
- Rutie.new(:enveloperb).init 'Init_enveloperb', __dir__
3
+ begin
4
+ Fiddle::Function.new(Fiddle.dlopen("#{__dir__}/#{RbConfig::CONFIG["ruby_version"]}/libenveloperb.#{RbConfig::CONFIG["SOEXT"]}")["Init_libenveloperb"], [], Fiddle::TYPE_VOIDP).call
5
+ rescue Fiddle::DLError
6
+ begin
7
+ Fiddle::Function.new(Fiddle.dlopen("#{__dir__}/libenveloperb.#{RbConfig::CONFIG["SOEXT"]}")["Init_libenveloperb"], [], Fiddle::TYPE_VOIDP).call
8
+ rescue Fiddle::DLError
9
+ raise LoadError, "Failed to initialize libenveloperb.#{RbConfig::CONFIG["SOEXT"]}; either it hasn't been built, or was built incorrectly for your system"
10
+ end
5
11
  end
6
12
 
7
13
  require_relative "./enveloperb/encrypted_record"
metadata CHANGED
@@ -1,29 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enveloperb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.4
5
5
  platform: x86_64-linux
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-04-29 00:00:00.000000000 Z
11
+ date: 2022-05-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: rutie
14
+ name: fiddle
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.0.4
19
+ version: '1.1'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.0.4
26
+ version: '1.1'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: bundler
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -38,20 +38,6 @@ dependencies:
38
38
  - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: gem-compiler
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - ">="
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :development
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - ">="
53
- - !ruby/object:Gem::Version
54
- version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: github-release
57
43
  requirement: !ruby/object:Gem::Requirement
@@ -179,24 +165,14 @@ extra_rdoc_files: []
179
165
  files:
180
166
  - CODE_OF_CONDUCT.md
181
167
  - CONTRIBUTING.md
182
- - Cargo.toml
183
168
  - LICENCE
184
169
  - README.md
185
170
  - enveloperb.gemspec
186
- - ext/Rakefile
171
+ - lib/2.7.0/libenveloperb.so
187
172
  - lib/enveloperb.rb
188
173
  - lib/enveloperb/awskms.rb
189
174
  - lib/enveloperb/encrypted_record.rb
190
175
  - lib/enveloperb/simple.rb
191
- - src/lib.rs
192
- - target/release/deps/libasync_trait-d616c5275efb3885.so
193
- - target/release/deps/libenveloperb.so
194
- - target/release/deps/libfutures_macro-0f8ad5ae6e34b161.so
195
- - target/release/deps/libpin_project_internal-ef8d149cf28b24bc.so
196
- - target/release/deps/libserde_derive-3653e4229ae528ef.so
197
- - target/release/deps/libthiserror_impl-c49e7233e0f6f247.so
198
- - target/release/deps/libtracing_attributes-ae844bddcb3f978b.so
199
- - target/release/libenveloperb.so
200
176
  homepage: https://github.com/cipherstash/enveloperb
201
177
  licenses: []
202
178
  metadata: {}
data/Cargo.toml DELETED
@@ -1,17 +0,0 @@
1
- [package]
2
- name = "enveloperb"
3
- version = "0.0.0"
4
- edition = "2021"
5
-
6
- [dependencies]
7
- enveloper = { git = "https://github.com/cipherstash/enveloper", branch = "main" }
8
- lazy_static = "^0.2.2"
9
- rutie = "0.8.4"
10
- tokio = { version = "^1.17.0", features = [ "rt-multi-thread" ] }
11
- aws-config = "0.10.1"
12
- aws-sdk-kms = "0.10.1"
13
- aws-types = { version = "0.10.1", features = [ "hardcoded-credentials" ] }
14
-
15
- [lib]
16
- name = "enveloperb"
17
- crate-type = ["cdylib"]
data/ext/Rakefile DELETED
@@ -1,5 +0,0 @@
1
- task :build do
2
- sh "cargo build --release"
3
- end
4
-
5
- task default: :build
data/src/lib.rs DELETED
@@ -1,195 +0,0 @@
1
- #[macro_use]
2
- extern crate rutie;
3
-
4
- #[macro_use]
5
- extern crate lazy_static;
6
-
7
- // I have deliberately not used more-specific symbols inside the aws_* crates because the
8
- // names are quite generic, and in the near future when we have more providers, we'll
9
- // almost certainly end up with naming clashes.
10
- use aws_config;
11
- use aws_sdk_kms;
12
- use aws_types;
13
- use enveloper::{EncryptedRecord, EnvelopeCipher, KMSKeyProvider, SimpleKeyProvider};
14
- use std::borrow::Cow;
15
- use tokio::runtime::Runtime;
16
- use rutie::{Class, Encoding, Hash, Module, Object, RString, Symbol, VerifiedObject, VM};
17
-
18
- module!(Enveloperb);
19
- class!(EnveloperbSimple);
20
- class!(EnveloperbAWSKMS);
21
- class!(EnveloperbEncryptedRecord);
22
-
23
- impl VerifiedObject for EnveloperbEncryptedRecord {
24
- fn is_correct_type<T: Object>(object: &T) -> bool {
25
- let klass = Module::from_existing("Enveloperb").get_nested_class("EncryptedRecord");
26
- klass.case_equals(object)
27
- }
28
-
29
- fn error_message() -> &'static str {
30
- "Error converting to Enveloperb::EncryptedRecord"
31
- }
32
- }
33
-
34
- pub struct SimpleCipher {
35
- cipher: EnvelopeCipher<SimpleKeyProvider>,
36
- runtime: Runtime,
37
- }
38
-
39
- pub struct AWSKMSCipher {
40
- cipher: EnvelopeCipher<KMSKeyProvider>,
41
- runtime: Runtime,
42
- }
43
-
44
- wrappable_struct!(SimpleCipher, SimpleCipherWrapper, SIMPLE_CIPHER_WRAPPER);
45
- wrappable_struct!(AWSKMSCipher, AWSKMSCipherWrapper, AWSKMS_CIPHER_WRAPPER);
46
- wrappable_struct!(EncryptedRecord, EncryptedRecordWrapper, ENCRYPTED_RECORD_WRAPPER);
47
-
48
- methods!(
49
- EnveloperbSimple,
50
- rbself,
51
-
52
- fn enveloperb_simple_new(rbkey: RString) -> EnveloperbSimple {
53
- let mut key: [u8; 16] = Default::default();
54
-
55
- key.clone_from_slice(rbkey.unwrap().to_bytes_unchecked());
56
-
57
- let provider = SimpleKeyProvider::init(key);
58
- let cipher = EnvelopeCipher::init(provider);
59
-
60
- let klass = Module::from_existing("Enveloperb").get_nested_class("Simple");
61
- return klass.wrap_data(SimpleCipher{ cipher: cipher, runtime: Runtime::new().unwrap() }, &*SIMPLE_CIPHER_WRAPPER);
62
- }
63
-
64
- fn enveloperb_simple_encrypt(rbtext: RString) -> EnveloperbEncryptedRecord {
65
- let cipher = rbself.get_data(&*SIMPLE_CIPHER_WRAPPER);
66
- let er_r = cipher.runtime.block_on(async {
67
- cipher.cipher.encrypt(rbtext.unwrap().to_bytes_unchecked()).await
68
- });
69
- let er = er_r.map_err(|e| VM::raise(Class::from_existing("RuntimeError"), &format!("Failed to perform encryption: {:?}", e))).unwrap();
70
-
71
- let klass = Module::from_existing("Enveloperb").get_nested_class("EncryptedRecord");
72
- return klass.wrap_data(er, &*ENCRYPTED_RECORD_WRAPPER);
73
- }
74
-
75
- fn enveloperb_simple_decrypt(rbrecord: EnveloperbEncryptedRecord) -> RString {
76
- let cipher = rbself.get_data(&*SIMPLE_CIPHER_WRAPPER);
77
- let e_record = rbrecord.unwrap();
78
- let record = e_record.get_data(&*ENCRYPTED_RECORD_WRAPPER);
79
-
80
- let vec_r = cipher.runtime.block_on(async {
81
- cipher.cipher.decrypt(record).await
82
- });
83
- let vec = vec_r.map_err(|e| VM::raise(Class::from_existing("RuntimeError"), &format!("Failed to perform decryption: {:?}", e))).unwrap();
84
-
85
- return RString::from_bytes(&vec, &Encoding::find("BINARY").unwrap());
86
- }
87
- );
88
-
89
- methods!(
90
- EnveloperbAWSKMS,
91
- rbself,
92
-
93
- fn enveloperb_awskms_new(rbkey: RString, rbcreds: Hash) -> EnveloperbAWSKMS {
94
- let raw_creds = rbcreds.unwrap();
95
- let rt = Runtime::new().unwrap();
96
-
97
- let kmsclient_config = if raw_creds.at(&Symbol::new("access_key_id")).is_nil() {
98
- rt.block_on(async {
99
- aws_config::load_from_env().await
100
- })
101
- } else {
102
- let rbregion = raw_creds.at(&Symbol::new("region")).try_convert_to::<RString>().unwrap();
103
- let region = Some(aws_types::region::Region::new(rbregion.to_str().to_owned()));
104
-
105
- let rbkey_id = raw_creds.at(&Symbol::new("access_key_id")).try_convert_to::<RString>().unwrap();
106
- let key_id = rbkey_id.to_str();
107
-
108
- let rbsecret = raw_creds.at(&Symbol::new("secret_access_key")).try_convert_to::<RString>().unwrap();
109
- let secret = rbsecret.to_str();
110
-
111
- let token = match raw_creds.at(&Symbol::new("session_token")).try_convert_to::<RString>() {
112
- Ok(str) => Some(str.to_string()),
113
- Err(_) => None
114
- };
115
-
116
- let aws_creds = aws_types::Credentials::from_keys(key_id, secret, token);
117
- let creds_provider = aws_types::credentials::SharedCredentialsProvider::new(aws_creds);
118
-
119
- aws_types::sdk_config::SdkConfig::builder().region(region).credentials_provider(creds_provider).build()
120
- };
121
-
122
- let kmsclient = aws_sdk_kms::Client::new(&kmsclient_config);
123
- let provider = KMSKeyProvider::new(kmsclient, rbkey.unwrap().to_string());
124
- let cipher = EnvelopeCipher::init(provider);
125
-
126
- let klass = Module::from_existing("Enveloperb").get_nested_class("AWSKMS");
127
- return klass.wrap_data(AWSKMSCipher{ cipher: cipher, runtime: rt }, &*AWSKMS_CIPHER_WRAPPER);
128
- }
129
-
130
- fn enveloperb_awskms_encrypt(rbtext: RString) -> EnveloperbEncryptedRecord {
131
- let cipher = rbself.get_data(&*AWSKMS_CIPHER_WRAPPER);
132
- let er_r = cipher.runtime.block_on(async {
133
- cipher.cipher.encrypt(rbtext.unwrap().to_bytes_unchecked()).await
134
- });
135
- let er = er_r.map_err(|e| VM::raise(Class::from_existing("RuntimeError"), &format!("Failed to perform encryption: {:?}", e))).unwrap();
136
-
137
- let klass = Module::from_existing("Enveloperb").get_nested_class("EncryptedRecord");
138
- return klass.wrap_data(er, &*ENCRYPTED_RECORD_WRAPPER);
139
- }
140
-
141
- fn enveloperb_awskms_decrypt(rbrecord: EnveloperbEncryptedRecord) -> RString {
142
- let cipher = rbself.get_data(&*AWSKMS_CIPHER_WRAPPER);
143
- let e_record = rbrecord.unwrap();
144
- let record = e_record.get_data(&*ENCRYPTED_RECORD_WRAPPER);
145
-
146
- let vec_r = cipher.runtime.block_on(async {
147
- cipher.cipher.decrypt(record).await
148
- });
149
- let vec = vec_r.map_err(|e| VM::raise(Class::from_existing("RuntimeError"), &format!("Failed to perform decryption: {:?}", e))).unwrap();
150
-
151
- return RString::from_bytes(&vec, &Encoding::find("BINARY").unwrap());
152
- }
153
- );
154
-
155
- methods!(
156
- EnveloperbEncryptedRecord,
157
- rbself,
158
-
159
- fn enveloperb_encrypted_record_new(serialized_record: RString) -> EnveloperbEncryptedRecord {
160
- let s = serialized_record.unwrap().to_vec_u8_unchecked();
161
- let ct = EncryptedRecord::from_vec(s).map_err(|e| VM::raise(Class::from_existing("ArgumentError"), &format!("Failed to decode encrypted record: {:?}", e))).unwrap();
162
-
163
- let klass = Module::from_existing("Enveloperb").get_nested_class("EncryptedRecord");
164
- return klass.wrap_data(ct, &*ENCRYPTED_RECORD_WRAPPER);
165
- }
166
-
167
- fn enveloperb_encrypted_record_serialize() -> RString {
168
- let record = rbself.get_data(&*ENCRYPTED_RECORD_WRAPPER);
169
-
170
- return RString::from_bytes(&record.to_vec().map_err(|e| VM::raise(Class::from_existing("RuntimeError"), &format!("Failed to encode encrypted record: {:?}", e))).unwrap(), &Encoding::find("BINARY").unwrap());
171
- }
172
- );
173
-
174
- #[allow(non_snake_case)]
175
- #[no_mangle]
176
- pub extern "C" fn Init_enveloperb() {
177
- Module::from_existing("Enveloperb").define(|envmod| {
178
- envmod.define_nested_class("Simple", None).define(|klass| {
179
- klass.singleton_class().def_private("_new", enveloperb_simple_new);
180
- klass.def_private("_encrypt", enveloperb_simple_encrypt);
181
- klass.def_private("_decrypt", enveloperb_simple_decrypt);
182
- });
183
-
184
- envmod.define_nested_class("AWSKMS", None).define(|klass| {
185
- klass.singleton_class().def_private("_new", enveloperb_awskms_new);
186
- klass.def_private("_encrypt", enveloperb_awskms_encrypt);
187
- klass.def_private("_decrypt", enveloperb_awskms_decrypt);
188
- });
189
-
190
- envmod.define_nested_class("EncryptedRecord", None).define(|klass| {
191
- klass.singleton_class().def_private("_new", enveloperb_encrypted_record_new);
192
- klass.def_private("_serialize", enveloperb_encrypted_record_serialize);
193
- });
194
- });
195
- }
Binary file