Procházet zdrojové kódy

Order ciphers by strength

v1
Aeris před 5 roky
rodič
revize
f75af5a736
1 změnil soubory, kde provedl 37 přidání a 4 odebrání
  1. +37
    -4
      lib/cryptcheck/tls/cipher.rb

+ 37
- 4
lib/cryptcheck/tls/cipher.rb Zobrazit soubor

@@ -67,12 +67,45 @@ module CryptCheck

def state
ok = Proc.new { |n| self.send "#{n}?" }
{ success: %i(pfs).select { |n| ok.call n },
warning: %i(sha1).select { |n| ok.call n },
danger: %i(des3).select { |n| ok.call n },
error: %i(dss md5 psk srp anonymous null export des rc2 rc4).select { |n| ok.call n }
{
success: %i(pfs).select { |n| ok.call n },
warning: %i(sha1).select { |n| ok.call n },
danger: %i(des3).select { |n| ok.call n },
error: %i(dss md5 psk srp anonymous null export des rc2 rc4).select { |n| ok.call n }
}
end

def score
state = self.state
return :error unless state[:error].empty?
return :danger unless state[:danger].empty?
return :warning unless state[:warning].empty?
return :success unless state[:success].empty?
:none
end

PRIORITY = { success: 1, none: 2, warning: 3, danger: 4, error: 5 }
def self.sort(ciphers)
ciphers.sort do |a, b|
error_a, error_b = PRIORITY[a.score], PRIORITY[b.score]
compare = error_a <=> error_b
next compare unless compare == 0

size_a, size_b = a.size, b.size
compare = size_b <=> size_a
next compare unless compare == 0

dh_a, dh_b = a.dh, b.dh
next -1 if not dh_a and dh_b
next 1 if dh_a and not dh_b
next a.name <=> b.name if not dh_a and not dh_b

compare = b.dh.size <=> a.dh.size
next compare unless compare == 0

a.name <=> b.name
end
end
end
end
end

Načítá se…
Zrušit
Uložit