class CryptoToolchain::Tools::MD4LengthExtensionAttack

Attributes

add[R]
key_length[R]
mac[R]
message[R]

Public Class Methods

new(message: , add: , mac: , key_length: ) click to toggle source
# File lib/crypto_toolchain/tools/md4_length_extension_attack.rb, line 5
def initialize(message: , add: , mac: , key_length: )
  @message = message
  @mac = mac
  @add = add
  @key_length = key_length
end

Public Instance Methods

execute() click to toggle source

@return Array [msg, digest] Message that can be validated

# File lib/crypto_toolchain/tools/md4_length_extension_attack.rb, line 13
def execute
  dummy_key = "A" * key_length
  padding = CryptoToolchain::Utilities::MD4.padding(dummy_key + message)
  [
    message + padding + add,
    CryptoToolchain::Utilities::MD4.hexdigest(add,
                                               state: mac,
                                               append_length: (padding + message + dummy_key).length
                                              )
  ]
end