Module: Strongbox::ClassMethods
- Defined in:
- lib/strongbox.rb
Instance Method Summary collapse
-
#encrypt_with_public_key(*args) ⇒ Object
encrypt_with_public_key
gives the class it is called on an attribute that when assigned is automatically encrypted using a public key.
Instance Method Details
#encrypt_with_public_key(*args) ⇒ Object
encrypt_with_public_key
gives the class it is called on an attribute that when assigned is automatically encrypted using a public key. This allows the unattended encryption of data, without exposing the information need to decrypt it (as would be the case when using symmetric key encryption alone). Small amounts of data may be encrypted directly with the public key. Larger data is encrypted using symmetric encryption. The encrypted data is stored in the database column of the same name as the attibute. If symmetric encryption is used (the default) additional column are need to store the generated password and IV.
Last argument should be the options hash Argument 0..-2 contains columns to be encrypted
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 |
# File 'lib/strongbox.rb', line 53 def encrypt_with_public_key(*args) include InstanceMethods = args.delete_at(-1) || {} unless .is_a?(Hash) args.push() = {} end if args.one? name = args.first else return args.each { |name| encrypt_with_public_key(name, ) } end if respond_to?(:class_attribute) self. = {} if .nil? else class_inheritable_reader :lock_options write_inheritable_attribute(:lock_options, {}) if .nil? end [name] = .symbolize_keys.reverse_merge Strongbox. define_method name do lock_for(name) end define_method "#{name}=" do | plaintext | lock_for(name).content plaintext end if [name][:deferred_encryption] before_save do lock_for(name).encrypt! end end end |