enquo-core 0.3.0-x86_64-linux → 0.3.0.1.g08acb85-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: f861cc4ad5091ee2054990be20f8b93a0818ae400acd4a7391266fa95c4dbfab
4
- data.tar.gz: 64b650fba57683257192cb3b78c368523e1f6ddab3120530d15f3e902e0356e0
3
+ metadata.gz: d71a6123dc515edcc327230b5977873c187a454e6c4a06535e8a39b7b53f3177
4
+ data.tar.gz: 0b29c3f9fc44ab11797d3ad610c9e23e2a1eb5aa2d3e39ba99915a9cb6cc74a5
5
5
  SHA512:
6
- metadata.gz: c632e4685e19684f41636c787e152b5d73998b92f678bc71505546d6b0532cd2a2b9338611348ed7bf3c379713b1ed14a5b23ea838d32d242e4fa17634216937
7
- data.tar.gz: 0ad51ba6533e566d8e19234ebba80b3cdf369653d2bce47ddd8edfac22d446a453e9d1a5f8e74a1bac58245ded5a4d654708f9969dbe0b5e5241749dcd5b93c7
6
+ metadata.gz: 13561fe162bc4eb2509773ddd3627ec698b98ba18552b0290bacffb601f942dbf01644c2a6695abd66db3a072377eefc1bf5d3641095e84392585a0e3451a39a
7
+ data.tar.gz: e2d7d0f5347b9e2eb20c99d8751a0f8fcab73e513f316fa73b8b4e3c3aa1a100cc5798a89d89b19f9a9f19c1f304002f84d514ed8d626ad6c73f608240eca37d
data/ext/enquo/src/lib.rs CHANGED
@@ -1,8 +1,8 @@
1
1
  #[macro_use]
2
2
  extern crate rutie;
3
3
 
4
- use enquo_core::{Field, Root, I64};
5
- use rutie::{Class, Integer, Module, Object, RString, Symbol, VerifiedObject, VM};
4
+ use enquo_core::{Date, Field, Root, I64};
5
+ use rutie::{AnyObject, Class, Integer, Module, Object, RString, Symbol, VerifiedObject, VM};
6
6
 
7
7
  class!(EnquoRoot);
8
8
  class!(EnquoRootKeyStatic);
@@ -57,7 +57,8 @@ methods!(
57
57
  EnquoRootKeyStatic,
58
58
  _rbself,
59
59
  fn enquo_root_key_static_new(root_key: RString) -> EnquoRootKeyStatic {
60
- let k = root_key.unwrap().to_vec_u8_unchecked();
60
+ #[allow(clippy::redundant_clone)]
61
+ let k = root_key.unwrap().to_vec_u8_unchecked().to_owned();
61
62
  let klass = Module::from_existing("Enquo")
62
63
  .get_nested_class("RootKey")
63
64
  .get_nested_class("Static");
@@ -78,6 +79,8 @@ impl VerifiedObject for EnquoRootKeyStatic {
78
79
  }
79
80
  }
80
81
 
82
+ // rustfmt fucks this so it doesn't compile
83
+ #[rustfmt::skip]
81
84
  methods!(
82
85
  EnquoField,
83
86
  rbself,
@@ -114,6 +117,58 @@ methods!(
114
117
  "Failed to decrypt i64 value",
115
118
  );
116
119
  Integer::from(value)
120
+ },
121
+ fn enquo_field_encrypt_date(
122
+ y_r: Integer,
123
+ m_r: Integer,
124
+ d_r: Integer,
125
+ context: RString,
126
+ mode: Symbol
127
+ ) -> 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 field = rbself.get_data(&*FIELD_WRAPPER);
132
+ let r_mode = mode.unwrap();
133
+ let s_mode = r_mode.to_str();
134
+
135
+ let mut res = maybe_raise(
136
+ if s_mode == "unsafe" {
137
+ Date::new_with_unsafe_parts(
138
+ (y, m, d),
139
+ &context.unwrap().to_vec_u8_unchecked(),
140
+ field,
141
+ )
142
+ } else {
143
+ Date::new((y, m, d), &context.unwrap().to_vec_u8_unchecked(), field)
144
+ },
145
+ "Failed to create encrypted date",
146
+ );
147
+ if s_mode == "no_query" {
148
+ res.drop_ore_ciphertexts();
149
+ }
150
+
151
+ RString::new_utf8(&serde_json::to_string(&res).unwrap())
152
+ },
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");
158
+
159
+ let field = rbself.get_data(&*FIELD_WRAPPER);
160
+
161
+ let (y, m, d) = maybe_raise(
162
+ e_value.decrypt(&context.unwrap().to_vec_u8_unchecked(), field),
163
+ "Failed to decrypt date value",
164
+ );
165
+ let klass = Class::from_existing("Date");
166
+ let args: [AnyObject; 3] = [
167
+ Integer::from(y as i32).into(),
168
+ Integer::from(m as i32).into(),
169
+ Integer::from(d as i32).into(),
170
+ ];
171
+ klass.protect_send("new", &args).unwrap()
117
172
  }
118
173
  );
119
174
 
@@ -135,6 +190,8 @@ pub extern "C" fn Init_enquo() {
135
190
  .define(|fieldklass| {
136
191
  fieldklass.def_private("_encrypt_i64", enquo_field_encrypt_i64);
137
192
  fieldklass.def_private("_decrypt_i64", enquo_field_decrypt_i64);
193
+ fieldklass.def_private("_encrypt_date", enquo_field_encrypt_date);
194
+ fieldklass.def_private("_decrypt_date", enquo_field_decrypt_date);
138
195
  });
139
196
  topmod.define_nested_module("RootKey").define(|rkmod| {
140
197
  rkmod
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
@@ -1,3 +1,5 @@
1
+ require "date"
2
+
1
3
  module Enquo
2
4
  class Field
3
5
  def self.new(*_)
@@ -35,5 +37,37 @@ module Enquo
35
37
 
36
38
  _decrypt_i64(data, ctx)
37
39
  end
40
+
41
+ def encrypt_date(d, ctx, safety: true, no_query: false)
42
+ unless d.is_a?(Date)
43
+ raise ArgumentError, "Enquo::Field#encrypt_date can only encrypt Dates"
44
+ end
45
+
46
+ unless d.year >= -2 ** 15 && d.year < 2 ** 15 - 1
47
+ raise RangeError, "Enquo::Field#encrypt_date can only encrypt dates where the year is between -32,768 and 32,767 (got #{d.year})"
48
+ end
49
+
50
+ unless ctx.is_a?(String)
51
+ raise ArgumentError, "Encryption context must be a string (got a #{ctx.class})"
52
+ end
53
+
54
+ _encrypt_date(d.year, d.month, d.day, ctx, no_query ? :no_query : safety == :unsafe ? :unsafe : :default)
55
+ end
56
+
57
+ def decrypt_date(data, ctx)
58
+ unless data.is_a?(String)
59
+ raise ArgumentError, "Enquo::Field#decrypt_date can only decrypt from a string (got #{data.class})"
60
+ end
61
+
62
+ unless data.encoding == Encoding::UTF_8 && data.valid_encoding?
63
+ raise ArgumentError, "Enquo::Field#decrypt_date can only decrypt validly-encoded UTF-8 strings (got #{data.encoding})"
64
+ end
65
+
66
+ unless ctx.is_a?(String)
67
+ raise ArgumentError, "Encryption context must be a string (got a #{ctx.class})"
68
+ end
69
+
70
+ _decrypt_date(data, ctx)
71
+ end
38
72
  end
39
73
  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.3.0
4
+ version: 0.3.0.1.g08acb85
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: 2022-10-03 00:00:00.000000000 Z
11
+ date: 2022-10-04 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: