Class: Gloo::Objs::Cipher
- Inherits:
-
Core::Obj
- Object
- Core::Baseo
- Core::Obj
- Gloo::Objs::Cipher
- Defined in:
- lib/gloo/objs/str_utils/cipher.rb
Constant Summary collapse
- KEYWORD =
'cipher'.freeze
- KEYWORD_SHORT =
'crypt'.freeze
- CIPHER_TYPE =
'AES-256-CBC'.freeze
- KEY =
'key'.freeze
- INIT_VECTOR =
'init_vector'.freeze
- DATA =
'data'.freeze
Constants inherited from Core::Baseo
Core::Baseo::NOT_IMPLEMENTED_ERR
Instance Attribute Summary
Attributes inherited from Core::Obj
Attributes inherited from Core::Baseo
Class Method Summary collapse
-
.decrypt(data, key, iv) ⇒ Object
Decrypt the data using the key and initialization vector.
-
.doc_data ⇒ Object
Get the object's documentation data.
-
.encrypt(data, key, iv) ⇒ Object
Encrypt the data using the key and initialization vector.
-
.messages ⇒ Object
Get a list of message names that this object receives.
-
.short_typename ⇒ Object
The short name of the object type.
-
.typename ⇒ Object
The name of the object type.
Instance Method Summary collapse
-
#add_children_on_create? ⇒ Boolean
Does this object have children to add when an object is created in interactive mode? This does not apply during obj load, etc.
-
#add_default_children ⇒ Object
Add children to this object.
-
#data ⇒ Object
Get the data value of the object.
-
#init_vector ⇒ Object
Get the Initialization Vector.
-
#key ⇒ Object
Get the Cipher Key.
-
#msg_decrypt ⇒ Object
Decrypt the encrypted child object.
-
#msg_encrypt ⇒ Object
Encrypt the decrypted child object.
-
#msg_generate_keys ⇒ Object
Generate random Key and Initialization Vector.
-
#update_data(new_val) ⇒ Object
Update the data value of the object.
-
#update_init_vector(new_val) ⇒ Object
Update the initialization vector value.
-
#update_key(new_val) ⇒ Object
Update the key value.
Methods inherited from Core::Obj
#add_child, can_create?, #can_receive_message?, #child_count, #child_index, #contains_child?, #delete_children, #dispatch, #display_value, #find_add_child, #find_child, #find_child_resolve_alias, #find_child_value, help, inherited, #initialize, #is_alias?, #is_container?, #is_function?, #msg_blank?, #msg_contains?, #msg_reload, #msg_responds_to?, #msg_unload, #multiline_value?, #pn, #remove_child, #render, #root?, #send_message, #set_parent, #set_value, #sql_value, #type_display, #value_display, #value_is_array?, #value_is_blank?, #value_string?
Methods inherited from Core::Baseo
Constructor Details
This class inherits a constructor from Gloo::Core::Obj
Class Method Details
.decrypt(data, key, iv) ⇒ Object
Decrypt the data using the key and initialization vector. Returns the decrypted data.
178 179 180 181 182 183 184 185 186 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 178 def self.decrypt( data, key, iv ) cipher = OpenSSL::Cipher.new( CIPHER_TYPE ) data = Base64.decode64( data ) cipher.decrypt cipher.key = Base64.decode64( key ) cipher.iv = Base64.decode64( iv ) unless iv.blank? return cipher.update( data ) + cipher.final end |
.doc_data ⇒ Object
Get the object's documentation data.
195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 195 def self.doc_data { :name => KEYWORD, :shortcut => KEYWORD_SHORT, :description => 'Tool to encrypt and decrypt data.', :children => [ 'key (string) — The encryption key. Base64 encoded.', 'init_vector (string) — The initialization vector. Base64 encoded.', 'data (string) — The encrypted or decrypted data.' ], :messages => [ 'generate_keys — Generate an encryption key and initialization vector. The keys are base64 encoded.', 'encrypt — Encrypt the data.', 'decrypt — Decrypt the data.' ], :examples => <<~EXAMPLES.strip # # Encrypt and Decrypt a string. # encrypt [can] : str [string] : Encrypt your data for better security! cipher [cipher] : key [string] : init_vector [string] : data [string] : on_load [script] : show show 'Original string' (white) show ^.str show show 'Generating Key' (white) tell ^.cipher to generate_keys show ^.cipher.key show ^.cipher.init_vector show show 'Encrpting the string' (white) put ^.str into ^.cipher.data tell ^.cipher to encrypt show ^.cipher.data show show 'Decrypting the string' (white) tell ^.cipher to decrypt show ^.cipher.data show EXAMPLES } end |
.encrypt(data, key, iv) ⇒ Object
Encrypt the data using the key and initialization vector. Returns the encrypted data (base64 encoded).
164 165 166 167 168 169 170 171 172 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 164 def self.encrypt( data, key, iv ) cipher = OpenSSL::Cipher.new( CIPHER_TYPE ) cipher.encrypt cipher.key = Base64.decode64( key ) cipher.iv = Base64.decode64( iv ) unless iv.blank? encrypted_msg = cipher.update( data ) + cipher.final return Base64.encode64( encrypted_msg ) end |
.messages ⇒ Object
Get a list of message names that this object receives.
123 124 125 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 123 def self. return super + %w[generate_keys encrypt decrypt] end |
.short_typename ⇒ Object
The short name of the object type.
31 32 33 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 31 def self.short_typename return KEYWORD_SHORT end |
.typename ⇒ Object
The name of the object type.
24 25 26 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 24 def self.typename return KEYWORD end |
Instance Method Details
#add_children_on_create? ⇒ Boolean
Does this object have children to add when an object is created in interactive mode? This does not apply during obj load, etc.
100 101 102 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 100 def add_children_on_create? return true end |
#add_default_children ⇒ Object
Add children to this object. This is used by containers to add children needed for default configurations.
109 110 111 112 113 114 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 109 def add_default_children fac = @engine.factory fac.create_string KEY, '', self fac.create_string INIT_VECTOR, '', self fac.create_string DATA, '', self end |
#data ⇒ Object
Get the data value of the object. This might be encrypted or decrypted based on what action was last taken.
56 57 58 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 56 def data return find_child_value DATA end |
#init_vector ⇒ Object
Get the Initialization Vector. Returns nil if there is none.
47 48 49 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 47 def init_vector return find_child_value INIT_VECTOR end |
#key ⇒ Object
Get the Cipher Key. Returns nil if there is none.
39 40 41 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 39 def key return find_child_value KEY end |
#msg_decrypt ⇒ Object
Decrypt the encrypted child object.
145 146 147 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 145 def msg_decrypt update_data Cipher.decrypt( data, key, init_vector ) end |
#msg_encrypt ⇒ Object
Encrypt the decrypted child object.
152 153 154 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 152 def msg_encrypt update_data Cipher.encrypt( data, key, init_vector ) end |
#msg_generate_keys ⇒ Object
Generate random Key and Initialization Vector.
130 131 132 133 134 135 136 137 138 139 140 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 130 def msg_generate_keys cipher = OpenSSL::Cipher.new( CIPHER_TYPE ) key = cipher.random_key key = Base64.encode64 key update_key key iv = cipher.random_iv iv = Base64.encode64 iv update_init_vector iv end |
#update_data(new_val) ⇒ Object
Update the data value of the object.
83 84 85 86 87 88 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 83 def update_data( new_val ) o = find_child_resolve_alias DATA return unless o o.set_value new_val end |
#update_init_vector(new_val) ⇒ Object
Update the initialization vector value.
73 74 75 76 77 78 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 73 def update_init_vector( new_val ) o = find_child_resolve_alias INIT_VECTOR return unless o o.set_value new_val end |
#update_key(new_val) ⇒ Object
Update the key value.
63 64 65 66 67 68 |
# File 'lib/gloo/objs/str_utils/cipher.rb', line 63 def update_key( new_val ) o = find_child_resolve_alias KEY return unless o o.set_value new_val end |