lib/tls_map.rb in tls-map-1.3.2 vs lib/tls_map.rb in tls-map-2.0.0

- old
+ new

@@ -2,23 +2,28 @@ # Ruby internal require 'pathname' # Project internal require 'tls_map/version' -require 'tls_map/utils' -require 'tls_map/iana' -require 'tls_map/openssl' -require 'tls_map/gnutls' -require 'tls_map/nss' -require 'tls_map/output' -require 'tls_map/ciphersuiteinfo' -require 'tls_map/extractor' +require 'tls_map/utils/utils' +require 'tls_map/app/iana' +require 'tls_map/app/openssl' +require 'tls_map/app/gnutls' +require 'tls_map/app/nss' +require 'tls_map/app/output' +require 'tls_map/app/extended/ciphersuiteinfo' +require 'tls_map/app/extractor/extractor' +require 'tls_map/app/cipher/cipher' # TLS map module module TLSmap # TLS mapping class App + # Get the mapping of all TLS cipher suites + # @return [Hash] mapping of all TLS cipher suites + attr_reader :tls_map + # Will automatically fetch source files and parse them. def initialize @iana_file = Utils.tmpfile('iana', IANA_URL) @openssl_file = Utils.tmpfile('openssl', OPENSSL_URL) @openssl_file2 = Utils.tmpfile('openssl', OPENSSL_URL2) @@ -35,40 +40,65 @@ parse_gnutls parse_nss end # Search for corresponding cipher algorithms in other libraries - # @param critera [Symbol] The type of `term`. + # @param criteria [Symbol] The type of `term`. # Accepted values: `:codepoint`, `:iana`, `:openssl`, `:gnutls`, `:nss`. # @param term [String] The cipher algorithm name. # @param output [Symbol] The corresponding type to be included in the return value. # Accepted values: `:all` (default), `:codepoint`, `:iana`, `:openssl`, # `:gnutls`, `:nss`. # @return [Hash] The corresponding type matching `term`. - def search(critera, term, output = :all) + def search(criteria, term, output = :all) @tls_map.each do |alg| - term = term.upcase if critera == :codepoint - next unless alg[critera] == term + term = term.upcase if criteria == :codepoint + next unless alg[criteria] == term return alg if output == :all return { output => alg[output] } end {} end + # Stateless version of {App#search}. + # @param tls_map [Hash] mapping of all TLS cipher suites returned by {tls_map}. + # @param criteria [Symbol] Same as `criteria` from {TLSmap::App#search} + # @param term [String] Same as `term` from {TLSmap::App#search} + # @param output [Symbol] Same as `output` from {TLSmap::App#search} + # @see App#search + # @example + # tm = TLSmap::App.new + # TLSmap::App.search(tm.tls_map, :iana, 'TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256') + # # => {:codepoint=>"CCA9", :iana=>"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256", + # :openssl=>"ECDHE-ECDSA-CHACHA20-POLY1305", :gnutls=>"ECDHE_ECDSA_CHACHA20_POLY1305", + # :nss=>"TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256"} + # # or to use with the Cipher class + # ci = TLSmap::App::Cipher.new(:iana, 'TLS_DH_anon_WITH_RC4_128_MD5', tm.tls_map) + def self.search(tls_map, criteria, term, output = :all) + tls_map.each do |alg| + term = term.upcase if criteria == :codepoint + next unless alg[criteria] == term + return alg if output == :all + + return { output => alg[output] } + end + {} + end + # Search for corresponding cipher algorithms in other libraries in bulk - # @param critera [Symbol] The type of `term`. + # @param criteria [Symbol] The type of `term`. # Accepted values: `:codepoint`, `:iana`, `:openssl`, `:gnutls`, `:nss`. # @param file [String] File containing the cipher algorithm names, one per line. # @param output [Symbol] The corresponding type to be included in the return value. # Accepted values: `:all` (default), `:codepoint`, `:iana`, `:openssl`, # `:gnutls`, `:nss`. # @return [Array<Hash>] The corresponding type, same as {search} return value # but one per line stored in an array. - def bulk_search(critera, file, output = :all) + def bulk_search(criteria, file, output = :all) res = [] File.foreach(file) do |line| - res.push(search(critera, line.chomp, output)) + res.push(search(criteria, line.chomp, output)) end res end protected :parse