enquo-core 0.6.0.7.gc8b36a2 → 0.6.0.10.g2771c04
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/enquo/field.rb +28 -0
- metadata +4 -3
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: a2ece6bc7c821f1b4c1c963b6d077b4870541206d8a0608fb8b65edade7472e1
         | 
| 4 | 
            +
              data.tar.gz: e6defbe3ea9267fca6219b2a401286178fc6a01d5a3e10ee63dfba8a2be371ee
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 595bcf211815fae9bbf555a8650102163d1b430e403639427722fbd49b2b434581defda0c7681476144d78948dd3ded5321b321c4ac836a1102959261991f457
         | 
| 7 | 
            +
              data.tar.gz: e44291cc8110575dd5d7d230bcc31b17f0d9b5d3a77e735fd72e4afb0e47e2d8ba49d95dfd3f7d1091fb4e0229f8798143eb7d0f99867eb7140dd159775a3c3f
         | 
    
        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/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: ruby
         | 
| 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
         | 
| @@ -154,7 +154,8 @@ description: | |
| 154 154 | 
             
            email:
         | 
| 155 155 | 
             
            - matt@enquo.org
         | 
| 156 156 | 
             
            executables: []
         | 
| 157 | 
            -
            extensions: | 
| 157 | 
            +
            extensions:
         | 
| 158 | 
            +
            - ext/enquo/extconf.rb
         | 
| 158 159 | 
             
            extra_rdoc_files: []
         | 
| 159 160 | 
             
            files:
         | 
| 160 161 | 
             
            - ".gitignore"
         |