Class: CryptoToolchain::Tools::MT19937StreamCipherSeedRecoverer

Inherits:
Object
  • Object
show all
Defined in:
lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(ciphertext:, known:) ⇒ MT19937StreamCipherSeedRecoverer

Returns a new instance of MT19937StreamCipherSeedRecoverer.



21
22
23
24
# File 'lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb', line 21

def initialize(ciphertext: , known: )
  @ciphertext = ciphertext
  @known = known
end

Instance Attribute Details

#ciphertextObject (readonly)

Returns the value of attribute ciphertext.



36
37
38
# File 'lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb', line 36

def ciphertext
  @ciphertext
end

#knownObject (readonly)

Returns the value of attribute known.



36
37
38
# File 'lib/crypto_toolchain/tools/mt_19937_stream_cipher_seed_recoverer.rb', line 36

def known
  @known
end

Class Method Details

.recover_from(ciphertext:, seed:) ⇒ Object



5
6
7
8
# 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) ⇒ Boolean Also known as: valid_token

Returns:

  • (Boolean)


10
11
12
13
14
15
16
17
# 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

Instance Method Details

#executeObject

Raises:

  • (RuntimeError.new)


26
27
28
29
30
31
32
33
34
# 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