class CryptoToolchain::Tools::MT19937StreamCipherSeedRecoverer

Attributes

ciphertext[R]
known[R]

Public Class Methods

new(ciphertext: , known: ) click to toggle source
# File lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb, line 21
def initialize(ciphertext: , known: )
  @ciphertext = ciphertext
  @known = known
end
recover_from(ciphertext: , seed: ) click to toggle source
# File lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb, line 5
def recover_from(ciphertext: , seed: )
  stream = CryptoToolchain::BlackBoxes::MT19937StreamCipher.new(ciphertext, seed: seed)
  stream.decrypt(ciphertext)
end
valid_token(tok, start: Time.now.to_i - 5, finish: Time.now.to_i)
Alias for: valid_token?
valid_token?(tok, start: Time.now.to_i - 5, finish: Time.now.to_i) click to toggle source
# File lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb, line 10
def valid_token?(tok, start: Time.now.to_i - 5, finish: Time.now.to_i)
  (start..finish).each do |seed|
    if tok == CryptoToolchain::BlackBoxes::MT19937StreamCipher.generate_token(seed: seed)
      return true
    end
  end
  false
end
Also aliased as: valid_token

Public Instance Methods

execute() click to toggle source
# File lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb, line 26
def execute
  (0..CryptoToolchain::BlackBoxes::MT19937StreamCipher::MAX_SEED).each do |seed|
    cipher = CryptoToolchain::BlackBoxes::MT19937StreamCipher.new(ciphertext, seed: seed)
    if cipher.decrypt(ciphertext).include?(known)
      return seed
    end
  end
  raise RuntimeError.new, "Could not recover seed"
end