NAME
Crypt::Square - Crypt::CBC-compliant block cipher
SYNOPSIS
use
Crypt::Square;
$cipher
= new Crypt::Square
$key
;
$ciphertext
=
$cipher
->encrypt(
$plaintext
);
$plaintext
=
$cipher
->decrypt(
$ciphertext
);
DESCRIPTION
Square is a 128-bit block cipher that accepts a 128-bit key. Designed by Joan Daemen, Vincent Rijmen, and Lars Knudsen, Square is the predecessor of Rijndael, aka the Advanced Encryption Standard.
This module supports the Crypt::CBC interface, with the following functions.
Functions
- blocksize
-
Returns the size (in bytes) of the block (16, in this case).
- keysize
-
Returns the size (in bytes) of the key (16, in this case).
- encrypt($data)
-
Encrypts 16 bytes of $data and returns the corresponding ciphertext.
- decrypt($data)
-
Decrypts 16 bytes of $data and returns the corresponding plaintext.
EXAMPLE 1
#!/usr/local/bin/perl
use
diagnostics;
use
strict;
use
warnings;
use
Crypt::Square;
# key must be 16 bytes long
my
$key
=
"0123456789abcdef"
;
my
$cipher
= new Crypt::Square
$key
;
"blocksize = "
,
$cipher
->blocksize,
" bytes \n"
;
"keysize = "
,
$cipher
->keysize,
" bytes \n"
;
# block must be 16 bytes long
my
$plaintext1
=
"0123456789abcdef"
;
my
$ciphertext
=
$cipher
->encrypt(
$plaintext1
);
my
$plaintext2
=
$cipher
->decrypt(
$ciphertext
);
"Decryption OK\n"
if
(
$plaintext1
eq
$plaintext2
);
EXAMPLE 2
#!/usr/local/bin/perl
use
diagnostics;
use
strict;
use
warnings;
# when using Crypt::CBC, key may be of ANY length
my
$key
=
"0123456789abcdef"
;
# IV must be exactly 16 bytes long
my
$IV
=
pack
"H32"
, 0;
my
$cipher
= Crypt::CBC->new({
'key'
=>
$key
,
'cipher'
=>
'Square'
,
'iv'
=>
$IV
,
'regenerate_key'
=> 1,
'padding'
=>
'standard'
,
'prepend_iv'
=> 0
});
# when using Crypt::CBC, plaintext may be of ANY length
my
$plaintext1
=
"This is a test"
;
my
$ciphertext
=
$cipher
->encrypt(
$plaintext1
);
my
$plaintext2
=
$cipher
->decrypt(
$ciphertext
);
"Decryption OK\n"
if
(
$plaintext1
eq
$plaintext2
);
MORE EXAMPLES
See Crypt::CBC for more examples using CBC mode. See also the "examples" and "t" directories for some more examples.
SEE ALSO
Crypt::Khazad, Crypt::Misty1, Crypt::Anubis, Crypt::Noekeon, Crypt::Skipjack, and Crypt::Camellia.
CAVEATS
Note that this implementation has been rigged and tested only on the Intel platform, and thus, it could give wrong results for non-Intel processors.
COPYRIGHT AND LICENSE
Copyright 2003 by Julius C. Duque <jcduque (AT) lycos (DOT) com>
This library is free software; you can redistribute it and/or modify it under the same terms as the GNU General Public License.