lib/sym.rb in sym-0.1.0 vs lib/sym.rb in sym-2.0.0
- old
+ new
@@ -1,5 +1,113 @@
-require "sym/version"
+require 'colored2'
+require 'zlib'
+require 'coin'
+require_relative 'sym/configuration'
+
+Sym::Configuration.configure do |config|
+ config.password_cipher = 'AES-128-CBC'
+ config.data_cipher = 'AES-256-CBC'
+ config.private_key_cipher = config.data_cipher
+ config.compression_enabled = true
+ config.compression_level = Zlib::BEST_COMPRESSION
+end
+
+#
+# == Using Sym Library
+#
+# This library is a "wrapper" that allows you to take advantage of the
+# symmetric encryption functionality provided by the {OpenSSL} gem (and the
+# underlying C library). In order to use the library in your ruby classes, you
+# should _include_ the module {Sym}.
+#
+# The including class is decorated with four instance methods from the
+# module {Sym::Extensions::InstanceMethods} and two class methods from
+# {Sym::Extensions::ClassMethods} – for specifics, please refer there.
+#
+# The two main instance methods are +#encr+ and +#decr+, which as the name
+# implies, perform two-way symmetric encryption and decryption of any Ruby object
+# that can be +marshaled+.
+#
+# Two additional instance methods +#encr_password+ and +#decr_password+ turn on
+# password-based encryption, which actually uses a password to construct a 128-bit
+# long private key, and then uses that in the encryption of the data.
+# You could use them to encrypt data with a password instead of a randomly
+# generated private key.
+#
+# The library comes with a rich CLI interface, which is mostly encapsulated under the
+# +Sym::App+ namespace.
+#
+# The +sym+ executable that is the "app" in this case, and is a _user_ of the
+# API methods +#encr+ and +#decr+.
+#
+# Create a new key with +#create_private_key+ class method, which returns a new
+# key every time it's called, or with +#private_key+ class method, which either
+# assigns, or creates and caches the private key at a class level.
+#
+# == Example
+#
+# require 'sym'
+#
+# class TestClass
+# include Sym
+# # read the key from environmant variable and assign to this class.
+# private_key ENV['PRIVATE_KEY']
+#
+# def sensitive_value=(value)
+# @sensitive_value = encr(value, self.class.private_key)
+# end
+#
+# def sensitive_value
+# decr(@sensitive_value, self.class.private_key)
+# end
+# end
+#
+# == Private Key
+#
+# They private key can be generated by +TestClass.create_private_key+
+# which returns but does not store a new random 256-bit key.
+#
+# The key can be assigned and saved, or auto-generated and saved using the
+# +#private_key+ method on the class that includes the +Sym+ module.
+#
+# Each class including the +Sym+ module would get their own +#private_key#
+# class-instance variable accessor, and a possible value.
+#
+# For example:
+#
+#
+
+module Kernel
+ def require_dir(___dir)
+ @___dir ||= File.dirname(__FILE__)
+ # require files using a consistent order based on the dir/file name.
+ # this should be OS-neutral
+ Dir["#{@___dir}/#{___dir}/*.rb"].sort.each do |___file|
+ require(___file)
+ end
+ end
+end
+
+require_dir 'sym/extensions'
+
module Sym
- # Your code goes here...
+ def self.included(klass)
+ klass.instance_eval do
+ include ::Sym::Extensions::InstanceMethods
+ extend ::Sym::Extensions::ClassMethods
+ class << self
+ def private_key(value = nil)
+ if value
+ @private_key= value
+ elsif @private_key
+ @private_key
+ else
+ @private_key= self.create_private_key
+ end
+ @private_key
+ end
+ end
+ end
+ end
end
+