class RuboCop::Cop::Cobalt::InsecureHashAlgorithm

Constants

DEFAULT_ALLOWED

Public Instance Methods

alg_name(val) click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 90
def alg_name(val)
  return :nil if val.nil?
  return val.to_s.downcase unless val.is_a?(RuboCop::AST::Node)

  case val.type
  when :sym, :str
    val.children.first.to_s.downcase
  else
    val.type
  end
end
allowed_hash_functions() click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 86
def allowed_hash_functions
  @allowed_hash_functions ||= cop_config.fetch('Allowed', DEFAULT_ALLOWED).map(&:downcase)
end
default_message() click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 117
def default_message
  "This hash function is not allowed. Prefer: #{allowed_hash_functions.join(', ')}"
end
insecure_algorithm?(val) click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 61
def insecure_algorithm?(val)
  return false if val == :Digest # Don't match "Digest::Digest".

  case alg_name(val)
  when *allowed_hash_functions, Symbol
    false
  else
    true
  end
end
just_encoding?(val) click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 76
def just_encoding?(val)
  %i[hexencode bubblebabble].include?(val)
end
not_just_encoding?(val) click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 72
def not_just_encoding?(val)
  !just_encoding?(val)
end
on_const(const_node) click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 102
def on_const(const_node)
  add_offense(const_node, message: default_message) if insecure_const?(const_node) && !digest_uuid?(const_node)
end
on_send(send_node) click to toggle source
# File lib/rubocop/cop/cobalt/insecure_hash_algorithm.rb, line 106
def on_send(send_node)
  if uuid_v3?(send_node) && !allowed_hash_functions.include?('md5')
    add_offense(send_node, message: "uuid_v3 uses MD5, which is not allowed. Prefer: #{allowed_hash_functions.join(', ')}")
  elsif uuid_v5?(send_node) && !allowed_hash_functions.include?('sha1')
    add_offense(send_node, message: "uuid_v5 uses SHA1, which is not allowed. Prefer: #{allowed_hash_functions.join(', ')}")
  elsif openssl_hmac_new?(send_node) && openssl_hmac_new_insecure?(send_node) ||
      insecure_digest?(send_node) || insecure_hash_lookup?(send_node)
    add_offense(send_node, message: default_message)
  end
end