NAME
    Crypt::OpenSSL::Blowfish - Blowfish Algorithm using OpenSSL

SYNOPSIS
        use Crypt::OpenSSL::Blowfish;

        my $cipher = Crypt::OpenSSL::Blowfish->($key, {});

        or (for compatibility.with 0.02 and below)

        my $cipher = Crypt::OpenSSL::Blowfish->($key); # DON'T do this

        my $ciphertext = $cipher->encrypt($plaintext);
        my $plaintext = $cipher->decrypt($ciphertext);

BLOWFISH IS CONSIDERED LEGACY BY OPENSSL v3
    This module has been updated with support for OpenSSL v3 but should be
    considered to be end of life. OpenSSL requires the *legacy* provider to
    be specifically loaded to use Blowfish. It is a deprecated encryption
    module and you need to move to a different encryption algorithm.

COMPATIBILITY WARNING
    WARNING Version 0.02 and below DO NOT produce OpenSSL compatible
    encryption or decrypt OpenSSL encrypted messages properly.

    Basically, those versions call BF_encrypt and BF_decrypt without
    properly converting the input to big endian and the output to little
    endian where needed.

    Version 0.03 and above correctly calls BF_ecb_encrypt and BF_ecb_decrypt
    or the EVP_* functions but *DEFAULTS* to the incorrect method for
    compatibility. This MAY change in subsequent versions.

    To obtain the correct method you must provide a second option in the new
    constructor. Even an empty hash will work and will be compatible with
    later versions.

        my $cipher = Crypt::OpenSSL::Blowfish($key, {});

    The encryption/decryption method is then compatible with the
    BF_ecb_encrypt and BF_ecb_decrypt and well as the new EVP_ methods using
    EVP_bf_ecb cipher when compiled with openssl v3.

DESCRIPTION
    Crypt::OpenSSL::Blowfish implements the Blowfish Algorithm using
    functions contained in the OpenSSL crypto library.
    Crypt::OpenSSL::Blowfish has an interface similar to Crypt::Blowfish,
    but produces different result than Crypt::Blowfish. This is no longer
    correct if you use the new method to instantiate
    Crypt::OpenSSL::Blowfish. Using the new method results in encryption
    which is compatible with Crypt::Blowfish.

METHODS
  new($key, ... )
        # New method - openssl compatible
        my $cipher = Crypt::OpenSSL::Blowfish->new($key, {});

        # Old method - NOT openssl compatible
        my $cipher = Crypt::OpenSSL::Blowfish->new($key);

  encrypt(data)
        my $encrypted = $cipher->encrypt($plaintext);

  encrypt(data)
        my $decrypted = $cipher->decrypt($ciphertext);

  get_little_endian(data)
    Converts the data to little-endian format. Required to convert the old
    encryption to openssl compatible bf-ecb/EVP_bf_ecb.

    See t/upgrade.t for examples to handle the endian conversion and
    encryption upgrades.

        my $leval = get_little_endian(data)

  get_big_endian(data)
    Converts the data to little-endian format. Required to convert the old
    encryption to openssl compatible bf-ecb/EVP_bf_ecb

    See t/upgrade.t for examples to handle the endian conversion and
    encryption upgrades.

        my $beval = get_big_endian(data)

SEE ALSO
    Crypt::Blowfish

    http://www.openssl.org/

AUTHOR
    Vitaly Kramskikh, <vkramskih@cpan.org> Timothy Legge,
    <timlegge@cpan.org>

LICENSE
    No license was mentioned in the original version 0.01 or 0.02. Based on
    the changes made by TIMLEGGE, 0.03 and forward will be as follows:

    This library is free software; you can redistribute it and/or modify it
    under the same terms as Perl itself, either Perl version 5.8.5 or, at
    your option, any later version of Perl 5 you may have available.

    In the unlikely chance that that is an issue for anyone feel free to
    contact TIMLEGGE

