class Bloomed::PW
Constants
- PWNED_PASSWORDS_FILENAME
Attributes
bloom[R]
cache_dir[R]
false_positive_probability[R]
filename[R]
top[R]
Public Class Methods
new(top: 100_000, false_positive_probability: 0.001, cache_dir: nil)
click to toggle source
# File lib/bloomed.rb, line 18 def initialize(top: 100_000, false_positive_probability: 0.001, cache_dir: nil) @cache_dir = cache_dir || File.join(File.dirname(__FILE__), "dump") @top = top @false_positive_probability = false_positive_probability @bloom = prepare end
Public Instance Methods
memory_size_bytes()
click to toggle source
# File lib/bloomed.rb, line 31 def memory_size_bytes require "objspace" ObjectSpace.memsize_of(@bloom) end
pwned?(pw)
click to toggle source
# File lib/bloomed.rb, line 27 def pwned?(pw) @bloom.include?(Digest::SHA1.hexdigest(pw).upcase) end
Private Instance Methods
generate()
click to toggle source
# File lib/bloomed.rb, line 60 def generate unless File.exist? PWNED_PASSWORDS_FILENAME raise MissingPasswordListError, "To generate new, optimized pwned passwords bloom filter, run `rake seed` or `rake seed_here`. To generate all variants, even the very large binaries, run `rake seed\[all\]` or `rake seed_here\[all\]`." end bloom_filter = Bloomer.new(top, false_positive_probability) File.open(PWNED_PASSWORDS_FILENAME, "r").first(top).each do |line| bloom_filter.add line[0...40] end bloom_filter end
load_cache()
click to toggle source
# File lib/bloomed.rb, line 54 def load_cache Bloomed::PW.from_msgpack(File.read(filename)) end
prepare()
click to toggle source
# File lib/bloomed.rb, line 44 def prepare if File.exist? filename load_cache else bloom_filter = generate write_cache bloom_filter bloom_filter end end
write_cache(b)
click to toggle source
# File lib/bloomed.rb, line 72 def write_cache(b) File.open(filename, 'wb') { |f| f.write b.to_msgpack } b end