enquo-core 0.5.0-arm64-darwin → 0.5.0.1.gab6af4a-arm64-darwin

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: f87cb0b46c9858389184f4227ade8d684471933cd48158d4474bcdba02977892
4
- data.tar.gz: e0a8da5b1c6b033174010ece807a504681f921a918e07b6a0213a2a916b5edb7
3
+ metadata.gz: 8b24af989e38e5a49be62f401d8c2b68fd25f18b663b43fb0761091add23a4b6
4
+ data.tar.gz: 75dd3746f3b794a22d3ae96083ac137a4a9420e170f1379258ddf248a4b2a101
5
5
  SHA512:
6
- metadata.gz: acb6e7b483751992743cb4c012ffb05458499b3e6b84f270a46fa04d6da1fbe2e800fb5ea81d9128111155ee23a738774cf751451c95ef11163a55ea00e50546
7
- data.tar.gz: 78896aafeaaf463530ae59fff72d9f336e3474960d02d8cf480b44a0ce3cc2c868af9e8f1525214522664b9a7acc64860d1c6ab6146e106d69a310b137e91336
6
+ metadata.gz: ec43ac2cd04fd27cc5c2a21b9207457ef46240315a8fb5a3895a7997ebcf1517c0e9557b064bcece6b3b3b8aa4c9cf9952049b60bbfc8bed5ca8191a4c6c0ec3
7
+ data.tar.gz: a2d9d422497af2251dbc4ef823cc63d7f0153b6d70b656ddc4f599ef9d80af01d128270ec12d4bbf6cd8dcede7006283f2bd59451011b28e450aae1406d75342
data/ext/enquo/Cargo.lock CHANGED
@@ -296,6 +296,7 @@ dependencies = [
296
296
  "serde_bytes",
297
297
  "sha2",
298
298
  "thiserror",
299
+ "unicode-normalization",
299
300
  ]
300
301
 
301
302
  [[package]]
@@ -788,6 +789,21 @@ dependencies = [
788
789
  "syn",
789
790
  ]
790
791
 
792
+ [[package]]
793
+ name = "tinyvec"
794
+ version = "1.6.0"
795
+ source = "registry+https://github.com/rust-lang/crates.io-index"
796
+ checksum = "87cc5ceb3875bb20c2890005a4e226a4651264a5c75edb2421b52861a0a0cb50"
797
+ dependencies = [
798
+ "tinyvec_macros",
799
+ ]
800
+
801
+ [[package]]
802
+ name = "tinyvec_macros"
803
+ version = "0.1.0"
804
+ source = "registry+https://github.com/rust-lang/crates.io-index"
805
+ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c"
806
+
791
807
  [[package]]
792
808
  name = "typenum"
793
809
  version = "1.15.0"
@@ -800,6 +816,15 @@ version = "1.0.3"
800
816
  source = "registry+https://github.com/rust-lang/crates.io-index"
801
817
  checksum = "c4f5b37a154999a8f3f98cc23a628d850e154479cd94decf3414696e12e31aaf"
802
818
 
819
+ [[package]]
820
+ name = "unicode-normalization"
821
+ version = "0.1.22"
822
+ source = "registry+https://github.com/rust-lang/crates.io-index"
823
+ checksum = "5c5713f0fc4b5db668a2ac63cdb7bb4469d8c9fed047b1d0292cc7b0ce2ba921"
824
+ dependencies = [
825
+ "tinyvec",
826
+ ]
827
+
803
828
  [[package]]
804
829
  name = "unicode-width"
805
830
  version = "0.1.9"
data/ext/enquo/src/lib.rs CHANGED
@@ -1,7 +1,7 @@
1
1
  #[macro_use]
2
2
  extern crate rutie;
3
3
 
4
- use enquo_core::{key_provider, Date, Field, Root, I64};
4
+ use enquo_core::{key_provider, Date, Field, Root, Text, I64};
5
5
  use rutie::{AnyObject, Class, Integer, Module, Object, RString, Symbol, VerifiedObject, VM};
6
6
 
7
7
  class!(EnquoRoot);
@@ -175,6 +175,48 @@ unsafe_methods!(
175
175
  ];
176
176
  klass.protect_send("new", &args).unwrap()
177
177
  }
178
+ fn enquo_field_encrypt_text(
179
+ text_obj: RString,
180
+ context_obj: RString,
181
+ mode_obj: Symbol
182
+ ) -> RString {
183
+ let text = text_obj.to_str();
184
+ let context = context_obj.to_vec_u8_unchecked();
185
+ let mode = mode_obj.to_str();
186
+
187
+ let field = rbself.get_data(&*FIELD_WRAPPER);
188
+
189
+ let mut res = maybe_raise(
190
+ if mode == "unsafe" {
191
+ Text::new_with_unsafe_parts(
192
+ text,
193
+ &context,
194
+ field,
195
+ )
196
+ } else {
197
+ Text::new(text, &context, field)
198
+ },
199
+ "Failed to create encrypted date",
200
+ );
201
+ if mode == "no_query" {
202
+ res.make_unqueryable();
203
+ }
204
+
205
+ RString::new_utf8(&maybe_raise(serde_json::to_string(&res), "Failed to JSONify ciphertext"))
206
+ },
207
+ fn enquo_field_decrypt_text(ciphertext_obj: RString, context_obj: RString) -> RString {
208
+ let ct = ciphertext_obj.to_str_unchecked();
209
+ let context = context_obj.to_vec_u8_unchecked();
210
+
211
+ let field = rbself.get_data(&*FIELD_WRAPPER);
212
+
213
+ let e_value: Text =
214
+ maybe_raise(serde_json::from_str(ct), "Failed to deserialize ciphertext");
215
+
216
+ let s = maybe_raise(e_value.decrypt(&context, field), "Failed to decrypt text value");
217
+
218
+ RString::new_utf8(&s)
219
+ }
178
220
  );
179
221
 
180
222
  #[allow(non_snake_case)]
@@ -197,6 +239,8 @@ pub extern "C" fn Init_enquo() {
197
239
  fieldklass.def_private("_decrypt_i64", enquo_field_decrypt_i64);
198
240
  fieldklass.def_private("_encrypt_date", enquo_field_encrypt_date);
199
241
  fieldklass.def_private("_decrypt_date", enquo_field_decrypt_date);
242
+ fieldklass.def_private("_encrypt_text", enquo_field_encrypt_text);
243
+ fieldklass.def_private("_decrypt_text", enquo_field_decrypt_text);
200
244
  });
201
245
  topmod.define_nested_module("RootKey").define(|rkmod| {
202
246
  rkmod
data/lib/2.7/enquo.bundle CHANGED
Binary file
data/lib/3.0/enquo.bundle CHANGED
Binary file
data/lib/3.1/enquo.bundle CHANGED
Binary file
data/lib/enquo/field.rb CHANGED
@@ -69,5 +69,41 @@ module Enquo
69
69
 
70
70
  _decrypt_date(data, ctx)
71
71
  end
72
+
73
+ def encrypt_text(t, ctx, safety: true, no_query: false)
74
+ unless t.is_a?(String)
75
+ raise ArgumentError, "Enquo::Field#encrypt_string can only encrypt Strings"
76
+ end
77
+
78
+ unless t.encoding == Encoding::UTF_8
79
+ raise ArgumentError, "Enquo::Field#encrypt_string can only encrypt UTF-8 strings (got a string encoding of #{t.encoding})"
80
+ end
81
+
82
+ unless t.valid_encoding?
83
+ raise ArgumentError, "Enquo::Field#encrypt_string can only encrypt validly-encoded UTF-8 strings"
84
+ end
85
+
86
+ unless ctx.is_a?(String)
87
+ raise ArgumentError, "Encryption context must be a string (got a #{ctx.class})"
88
+ end
89
+
90
+ _encrypt_text(t, ctx, no_query ? :no_query : safety == :unsafe ? :unsafe : :default)
91
+ end
92
+
93
+ def decrypt_text(data, ctx)
94
+ unless data.is_a?(String)
95
+ raise ArgumentError, "Enquo::Field#decrypt_text can only decrypt from a string (got #{data.class})"
96
+ end
97
+
98
+ unless data.encoding == Encoding::UTF_8 && data.valid_encoding?
99
+ raise ArgumentError, "Enquo::Field#decrypt_date can only decrypt validly-encoded UTF-8 strings (got #{data.encoding})"
100
+ end
101
+
102
+ unless ctx.is_a?(String)
103
+ raise ArgumentError, "Encryption context must be a string (got a #{ctx.class})"
104
+ end
105
+
106
+ _decrypt_text(data, ctx)
107
+ end
72
108
  end
73
109
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enquo-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.0
4
+ version: 0.5.0.1.gab6af4a
5
5
  platform: arm64-darwin
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-07 00:00:00.000000000 Z
11
+ date: 2022-10-08 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -193,9 +193,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
193
193
  version: 3.2.dev
194
194
  required_rubygems_version: !ruby/object:Gem::Requirement
195
195
  requirements:
196
- - - ">="
196
+ - - ">"
197
197
  - !ruby/object:Gem::Version
198
- version: '0'
198
+ version: 1.3.1
199
199
  requirements: []
200
200
  rubygems_version: 3.3.22
201
201
  signing_key: