Class: Sentry::AsymmetricSentry

Inherits:
Object
  • Object
show all
Defined in:
lib/sentry/asymmetric_sentry.rb

Constant Summary collapse

@@default_private_key_file =
nil
@@default_public_key_file =
nil
@@default_symmetric_algorithm =
nil

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ AsymmetricSentry

available options:

  • :private_key_file - encrypted private key file

  • :public_key_file - public key file

  • :symmetric_algorithm - algorithm to use for SymmetricSentry



14
15
16
17
18
19
# File 'lib/sentry/asymmetric_sentry.rb', line 14

def initialize(options = {})
  @public_key = @private_key = nil
  private_key_file = options[:private_key_file]
  public_key_file  = options[:public_key_file] || @@default_public_key_file
  @symmetric_algorithm = options[:symmetric_algorithm] || @@default_symmetric_algorithm
end

Instance Attribute Details

#private_key_fileObject

Returns the value of attribute private_key_file.



3
4
5
# File 'lib/sentry/asymmetric_sentry.rb', line 3

def private_key_file
  @private_key_file
end

#public_key_fileObject

Returns the value of attribute public_key_file.



4
5
6
# File 'lib/sentry/asymmetric_sentry.rb', line 4

def public_key_file
  @public_key_file
end

#symmetric_algorithmObject

Returns the value of attribute symmetric_algorithm.



5
6
7
# File 'lib/sentry/asymmetric_sentry.rb', line 5

def symmetric_algorithm
  @symmetric_algorithm
end

Class Method Details

.decrypt(data, key = nil) ⇒ Object



78
79
80
# File 'lib/sentry/asymmetric_sentry.rb', line 78

def decrypt(data, key = nil)
  self.new.decrypt(data, key)
end

.decrypt_from_base64(data, key = nil) ⇒ Object



82
83
84
# File 'lib/sentry/asymmetric_sentry.rb', line 82

def decrypt_from_base64(data, key = nil)
  self.new.decrypt_from_base64(data, key)
end

.default_private_key_fileObject

cattr_accessor would be lovely



87
88
89
# File 'lib/sentry/asymmetric_sentry.rb', line 87

def default_private_key_file
  @@default_private_key_file
end

.default_private_key_file=(value) ⇒ Object



91
92
93
# File 'lib/sentry/asymmetric_sentry.rb', line 91

def default_private_key_file=(value)
  @@default_private_key_file = value
end

.default_public_key_fileObject



95
96
97
# File 'lib/sentry/asymmetric_sentry.rb', line 95

def default_public_key_file
  @@default_public_key_file
end

.default_public_key_file=(value) ⇒ Object



99
100
101
# File 'lib/sentry/asymmetric_sentry.rb', line 99

def default_public_key_file=(value)
  @@default_public_key_file = value
end

.default_symmetric_algorithmObject



103
104
105
# File 'lib/sentry/asymmetric_sentry.rb', line 103

def default_symmetric_algorithm
  @@default_symmetric_algorithm
end

.default_symmetric_algorithm=(value) ⇒ Object



107
108
109
# File 'lib/sentry/asymmetric_sentry.rb', line 107

def default_symmetric_algorithm=(value)
  @@default_symmetric_algorithm = value
end

.encrypt(data) ⇒ Object



70
71
72
# File 'lib/sentry/asymmetric_sentry.rb', line 70

def encrypt(data)
  self.new.encrypt(data)
end

.encrypt_to_base64(data) ⇒ Object



74
75
76
# File 'lib/sentry/asymmetric_sentry.rb', line 74

def encrypt_to_base64(data)
  self.new.encrypt_to_base64(data)
end

.save_random_rsa_key(private_key_file, public_key_file, options = {}) ⇒ Object

  • :key - secret password

  • :symmetric_algorithm - symmetrical algorithm to use



60
61
62
63
64
65
66
67
68
# File 'lib/sentry/asymmetric_sentry.rb', line 60

def save_random_rsa_key(private_key_file, public_key_file, options = {})
  rsa = OpenSSL::PKey::RSA.new(512)
  public_key = rsa.public_key
  private_key = options[:key] ? 
    SymmetricSentry.new(:algorithm => options[:symmetric_algorithm]).encrypt_to_base64(rsa.to_s, options[:key]) :
    rsa.to_s
  File.open(public_key_file, 'w')  { |f| f.write(public_key) }
  File.open(private_key_file, 'w') { |f| f.write(private_key) }
end

Instance Method Details

#decrypt(data, key = nil) ⇒ Object

Raises:



30
31
32
33
# File 'lib/sentry/asymmetric_sentry.rb', line 30

def decrypt(data, key = nil)
  raise NoPrivateKeyError unless private?
  private_rsa(key).private_decrypt(data)
end

#decrypt_from_base64(data, key = nil) ⇒ Object



35
36
37
# File 'lib/sentry/asymmetric_sentry.rb', line 35

def decrypt_from_base64(data, key = nil)
  decrypt(Base64.decode64(data), key)
end

#encrypt(data) ⇒ Object

Raises:



21
22
23
24
# File 'lib/sentry/asymmetric_sentry.rb', line 21

def encrypt(data)
  raise NoPublicKeyError unless public?
  public_rsa.public_encrypt(data)
end

#encrypt_to_base64(data) ⇒ Object



26
27
28
# File 'lib/sentry/asymmetric_sentry.rb', line 26

def encrypt_to_base64(data)
  Base64.encode64(encrypt(data))
end

#private?Boolean

Returns:

  • (Boolean)


52
53
54
55
# File 'lib/sentry/asymmetric_sentry.rb', line 52

def private?
  return true unless @private_key.nil?
  load_private_key and return @private_key
end

#public?Boolean

Returns:

  • (Boolean)


47
48
49
50
# File 'lib/sentry/asymmetric_sentry.rb', line 47

def public?
  return true unless @public_key.nil?
  load_public_key and return @public_key
end