Class: TTTLS13::Message::Extension::SupportedVersions
- Inherits:
-
Object
- Object
- TTTLS13::Message::Extension::SupportedVersions
- Defined in:
- lib/tttls1.3/message/extension/supported_versions.rb
Instance Attribute Summary collapse
-
#extension_type ⇒ Object
readonly
Returns the value of attribute extension_type.
-
#msg_type ⇒ Object
Returns the value of attribute msg_type.
-
#versions ⇒ Object
Returns the value of attribute versions.
Class Method Summary collapse
- .deserialize(binary, msg_type) ⇒ TTTLS13::Message::Extensions::SupportedVersions?
-
.deserialize_versions(binary) ⇒ Array of String?
rubocop: disable Metrics/CyclomaticComplexity.
Instance Method Summary collapse
-
#initialize(msg_type:, versions: DEFAULT_VERSIONS) ⇒ SupportedVersions
constructor
rubocop: disable Metrics/CyclomaticComplexity.
- #serialize ⇒ String
Constructor Details
#initialize(msg_type:, versions: DEFAULT_VERSIONS) ⇒ SupportedVersions
rubocop: disable Metrics/CyclomaticComplexity
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# File 'lib/tttls1.3/message/extension/supported_versions.rb', line 18 def initialize(msg_type:, versions: DEFAULT_VERSIONS) @extension_type = ExtensionType::SUPPORTED_VERSIONS @msg_type = msg_type @versions = versions || [] case @msg_type when HandshakeType::CLIENT_HELLO raise Error::ErrorAlerts, :internal_error \ if @versions.empty? || @versions.length > 127 when HandshakeType::SERVER_HELLO, HandshakeType::HELLO_RETRY_REQUEST raise Error::ErrorAlerts, :internal_error \ unless @versions.length == 1 else raise Error::ErrorAlerts, :internal_error end end |
Instance Attribute Details
#extension_type ⇒ Object (readonly)
Returns the value of attribute extension_type.
9 10 11 |
# File 'lib/tttls1.3/message/extension/supported_versions.rb', line 9 def extension_type @extension_type end |
#msg_type ⇒ Object
Returns the value of attribute msg_type.
10 11 12 |
# File 'lib/tttls1.3/message/extension/supported_versions.rb', line 10 def msg_type @msg_type end |
#versions ⇒ Object
Returns the value of attribute versions.
11 12 13 |
# File 'lib/tttls1.3/message/extension/supported_versions.rb', line 11 def versions @versions end |
Class Method Details
.deserialize(binary, msg_type) ⇒ TTTLS13::Message::Extensions::SupportedVersions?
51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
# File 'lib/tttls1.3/message/extension/supported_versions.rb', line 51 def self.deserialize(binary, msg_type) raise Error::ErrorAlerts, :internal_error if binary.nil? versions = [] case msg_type when HandshakeType::CLIENT_HELLO versions = deserialize_versions(binary) return nil if versions.nil? # unparsable versions when HandshakeType::SERVER_HELLO, HandshakeType::HELLO_RETRY_REQUEST return nil if binary.length != 2 versions << binary.slice(0, 2) else return nil end SupportedVersions.new(msg_type: msg_type, versions: versions) end |
.deserialize_versions(binary) ⇒ Array of String?
rubocop: disable Metrics/CyclomaticComplexity
76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/tttls1.3/message/extension/supported_versions.rb', line 76 def self.deserialize_versions(binary) raise Error::ErrorAlerts, :internal_error if binary.nil? return nil if binary.empty? versions_len = Convert.bin2i(binary[0]) i = 1 versions = [] while i < versions_len + 1 return nil if i + 2 > binary.length versions << binary.slice(i, 2) i += 2 end return nil if i != binary.length || i != versions_len + 1 versions end |
Instance Method Details
#serialize ⇒ String
36 37 38 39 40 41 42 43 |
# File 'lib/tttls1.3/message/extension/supported_versions.rb', line 36 def serialize binary = '' binary += (@versions.length * 2).to_uint8 \ if @msg_type == HandshakeType::CLIENT_HELLO binary += @versions.join @extension_type + binary.prefix_uint16_length end |