class CryptoToolchain::Tools::LowExponentRSASignatureForgery
Attributes
keypair[R]
message[R]
Public Class Methods
new(message: , keypair: )
click to toggle source
# File lib/crypto_toolchain/tools/low_exponent_rsa_signature_forgery.rb, line 5 def initialize(message: , keypair: ) @keypair = keypair @message = message end
Public Instance Methods
execute()
click to toggle source
# File lib/crypto_toolchain/tools/low_exponent_rsa_signature_forgery.rb, line 11 def execute digest = CryptoToolchain::Utilities::SHA1.digest(message) asn = ASN1.fetch(:sha1) max = (keypair.bits / 8) - (asn.bytesize + digest.bytesize + 3) (1..max).reverse_each do |padlen| forged = "\x01\xff\x00#{asn}#{digest}#{0.chr * padlen}". to_number. root(3, round: :up). to_bin_string found = keypair.verify(message, signature: forged) return forged if found end raise RuntimeError.new("Couldn't forge a signature") end