enquo-core 0.6.0.7.gc8b36a2 → 0.6.0.10.g2771c04

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: 132f8ef68cd26acba61017a8c4e580ee8546c040ef24d38693bb68d831945749
4
- data.tar.gz: 909eb8bbd08642446829eef0b450da5d6746554ecb8979af84efcb69843a9a52
3
+ metadata.gz: a2ece6bc7c821f1b4c1c963b6d077b4870541206d8a0608fb8b65edade7472e1
4
+ data.tar.gz: e6defbe3ea9267fca6219b2a401286178fc6a01d5a3e10ee63dfba8a2be371ee
5
5
  SHA512:
6
- metadata.gz: 209dd96442ef7d01a42c2e42f1a568522c76b85d2fe9fbc23b2da64fb82daa2ddd408215929b4ede3f2d19cad087a532a75e7959b6a122bb434e1f9ab42eefb7
7
- data.tar.gz: 16671334b24e3c221e442af0dd595f8ed3d003b5bd85908a9a39d0acd56c4fe390d63fa4c99ca3f1d98422a88f2506726010410adbe67cf74dcb1eabce846c1a
6
+ metadata.gz: 595bcf211815fae9bbf555a8650102163d1b430e403639427722fbd49b2b434581defda0c7681476144d78948dd3ded5321b321c4ac836a1102959261991f457
7
+ data.tar.gz: e44291cc8110575dd5d7d230bcc31b17f0d9b5d3a77e735fd72e4afb0e47e2d8ba49d95dfd3f7d1091fb4e0229f8798143eb7d0f99867eb7140dd159775a3c3f
data/enquo-core.gemspec CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |s|
24
24
  s.metadata["bug_tracker_uri"] = "https://github.com/enquo/enquo-core/issues"
25
25
 
26
26
  s.files = `git ls-files -z`.split("\0").reject { |f| f =~ /^(G|spec|Rakefile)/ }
27
+ s.extensions = ["ext/enquo/extconf.rb"]
27
28
 
28
29
  s.required_ruby_version = ">= 2.7.0"
29
30
 
data/ext/enquo/Cargo.lock CHANGED
@@ -211,9 +211,9 @@ dependencies = [
211
211
 
212
212
  [[package]]
213
213
  name = "cretrit"
214
- version = "0.2.0"
214
+ version = "0.4.1"
215
215
  source = "registry+https://github.com/rust-lang/crates.io-index"
216
- checksum = "4df4760922c5f3dd56f84699b523b2aa6ce0b4b82845eff8eb4efc3e642dadf0"
216
+ checksum = "0b424f56a53c945d026954e4b431c9d8bd3cd8c431574c8f4b77f59e860c366a"
217
217
  dependencies = [
218
218
  "aes",
219
219
  "cmac",
data/ext/enquo/src/lib.rs CHANGED
@@ -1,8 +1,11 @@
1
1
  #[macro_use]
2
2
  extern crate rutie;
3
3
 
4
- use enquo_core::{key_provider, Date, Field, Root, Text, I64};
5
- use rutie::{AnyObject, Class, Integer, Module, Object, RString, Symbol, VerifiedObject, VM};
4
+ use enquo_core::{key_provider, Boolean, Date, Field, Root, Text, I64};
5
+ use rutie::{
6
+ AnyObject, Boolean as RBoolean, Class, Integer, Module, Object, RString, Symbol,
7
+ VerifiedObject, VM,
8
+ };
6
9
 
7
10
  class!(EnquoRoot);
8
11
  class!(EnquoRootKeyStatic);
@@ -84,6 +87,42 @@ impl VerifiedObject for EnquoRootKeyStatic {
84
87
  unsafe_methods!(
85
88
  EnquoField,
86
89
  rbself,
90
+ fn enquo_field_encrypt_bool(b_obj: RBoolean, context_obj: RString, mode_obj: Symbol) -> RString {
91
+ let b = b_obj.to_bool();
92
+ let context = context_obj.to_vec_u8_unchecked();
93
+ let mode = mode_obj.to_str();
94
+
95
+ let field = rbself.get_data(&*FIELD_WRAPPER);
96
+
97
+ let mut res = maybe_raise(
98
+ if mode == "unsafe" {
99
+ Boolean::new_with_unsafe_parts(b, &context, field)
100
+ } else {
101
+ Boolean::new(b, &context, field)
102
+ },
103
+ "Failed to create encrypted bool",
104
+ );
105
+ if mode == "no_query" {
106
+ res.make_unqueryable();
107
+ }
108
+
109
+ RString::new_utf8(&maybe_raise(serde_json::to_string(&res), "Failed to JSONify ciphertext"))
110
+ },
111
+ fn enquo_field_decrypt_bool(ciphertext_obj: RString, context_obj: RString) -> RBoolean {
112
+ let ct = ciphertext_obj.to_str_unchecked();
113
+ let context = context_obj.to_vec_u8_unchecked();
114
+
115
+ let field = rbself.get_data(&*FIELD_WRAPPER);
116
+
117
+ let e_value: Boolean =
118
+ maybe_raise(serde_json::from_str(ct), "Failed to deserialize ciphertext");
119
+
120
+ let value = maybe_raise(
121
+ e_value.decrypt(&context, field),
122
+ "Failed to decrypt bool value",
123
+ );
124
+ RBoolean::new(value)
125
+ },
87
126
  fn enquo_field_encrypt_i64(i_obj: Integer, context_obj: RString, mode_obj: Symbol) -> RString {
88
127
  let i = i_obj.to_i64();
89
128
  let context = context_obj.to_vec_u8_unchecked();
@@ -235,6 +274,8 @@ pub extern "C" fn Init_enquo() {
235
274
  topmod
236
275
  .define_nested_class("Field", None)
237
276
  .define(|fieldklass| {
277
+ fieldklass.def_private("_encrypt_bool", enquo_field_encrypt_bool);
278
+ fieldklass.def_private("_decrypt_bool", enquo_field_decrypt_bool);
238
279
  fieldklass.def_private("_encrypt_i64", enquo_field_encrypt_i64);
239
280
  fieldklass.def_private("_decrypt_i64", enquo_field_decrypt_i64);
240
281
  fieldklass.def_private("_encrypt_date", enquo_field_encrypt_date);
data/lib/enquo/field.rb CHANGED
@@ -6,6 +6,34 @@ module Enquo
6
6
  raise RuntimeError, "Enquo::Field cannot be instantiated directly; use Enquo::Crypto#field instead"
7
7
  end
8
8
 
9
+ def encrypt_bool(b, ctx, safety: true, no_query: false)
10
+ unless b.is_a?(TrueClass) || b.is_a?(FalseClass)
11
+ raise ArgumentError, "Enquo::Field#encrypt_bool can only encrypt booleans"
12
+ end
13
+
14
+ unless ctx.is_a?(String)
15
+ raise ArgumentError, "Encryption context must be a string (got a #{ctx.class})"
16
+ end
17
+
18
+ _encrypt_bool(b, ctx, no_query ? :no_query : safety == :unsafe ? :unsafe : :default)
19
+ end
20
+
21
+ def decrypt_bool(data, ctx)
22
+ unless data.is_a?(String)
23
+ raise ArgumentError, "Enquo::Field#decrypt_i64 can only decrypt from a string (got #{data.class})"
24
+ end
25
+
26
+ unless data.encoding == Encoding::UTF_8 && data.valid_encoding?
27
+ raise ArgumentError, "Enquo::Field#decrypt_i64 can only decrypt validly-encoded UTF-8 strings (got #{data.encoding})"
28
+ end
29
+
30
+ unless ctx.is_a?(String)
31
+ raise ArgumentError, "Encryption context must be a string (got a #{ctx.class})"
32
+ end
33
+
34
+ _decrypt_bool(data, ctx)
35
+ end
36
+
9
37
  def encrypt_i64(i, ctx, safety: true, no_query: false)
10
38
  unless i.is_a?(Integer)
11
39
  raise ArgumentError, "Enquo::Field#encrypt_i64 can only encrypt integers"
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.6.0.7.gc8b36a2
4
+ version: 0.6.0.10.g2771c04
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-02-26 00:00:00.000000000 Z
11
+ date: 2023-03-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -154,7 +154,8 @@ description:
154
154
  email:
155
155
  - matt@enquo.org
156
156
  executables: []
157
- extensions: []
157
+ extensions:
158
+ - ext/enquo/extconf.rb
158
159
  extra_rdoc_files: []
159
160
  files:
160
161
  - ".gitignore"