class CryptoToolchain::Tools::RSAUnpaddedMessageRecoveryAttack

Attributes

oracle[R]
s[R]

Public Class Methods

new(oracle: , s: 2) click to toggle source
# File lib/crypto_toolchain/tools/rsa_unpadded_message_recovery_attack.rb, line 7
def initialize(oracle: , s: 2)
  @oracle = oracle
  @s = s
end

Public Instance Methods

execute(ciphertext) click to toggle source
# File lib/crypto_toolchain/tools/rsa_unpadded_message_recovery_attack.rb, line 12
def execute(ciphertext)
  plaintext(
    p_prime(
      c_prime(
        ciphertext.to_number
      )
    )
  )
end

Private Instance Methods

c_prime(c) click to toggle source
# File lib/crypto_toolchain/tools/rsa_unpadded_message_recovery_attack.rb, line 32
def c_prime(c)
  (s.modpow(e, n) * c) % n
end
e() click to toggle source
# File lib/crypto_toolchain/tools/rsa_unpadded_message_recovery_attack.rb, line 24
def e
  oracle.keypair.e
end
n() click to toggle source
# File lib/crypto_toolchain/tools/rsa_unpadded_message_recovery_attack.rb, line 28
def n
  oracle.keypair.public_key.n
end
p_prime(_c_prime) click to toggle source
# File lib/crypto_toolchain/tools/rsa_unpadded_message_recovery_attack.rb, line 36
def p_prime(_c_prime)
  oracle.execute(
    _c_prime.to_bin_string
  ).to_number
end
plaintext(_p_prime) click to toggle source
# File lib/crypto_toolchain/tools/rsa_unpadded_message_recovery_attack.rb, line 42
def plaintext(_p_prime)
  (
    (_p_prime * s.invmod(n)) % n
  ).to_bin_string
end