Class: OsslRsa::Rsa

Inherits:
Object
  • Object
show all
Defined in:
lib/ossl_rsa/rsa.rb

Overview

rsa class

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Rsa

constructor. generate rsa instance by options. options : key size options : pem or der options : password

Parameters:

  • options (Hash) (defaults to: {})

    generate options.



18
19
20
21
22
# File 'lib/ossl_rsa/rsa.rb', line 18

def initialize(options={})

  # generate rsa instance.

  @rsa = OsslRsa::Generator.generate(options)
end

Instance Method Details

#decrypt(value, mode = OpenSSL::PKey::RSA::PKCS1_PADDING, base64_decode = true) ⇒ String

decrypt RSA. use private_key.

Parameters:

  • value (String)

    decrypt target value.

  • mode (integer) (defaults to: OpenSSL::PKey::RSA::PKCS1_PADDING)

    padding mode.

  • base64_decode (boolean) (defaults to: true)

    base64 decode flag.

Returns:

  • (String)

    decrypt value.



47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/ossl_rsa/rsa.rb', line 47

def decrypt(value, mode=OpenSSL::PKey::RSA::PKCS1_PADDING, base64_decode=true)

  # not private, return nil.

  return nil unless @rsa.private?

  # base64 decode

  if base64_decode
    value = Base64.decode64(value)
  end

  decrypt_value = @rsa.private_decrypt(value, mode)
  decrypt_value
end

#encrypt(value, mode = OpenSSL::PKey::RSA::PKCS1_PADDING, base64_encode = true) ⇒ String

encrypt RSA. use public_key.

Parameters:

  • value (String)

    encrypt target value.

  • mode (integer) (defaults to: OpenSSL::PKey::RSA::PKCS1_PADDING)

    padding mode.

  • base64_encode (boolean) (defaults to: true)

    base64 encode flag.

Returns:

  • (String)

    encrypt value.



29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/ossl_rsa/rsa.rb', line 29

def encrypt(value, mode=OpenSSL::PKey::RSA::PKCS1_PADDING, base64_encode=true)

  # not public, return nil.

  return nil unless @rsa.public?

  encrypt_value = @rsa.public_encrypt(value, mode)
  # base64 encode.

  if base64_encode
    encrypt_value = Base64.encode64(encrypt_value)
  end
  encrypt_value
end

#key_pair(mode, cipher = nil, pass = nil) ⇒ Hash

get private and public key. private key set self OpenSSL::PKey::RSA instance.

Parameters:

  • mode (integer)

    pem or der.

  • cipher (OpenSSL::Cipher) (defaults to: nil)

    cipher instance.

  • pass (String) (defaults to: nil)

    password

Returns:

  • (Hash)

    key pair hash. xx = private_key, xx = public_key



160
161
162
163
164
165
166
# File 'lib/ossl_rsa/rsa.rb', line 160

def key_pair(mode, cipher=nil, pass=nil)

  private_key = get_private_key(mode, cipher, pass)
  public_key = get_public_key(mode, cipher, pass)

  { private: private_key, public: public_key }
end

#private?boolean

private check.

Returns:

  • (boolean)

    OpsnSSL::PKey::RSA.private?



144
145
146
# File 'lib/ossl_rsa/rsa.rb', line 144

def private?
  @rsa.private?
end

#public?boolean

public check.

Returns:

  • (boolean)

    OpenSSL::PKey::RSA.public?



150
151
152
# File 'lib/ossl_rsa/rsa.rb', line 150

def public?
  @rsa.public?
end

#rsaOpenSSL::PKey::RSA

get rsa instance.

Returns:

  • (OpenSSL::PKey::RSA)

    rsa instance.



180
181
182
# File 'lib/ossl_rsa/rsa.rb', line 180

def rsa
  @rsa
end

#sign(digest, value, base64_encode = true) ⇒ String

sign data.

Parameters:

  • digest (String)

    digest method.

  • value (String)

    sign target value.

  • base64_encode (boolean) (defaults to: true)

    base64 encode flag.

Returns:

  • (String)

    sign value.



66
67
68
69
70
71
72
73
74
75
76
77
# File 'lib/ossl_rsa/rsa.rb', line 66

def sign(digest, value, base64_encode=true)

  # not private, return nil.

  return nil unless @rsa.private?

  sign_value = @rsa.sign(digest, value)
  # base64 encode.

  if base64_encode
    sign_value = Base64.encode64(sign_value)
  end
  sign_value
end

#text_pairHash

get private and public key text.

Returns:

  • (Hash)

    key pair hash. xx = private_key, xx = public_key



170
171
172
173
174
175
176
# File 'lib/ossl_rsa/rsa.rb', line 170

def text_pair

  private_key = @rsa.to_text if @rsa.private?
  public_key = @rsa.public_key.to_text if @rsa.public?

  { private: private_key, public: public_key }
end

#to_file(dir_path, mode, cipher = nil, pass = nil, add_now = false) ⇒ Hash

save file key. filename is [private.xxx(pem or der)], [public.xxx(pem or der)]

Parameters:

  • dir_path (String)

    save dir path. absolute.

  • mode (integer)

    pem or der.

  • cipher (OpenSSL::Cipher) (defaults to: nil)

    cipher instance.

  • pass (String) (defaults to: nil)

    password

  • add_now (boolean) (defaults to: false)

    add now date string flag.

Returns:

  • (Hash)

    save file path pair. xxx = private file path, xxx = public file path.



118
119
120
121
122
123
124
125
# File 'lib/ossl_rsa/rsa.rb', line 118

def to_file(dir_path, mode, cipher=nil, pass=nil, add_now=false)

  save_key_pair = key_pair(mode, cipher, pass)

  # save file.

  save_path_pair = OsslRsa::FileOp.save(dir_path, save_key_pair, mode, add_now)
  save_path_pair
end

#to_one_file(file_path, mode, cipher = nil, pass = nil) ⇒ Object

save one file key.

Parameters:

  • file_path (String)

    save file path. absolute.

  • mode (integer)

    pem or der.

  • cipher (OpenSSL::Cipher) (defaults to: nil)

    cipher instance.

  • pass (String) (defaults to: nil)

    password



102
103
104
105
106
107
108
# File 'lib/ossl_rsa/rsa.rb', line 102

def to_one_file(file_path, mode, cipher=nil, pass=nil)

  save_key_pair = key_pair(mode, cipher, pass)

  # save file.

  OsslRsa::FileOp.save_one_file(file_path, save_key_pair, mode)
end

#to_specify_file(file_path_pair, mode, cipher = nil, pass = nil) ⇒ Hash

save file key.

Parameters:

  • file_path_pair (Hash)

    save file path pair. xxx = private file path, xxx = public file path.

  • mode (integer)

    pem or der.

  • cipher (OpenSSL::Cipher) (defaults to: nil)

    cipher instance.

  • pass (String) (defaults to: nil)

    password

Returns:

  • (Hash)

    save file path pair. xxx = private file path, xxx = public file path.



133
134
135
136
137
138
139
140
# File 'lib/ossl_rsa/rsa.rb', line 133

def to_specify_file(file_path_pair, mode, cipher=nil, pass=nil)

  save_key_pair = key_pair(mode, cipher, pass)

  # save file.

  save_path_pair = OsslRsa::FileOp.save_file(save_key_pair, file_path_pair, mode)
  save_path_pair
end

#verify(digest, sign, value, base64_decode = true) ⇒ boolean

verify sign value.

Parameters:

  • digest (String)

    digest method.

  • sign (String)

    sign value.

  • value (String)

    compare target value.

  • base64_decode (boolean) (defaults to: true)

    base64 decode flag.

Returns:

  • (boolean)

    verify result.



85
86
87
88
89
90
91
92
93
94
95
# File 'lib/ossl_rsa/rsa.rb', line 85

def verify(digest, sign, value, base64_decode=true)

  # not private, return false.

  return false unless @rsa.private?

  # base64 decode.

  if base64_decode
    sign = Base64.decode64(sign)
  end
  @rsa.verify(digest, sign, value)
end