enquo-core 0.6.0.7.gc8b36a2-x86_64-linux → 0.6.0.10.g2771c04-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: 72f23bb3218c828b11d8e9f10cb1442b704ee86cd29425ce2dde1b431e65f747
4
- data.tar.gz: 0af40a1bb6394806e455fa68bfa7fd117f2a0205bc37dd4fa713de5ec55b1096
3
+ metadata.gz: e5ceab7c4ec5fd86ff0006ac72c657cb0fc52299b84be7cbabcb0cafeddb14a7
4
+ data.tar.gz: 5826f3c50b2b50b68e4609bbaa23303d0195b51ed36d0e5cac7fba4d5485d2ee
5
5
  SHA512:
6
- metadata.gz: 381b0d8b344625bc7199cb129a559d15fc2b6c0c3db5e92101c35b3f5f790d598e2ec0ab4ce75c38239ba1c966b9e3e3bfd1abf478074543b2cea8f8a1004ae3
7
- data.tar.gz: 3436bd3d59080867b0a15fcc23e996194a745e5acb772cc96b4902e2940191cad728c6270cf457caff1a374e67be25ed9531d33a79d0982c90e3306d9a3ee336
6
+ metadata.gz: a6072eb300dc6245a364fbb7ce1bfe784fda23ace257a361b10d5c70fbe0efef231f028357ce8fcecfb394da45344552c6dd9cb94c312eac0d832a2b523a598c
7
+ data.tar.gz: 8c17ba5e34e9b841fa3d36885dbdea8e3ff331e262a57d216ab1094c6af72187e74802a44892354367c4f78e926956bca1cb8ac172327b54f68306728a9db6a0
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/2.7/enquo.so CHANGED
Binary file
data/lib/3.0/enquo.so CHANGED
Binary file
data/lib/3.1/enquo.so CHANGED
Binary file
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: x86_64-linux
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