Class: Scl::DH
- Inherits:
-
Object
- Object
- Scl::DH
- Defined in:
- lib/scl/dh.rb
Instance Attribute Summary collapse
-
#encoder ⇒ Object
readonly
Returns the value of attribute encoder.
Instance Method Summary collapse
- #ack(der:, public_key:) ⇒ Object
- #fin(private_key:, der:, public_key:) ⇒ Object
-
#initialize(encoder: Format::BASE64) ⇒ DH
constructor
A new instance of DH.
-
#syn(length: 512) ⇒ Object
:0> syn = Scl::DH.new.syn :1> ack = Scl::DH.new.ack(syn) :2> shared_key1 = Scl::DH.new.fin(syn.merge(ack))[:private] :3> shared_key2 = ack[:shared_key].
Constructor Details
Instance Attribute Details
#encoder ⇒ Object (readonly)
Returns the value of attribute encoder.
4 5 6 |
# File 'lib/scl/dh.rb', line 4 def encoder @encoder end |
Instance Method Details
#ack(der:, public_key:) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/scl/dh.rb', line 27 def ack(der:, public_key:) dh = OpenSSL::PKey::DH.new(encoder.decode(der)) dh.generate_key! shared_key = dh.compute_key(OpenSSL::BN.new(encoder.decode(public_key), 16)) { private: { shared_key: encoder.encode(shared_key) }, public: { public_key: encoder.encode(dh.pub_key.to_s(16)) } } end |
#fin(private_key:, der:, public_key:) ⇒ Object
41 42 43 44 45 46 47 48 49 50 |
# File 'lib/scl/dh.rb', line 41 def fin(private_key:, der:, public_key:) dh = OpenSSL::PKey::DH.new(encoder.decode(der)) dh.priv_key = OpenSSL::BN.new(encoder.decode(private_key), 16) shared_key = dh.compute_key(OpenSSL::BN.new(encoder.decode(public_key), 16)) { private: { shared_key: encoder.encode(shared_key) } } end |
#syn(length: 512) ⇒ Object
:0> syn = Scl::DH.new.syn :1> ack = Scl::DH.new.ack(syn) :2> shared_key1 = Scl::DH.new.fin(syn.merge(ack))[:private] :3> shared_key2 = ack[:shared_key]
13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/scl/dh.rb', line 13 def syn(length: 512) dh = OpenSSL::PKey::DH.new(length) { private: { der: encoder.encode(dh.public_key.to_der), private_key: encoder.encode(dh.priv_key.to_s(16)) }, public: { der: encoder.encode(dh.public_key.to_der), public_key: encoder.encode(dh.pub_key.to_s(16)) } } end |