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 +4 -4
- data/enquo-core.gemspec +1 -0
- data/ext/enquo/Cargo.lock +2 -2
- data/ext/enquo/src/lib.rs +43 -2
- data/lib/2.7/enquo.so +0 -0
- data/lib/3.0/enquo.so +0 -0
- data/lib/3.1/enquo.so +0 -0
- data/lib/enquo/field.rb +28 -0
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e5ceab7c4ec5fd86ff0006ac72c657cb0fc52299b84be7cbabcb0cafeddb14a7
|
4
|
+
data.tar.gz: 5826f3c50b2b50b68e4609bbaa23303d0195b51ed36d0e5cac7fba4d5485d2ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
214
|
+
version = "0.4.1"
|
215
215
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
216
|
-
checksum = "
|
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::{
|
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.
|
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-
|
11
|
+
date: 2023-03-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|