enquo-core 0.4.0 → 0.5.0

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: c9e71059a52f31b33ee55e07b3acaf763bd9765cbdd0cff160bad9b614178171
4
- data.tar.gz: d79da25ac8979347dbd50dbd98701e406782f1065e80addb55c53c3848128268
3
+ metadata.gz: a5337cea19e7d4a4d645d63533679c737290dd20951695f980a11f8975462daf
4
+ data.tar.gz: e36973eacd6b0eec7d2e8329f0ae90f0de7cb427ad1bcd4997c68a9b05894c12
5
5
  SHA512:
6
- metadata.gz: 7499454f55461fc078f17ba131a9af26583c5d24fdc8180b4001b3f7cca75e0827e74cd224257e5f2124fe2760c7bc496c9cb6abd1c86c6952180bb480641a58
7
- data.tar.gz: b1e8bc88920b9d95b2083fd8729723c72d3efb8336e28a2506e81745ac823dec5c3ce4f7a68a63eb98ced9da468e283edf1eaecfe6d819719cdc73b2476df99d
6
+ metadata.gz: d9d30d389c60f1ab1aedcbd840cd3db5cf094c39e7ba08680f602635d5fd012a1f300e68bdcad6660c923c7bd1a3603ea9fb10e0dce43403a57cfc503d8f8e14
7
+ data.tar.gz: 839dec2bfccc6095225f1453831d36f86f7dfca9321947781008e99f5c4880b4551a51d28f75cc74bb0080b9590830b87519d933e14be23c77d0e96ca8fe32ea
data/ext/enquo/src/lib.rs CHANGED
@@ -1,17 +1,19 @@
1
1
  #[macro_use]
2
2
  extern crate rutie;
3
3
 
4
- use enquo_core::{Date, Field, Root, I64};
4
+ use enquo_core::{key_provider, Date, Field, Root, I64};
5
5
  use rutie::{AnyObject, Class, Integer, Module, Object, RString, Symbol, VerifiedObject, VM};
6
6
 
7
7
  class!(EnquoRoot);
8
8
  class!(EnquoRootKeyStatic);
9
9
  class!(EnquoField);
10
10
 
11
- type StaticRootKey = Vec<u8>;
12
-
13
11
  wrappable_struct!(Root<'static>, RootWrapper, ROOT_WRAPPER);
14
- wrappable_struct!(StaticRootKey, StaticRootKeyWrapper, STATIC_ROOT_KEY_WRAPPER);
12
+ wrappable_struct!(
13
+ key_provider::Static,
14
+ StaticRootKeyWrapper,
15
+ STATIC_ROOT_KEY_WRAPPER
16
+ );
15
17
  wrappable_struct!(Field, FieldWrapper, FIELD_WRAPPER);
16
18
 
17
19
  fn maybe_raise<T, E: std::error::Error>(r: Result<T, E>, s: &str) -> T {
@@ -24,27 +26,24 @@ fn maybe_raise<T, E: std::error::Error>(r: Result<T, E>, s: &str) -> T {
24
26
  .unwrap()
25
27
  }
26
28
 
27
- methods!(
29
+ unsafe_methods!(
28
30
  EnquoRoot,
29
31
  rbself,
30
32
  fn enquo_root_new_from_static_root_key(root_key_obj: EnquoRootKeyStatic) -> EnquoRoot {
31
- let root_key = root_key_obj.unwrap();
32
- // Not so needless after all, Clippy...
33
- #[allow(clippy::needless_borrow)]
34
- let rk = root_key.get_data(&*STATIC_ROOT_KEY_WRAPPER);
33
+ let rk = root_key_obj.get_data(&*STATIC_ROOT_KEY_WRAPPER);
35
34
  let root = maybe_raise(Root::new(rk), "Failed to create Enquo::Root");
36
35
 
37
36
  let klass = Module::from_existing("Enquo").get_nested_class("Root");
38
37
  klass.wrap_data(root, &*ROOT_WRAPPER)
39
38
  },
40
- fn enquo_root_field(relation: RString, name: RString) -> EnquoField {
39
+ fn enquo_root_field(relation_obj: RString, name_obj: RString) -> EnquoField {
40
+ let relation = relation_obj.to_vec_u8_unchecked();
41
+ let name = name_obj.to_vec_u8_unchecked();
42
+
41
43
  let root = rbself.get_data(&*ROOT_WRAPPER);
42
44
 
43
45
  let field = maybe_raise(
44
- root.field(
45
- &relation.unwrap().to_vec_u8_unchecked(),
46
- &name.unwrap().to_vec_u8_unchecked(),
47
- ),
46
+ root.field(&relation, &name),
48
47
  "Failed to create Enquo::Field",
49
48
  );
50
49
 
@@ -53,12 +52,13 @@ methods!(
53
52
  }
54
53
  );
55
54
 
56
- methods!(
55
+ unsafe_methods!(
57
56
  EnquoRootKeyStatic,
58
57
  _rbself,
59
- fn enquo_root_key_static_new(root_key: RString) -> EnquoRootKeyStatic {
60
- #[allow(clippy::redundant_clone)]
61
- let k = root_key.unwrap().to_vec_u8_unchecked().to_owned();
58
+ fn enquo_root_key_static_new(root_key_obj: RString) -> EnquoRootKeyStatic {
59
+ let root_key = root_key_obj.to_vec_u8_unchecked();
60
+
61
+ let k = key_provider::Static::new(&root_key);
62
62
  let klass = Module::from_existing("Enquo")
63
63
  .get_nested_class("RootKey")
64
64
  .get_nested_class("Static");
@@ -81,85 +81,90 @@ impl VerifiedObject for EnquoRootKeyStatic {
81
81
 
82
82
  // rustfmt fucks this so it doesn't compile
83
83
  #[rustfmt::skip]
84
- methods!(
84
+ unsafe_methods!(
85
85
  EnquoField,
86
86
  rbself,
87
- fn enquo_field_encrypt_i64(value: Integer, context: RString, mode: Symbol) -> RString {
88
- let i = value.unwrap().to_i64();
87
+ fn enquo_field_encrypt_i64(i_obj: Integer, context_obj: RString, mode_obj: Symbol) -> RString {
88
+ let i = i_obj.to_i64();
89
+ let context = context_obj.to_vec_u8_unchecked();
90
+ let mode = mode_obj.to_str();
91
+
89
92
  let field = rbself.get_data(&*FIELD_WRAPPER);
90
- let r_mode = mode.unwrap();
91
- let s_mode = r_mode.to_str();
92
93
 
93
94
  let mut res = maybe_raise(
94
- if s_mode == "unsafe" {
95
- I64::new_with_unsafe_parts(i, &context.unwrap().to_vec_u8_unchecked(), field)
95
+ if mode == "unsafe" {
96
+ I64::new_with_unsafe_parts(i, &context, field)
96
97
  } else {
97
- I64::new(i, &context.unwrap().to_vec_u8_unchecked(), field)
98
+ I64::new(i, &context, field)
98
99
  },
99
100
  "Failed to create encrypted i64",
100
101
  );
101
- if s_mode == "no_query" {
102
+ if mode == "no_query" {
102
103
  res.drop_ore_ciphertext();
103
104
  }
104
105
 
105
- RString::new_utf8(&serde_json::to_string(&res).unwrap())
106
+ RString::new_utf8(&maybe_raise(serde_json::to_string(&res), "Failed to JSONify ciphertext"))
106
107
  },
107
- fn enquo_field_decrypt_i64(ciphertext: RString, context: RString) -> Integer {
108
- let ct_r = ciphertext.unwrap();
109
- let ct = ct_r.to_str_unchecked();
108
+ fn enquo_field_decrypt_i64(ciphertext_obj: RString, context_obj: RString) -> Integer {
109
+ let ct = ciphertext_obj.to_str_unchecked();
110
+ let context = context_obj.to_vec_u8_unchecked();
111
+
112
+ let field = rbself.get_data(&*FIELD_WRAPPER);
113
+
110
114
  let e_value: I64 =
111
115
  maybe_raise(serde_json::from_str(ct), "Failed to deserialize ciphertext");
112
116
 
113
- let field = rbself.get_data(&*FIELD_WRAPPER);
114
117
 
115
118
  let value = maybe_raise(
116
- e_value.decrypt(&context.unwrap().to_vec_u8_unchecked(), field),
119
+ e_value.decrypt(&context, field),
117
120
  "Failed to decrypt i64 value",
118
121
  );
119
122
  Integer::from(value)
120
123
  },
121
124
  fn enquo_field_encrypt_date(
122
- y_r: Integer,
123
- m_r: Integer,
124
- d_r: Integer,
125
- context: RString,
126
- mode: Symbol
125
+ y_obj: Integer,
126
+ m_obj: Integer,
127
+ d_obj: Integer,
128
+ context_obj: RString,
129
+ mode_obj: Symbol
127
130
  ) -> RString {
128
- let y = y_r.unwrap().to_i32() as i16;
129
- let m = m_r.unwrap().to_i32() as u8;
130
- let d = d_r.unwrap().to_i32() as u8;
131
+ let y = y_obj.to_i32() as i16;
132
+ let m = m_obj.to_i32() as u8;
133
+ let d = d_obj.to_i32() as u8;
134
+ let context = context_obj.to_vec_u8_unchecked();
135
+ let mode = mode_obj.to_str();
136
+
131
137
  let field = rbself.get_data(&*FIELD_WRAPPER);
132
- let r_mode = mode.unwrap();
133
- let s_mode = r_mode.to_str();
134
138
 
135
139
  let mut res = maybe_raise(
136
- if s_mode == "unsafe" {
140
+ if mode == "unsafe" {
137
141
  Date::new_with_unsafe_parts(
138
142
  (y, m, d),
139
- &context.unwrap().to_vec_u8_unchecked(),
143
+ &context,
140
144
  field,
141
145
  )
142
146
  } else {
143
- Date::new((y, m, d), &context.unwrap().to_vec_u8_unchecked(), field)
147
+ Date::new((y, m, d), &context, field)
144
148
  },
145
149
  "Failed to create encrypted date",
146
150
  );
147
- if s_mode == "no_query" {
151
+ if mode == "no_query" {
148
152
  res.drop_ore_ciphertexts();
149
153
  }
150
154
 
151
- RString::new_utf8(&serde_json::to_string(&res).unwrap())
155
+ RString::new_utf8(&maybe_raise(serde_json::to_string(&res), "Failed to JSONify ciphertext"))
152
156
  },
153
- fn enquo_field_decrypt_date(ciphertext: RString, context: RString) -> AnyObject {
154
- let ct_r = ciphertext.unwrap();
155
- let ct = ct_r.to_str_unchecked();
156
- let e_value: Date =
157
- maybe_raise(serde_json::from_str(ct), "Failed to deserialize ciphertext");
157
+ fn enquo_field_decrypt_date(ciphertext_obj: RString, context_obj: RString) -> AnyObject {
158
+ let ct = ciphertext_obj.to_str_unchecked();
159
+ let context = context_obj.to_vec_u8_unchecked();
158
160
 
159
161
  let field = rbself.get_data(&*FIELD_WRAPPER);
160
162
 
163
+ let e_value: Date =
164
+ maybe_raise(serde_json::from_str(ct), "Failed to deserialize ciphertext");
165
+
161
166
  let (y, m, d) = maybe_raise(
162
- e_value.decrypt(&context.unwrap().to_vec_u8_unchecked(), field),
167
+ e_value.decrypt(&context, field),
163
168
  "Failed to decrypt date value",
164
169
  );
165
170
  let klass = Class::from_existing("Date");
data/lib/enquo/root.rb CHANGED
@@ -6,6 +6,10 @@ module Enquo
6
6
  _new_from_static_root_key(key)
7
7
  else
8
8
  raise ArgumentError, "key must be a root key provider object (got a #{key.class})"
9
+ end.tap do |k|
10
+ # DIRTY HACK ALERT: take a reference to the key so it doesn't get GC'd
11
+ # If someone can come up with a better way to acheive this, I'm all ears
12
+ k.instance_variable_set(:@_key, key)
9
13
  end
10
14
  end
11
15
 
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.4.0
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Matt Palmer
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-10-04 00:00:00.000000000 Z
11
+ date: 2022-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler