Class: TTTLS13::Message::Extension::KeyShare
- Inherits:
-
Object
- Object
- TTTLS13::Message::Extension::KeyShare
- Defined in:
- lib/tttls1.3/message/extension/key_share.rb
Overview
rubocop: disable Metrics/ClassLength
Instance Attribute Summary collapse
-
#extension_type ⇒ Object
readonly
Returns the value of attribute extension_type.
-
#key_share_entry ⇒ Object
readonly
Returns the value of attribute key_share_entry.
-
#msg_type ⇒ Object
readonly
Returns the value of attribute msg_type.
Class Method Summary collapse
- .deserialize(binary, msg_type) ⇒ TTTLS13::Message::Extensions::KeyShare?
- .gen_ch_key_share(groups) ⇒ TTTLS13::Message::Extensions::KeyShare, TTTLS13::SharedSecret
- .gen_hrr_key_share(group) ⇒ TTTLS13::Message::Extensions::KeyShare
- .gen_sh_key_share(group) ⇒ TTTLS13::Message::Extensions::KeyShare, TTTLS13::SharedSecret
Instance Method Summary collapse
-
#initialize(msg_type:, key_share_entry: []) ⇒ KeyShare
constructor
A new instance of KeyShare.
- #serialize ⇒ String
Constructor Details
#initialize(msg_type:, key_share_entry: []) ⇒ KeyShare
Returns a new instance of KeyShare.
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 16 def initialize(msg_type:, key_share_entry: []) @extension_type = ExtensionType::KEY_SHARE @msg_type = msg_type @key_share_entry = key_share_entry || [] raise Error::ErrorAlerts, :internal_error \ unless (@msg_type == HandshakeType::CLIENT_HELLO && @key_share_entry.length >= 0 && @key_share_entry.all?(&:valid_key_share_client_hello?)) || (@msg_type == HandshakeType::SERVER_HELLO && @key_share_entry.length == 1 && @key_share_entry.first.valid_key_share_server_hello?) || (@msg_type == HandshakeType::HELLO_RETRY_REQUEST && @key_share_entry.length == 1 && @key_share_entry.first.valid_key_share_hello_retry_request?) end |
Instance Attribute Details
#extension_type ⇒ Object (readonly)
Returns the value of attribute extension_type.
10 11 12 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 10 def extension_type @extension_type end |
#key_share_entry ⇒ Object (readonly)
Returns the value of attribute key_share_entry.
10 11 12 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 10 def key_share_entry @key_share_entry end |
#msg_type ⇒ Object (readonly)
Returns the value of attribute msg_type.
10 11 12 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 10 def msg_type @msg_type end |
Class Method Details
.deserialize(binary, msg_type) ⇒ TTTLS13::Message::Extensions::KeyShare?
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 53 def self.deserialize(binary, msg_type) raise Error::ErrorAlerts, :internal_error if binary.nil? case msg_type when HandshakeType::CLIENT_HELLO key_share_entry = deserialize_keyshare_ch(binary) return nil \ unless key_share_entry.all?(&:valid_key_share_client_hello?) when HandshakeType::SERVER_HELLO key_share_entry = deserialize_keyshare_sh(binary) return nil \ unless key_share_entry.first.valid_key_share_server_hello? when HandshakeType::HELLO_RETRY_REQUEST key_share_entry = deserialize_keyshare_hrr(binary) return nil \ unless key_share_entry.first.valid_key_share_hello_retry_request? else raise Error::ErrorAlerts, :internal_error end return nil if key_share_entry.nil? KeyShare.new(msg_type:, key_share_entry:) end |
.gen_ch_key_share(groups) ⇒ TTTLS13::Message::Extensions::KeyShare, TTTLS13::SharedSecret
82 83 84 85 86 87 88 89 90 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 82 def self.gen_ch_key_share(groups) shared_secret = SharedSecret.gen_from_named_groups(groups) key_share = KeyShare.new( msg_type: HandshakeType::CLIENT_HELLO, key_share_entry: shared_secret.key_share_entries ) [key_share, shared_secret] end |
.gen_hrr_key_share(group) ⇒ TTTLS13::Message::Extensions::KeyShare
110 111 112 113 114 115 116 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 110 def self.gen_hrr_key_share(group) kse = KeyShareEntry.new(group:) KeyShare.new( msg_type: HandshakeType::HELLO_RETRY_REQUEST, key_share_entry: [kse] ) end |
.gen_sh_key_share(group) ⇒ TTTLS13::Message::Extensions::KeyShare, TTTLS13::SharedSecret
96 97 98 99 100 101 102 103 104 105 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 96 def self.gen_sh_key_share(group) shared_secret = SharedSecret.gen_from_named_groups([group]) key_share = KeyShare.new( msg_type: HandshakeType::SERVER_HELLO, key_share_entry: shared_secret.key_share_entries ) [key_share, shared_secret] end |
Instance Method Details
#serialize ⇒ String
35 36 37 38 39 40 41 42 43 44 45 |
# File 'lib/tttls1.3/message/extension/key_share.rb', line 35 def serialize case @msg_type when HandshakeType::CLIENT_HELLO binary = @key_share_entry.map(&:serialize).join.prefix_uint16_length when HandshakeType::SERVER_HELLO, HandshakeType::HELLO_RETRY_REQUEST binary = @key_share_entry.first.serialize else raise Error::ErrorAlerts, :internal_error end @extension_type + binary.prefix_uint16_length end |