lib/tls_map/openssl.rb in tls-map-1.0.0 vs lib/tls_map/openssl.rb in tls-map-1.1.0

- old
+ new

@@ -1,46 +1,54 @@ # frozen_string_literal: true -# Ruby internal - # TLS map module module TLSmap # TLS mapping class App OPENSSL_URL = 'https://raw.githubusercontent.com/openssl/openssl/master/include/openssl/tls1.h' + OPENSSL_URL2 = 'https://raw.githubusercontent.com/openssl/openssl/master/include/openssl/ssl3.h' def raw_data_openssl openssl_h = File.read(@openssl_file.path) + openssl_h2 = File.read(@openssl_file2.path) ck1 = openssl_h.scan(/(TLS1_CK_[a-zA-Z0-9_]+)\s+0x0300([[:xdigit:]]{4})/) txt1 = openssl_h.scan(/(TLS1_TXT_[a-zA-Z0-9_]+)\s+"([a-zA-Z0-9-]+)"/) ck2 = openssl_h.scan(/(TLS1_3_CK_[a-zA-Z0-9_]+)\s+0x0300([[:xdigit:]]{4})/) rfc2 = openssl_h.scan(/(TLS1_3_RFC_[a-zA-Z0-9_]+)\s+"([a-zA-Z0-9_]+)"/) - { ck1: ck1, txt1: txt1, ck2: ck2, rfc2: rfc2 } + ck3 = openssl_h2.scan(/(SSL3_CK_[a-zA-Z0-9_]+)\s+0x0300([[:xdigit:]]{4})/) + txt3 = openssl_h2.scan(/(SSL3_TXT_[a-zA-Z0-9_]+)\s+"([a-zA-Z0-9-]+)"/) + { ck1: ck1, txt1: txt1, ck2: ck2, rfc2: rfc2, ck3: ck3, txt3: txt3 } end def clean_raw_data_openssl - ck1, txt1, ck2, rfc2 = raw_data_openssl.values + ck1, txt1, ck2, rfc2, ck3, txt3 = raw_data_openssl.values ck1.map! { |e| [e[0][8..], e[1]] } txt1.map! { |e| [e[0][9..], e[1]] } ck2.map! { |e| [e[0][10..], e[1]] } rfc2.map! { |e| [e[0][11..], e[1]] } + ck3.map! { |e| [e[0][8..], e[1]] } + txt3.map! { |e| [e[0][9..], e[1]] } - { ck1: ck1, txt1: txt1, ck2: ck2, rfc2: rfc2 } + { ck1: ck1, txt1: txt1, ck2: ck2, rfc2: rfc2, ck3: ck3, txt3: txt3 } end - def data_openssl - ck1, txt1, ck2, rfc2 = clean_raw_data_openssl.values + def data_openssl # rubocop:disable Metrics/CyclomaticComplexity + ck1, txt1, ck2, rfc2, ck3, txt3 = clean_raw_data_openssl.values data = ck1.map { |e| [e[1], txt1.select { |x| x[0] == e[0] }[0][1]] } data += ck2.map { |e| [e[1], rfc2.select { |x| x[0] == e[0] }[0][1]] } + data += ck3.map do |e| + candidate = txt3.select { |x| x[0] == e[0] } + [e[1], candidate.empty? ? nil : candidate[0][1]] + end data end def parse_openssl data_openssl.each do |alg| @tls_map.each do |h| - h[:openssl] ||= h[:codepoint] == alg[0] ? alg[1] : nil + h[:openssl] ||= h[:codepoint] == alg[0].upcase ? alg[1] : nil end end end private :parse_openssl, :raw_data_openssl, :clean_raw_data_openssl, :data_openssl