enquo-core 0.3.0-x86_64-linux → 0.3.0.1.g08acb85-x86_64-linux

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: 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: