Class: TTCrypt::RsaKey
- Inherits:
-
Object
- Object
- TTCrypt::RsaKey
- Defined in:
- lib/ttcrypt.rb,
ext/ttcrypt/ttcrypt_ruby.cpp
Overview
Implementation of RSAES-OAEP encryption and RSASSA-PSS signing accroding to pkcs#1 v2.2 specification. Does NOT implement any previous cryptographically weak shcemes (like 1.5 signature) - go use openssl for itm but it does compromise private key.
All time consuming operations are executed releasing GVL so other threads can run in parallel in the multicore hardware.
Defined Under Namespace
Classes: Error
Constant Summary collapse
- ACCEPTED_PARAMS =
%i|n e p q d|
Class Method Summary collapse
-
.generate(bits_strength) ⇒ Object
Generate private key (that contains public key too) of the desired bit length (recommended at least 2048).
Instance Method Summary collapse
-
#bits ⇒ Object
Get key size in bits.
-
#components ⇒ Object
Get key components as hash.
-
#decrypt(message) ⇒ Object
Decrypt message with private key using RSAES-OAEP scheme (pkcs#1 v.2.2).
- #e ⇒ Object
-
#encrypt(message) ⇒ Object
Encrypt message with public key using RSAES-OAEP scheme (pkcs#1 v.2.2).
-
#extract_public ⇒ RsaKey
Extract public key from a private (or public) key.
-
#initialize(**params) ⇒ RsaKey
constructor
A new instance of RsaKey.
- #n ⇒ Object
-
#p ⇒ String
P component or nil.
-
#private? ⇒ Boolean
true if self contains private key.
- #q ⇒ Object
- #set_params(**params) ⇒ Object
-
#sign(message, hash_name) ⇒ bool
Sign the message using pkcs#1 v2.2 RSASSA-PSS process.
-
#verify(message, signature, hash_name = :sha1) ⇒ bool
Check message signature signed with pkcs#1 v2.2 RSASSA-PSS process.
Constructor Details
#initialize(**params) ⇒ RsaKey
Returns a new instance of RsaKey.
41 42 43 |
# File 'lib/ttcrypt.rb', line 41 def initialize ** params set_params(params) end |
Class Method Details
Instance Method Details
#bits ⇒ Object
Get key size in bits
62 63 64 |
# File 'lib/ttcrypt.rb', line 62 def bits _bits end |
#components ⇒ Object
Get key components as hash. Components are binary strings, indexes are symbols e.g. :n, :e
118 119 120 |
# File 'lib/ttcrypt.rb', line 118 def components @components ||= _components end |
#decrypt(message) ⇒ Object
Decrypt message with private key using RSAES-OAEP scheme (pkcs#1 v.2.2). Requires private key
76 77 78 79 |
# File 'lib/ttcrypt.rb', line 76 def decrypt .force_encoding Encoding::BINARY _decrypt end |
#e ⇒ Object
135 136 137 |
# File 'lib/ttcrypt.rb', line 135 def e components[:e] end |
#encrypt(message) ⇒ Object
Encrypt message with public key using RSAES-OAEP scheme (pkcs#1 v.2.2).
68 69 70 71 |
# File 'lib/ttcrypt.rb', line 68 def encrypt .force_encoding Encoding::BINARY _encrypt end |
#extract_public ⇒ RsaKey
Extract public key from a private (or public) key
107 108 109 |
# File 'lib/ttcrypt.rb', line 107 def extract_public # native implementation: this is for indexing only end |
#n ⇒ Object
131 132 133 |
# File 'lib/ttcrypt.rb', line 131 def n components[:n] end |
#p ⇒ String
Returns P component or nil.
123 124 125 |
# File 'lib/ttcrypt.rb', line 123 def p components[:p] end |
#private? ⇒ Boolean
true if self contains private key
112 113 114 |
# File 'lib/ttcrypt.rb', line 112 def private? _is_private end |
#q ⇒ Object
127 128 129 |
# File 'lib/ttcrypt.rb', line 127 def q components[:q] end |
#set_params(**params) ⇒ Object
45 46 47 48 49 50 51 52 |
# File 'lib/ttcrypt.rb', line 45 def set_params ** params res = {} params.each { |k, v| ACCEPTED_PARAMS.include?(k) or raise ArgumentError, "unknown key component" res[k.to_s] = v.to_s.force_encoding(Encoding::BINARY) } _set_params res end |
#sign(message, hash_name) ⇒ bool
Sign the message using pkcs#1 v2.2 RSASSA-PSS process. Requires private key.
87 88 89 90 |
# File 'lib/ttcrypt.rb', line 87 def sign , hash_name .force_encoding Encoding::BINARY _sign , hash_name.to_s.downcase end |
#verify(message, signature, hash_name = :sha1) ⇒ bool
Check message signature signed with pkcs#1 v2.2 RSASSA-PSS process
99 100 101 102 103 |
# File 'lib/ttcrypt.rb', line 99 def verify , signature, hash_name=:sha1 .force_encoding Encoding::BINARY signature.force_encoding Encoding::BINARY _verify , signature, hash_name.to_s.downcase end |