The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Filter::CBC - Source filter for Cipher Block Chaining

SYNOPSIS

  # Please don't encrypt me!

  use Filter::CBC "Rijndael","my secret key";

  # This file will be encrypted and overwritten.
  # Make backups, damnit!
  # Autofilter example
  print "Don't try this at home, kids !";

  -or-

  # Please don't encrypt me!

  use Filter::CBC "","";

  # This file will be encrypted and overwritten.
  # Make backups, damnit!
  # Autofilter example
  # Defaults will be used
  # Rijndael is default encryption algorithm
  # Default keyphrase is : This space is left blank intentionally
  print "Don't try this at home, kids !";

  -or-

  BEGIN { use LWP::Simple; my $key = get("http://www.somesite.com/key.txt"); }
  
  use Filter::CBC "Rijndael",$key;

  secretstuff();

DESCRIPTION

Filter::CBC is a Source filter that uses Cipher Block Chaining (CBC) to encrypt your code. The tricky part is that most CBC Algorithms have binary output. The textmode bypasses this obstacle, by converting the data to less scary data.

DOWNSIDES

  • Source filters are slow. VERY Slow. Filter::CBC is not an exception. Well uhm kinda. Filter::CBC is even slower. Be warned, be VERY VERY warned.

  • You're source file is overwrittten when you're using the autoefilter feature.

PARAMETERS

The two parameters that can be passed along are :

CBC Handler

This parameter indicates what CBC encryption routine to use. Possible values are described in the next section.

Keyphrase

This parameter is the keyphrase for the encryption routine described as previous parameter.

INTERNAL CBC HANDLERS

The following parameters can be passed as part of the CBC encryption routine

Rijndael

This is the AES (Advanced Encryption Scheme) routine. You need Crypt::Rijndael for this.

DES

This is the DES routine. You need Crypt::DES for this.

IDEA

This is the IDEA routine. You need Crypt::IDEA for this.

Blowfish

This is the Blowfish routine. You need Crypt::Blowfish for this.

GOST

This is the GOST routine. You need Crypt::GOST for this.

DES_EDE3

This is the Triple DES routine. You need Crypt::DES_EDE3 for this.

Twofish

This is the Twofish routine. You need Crypt::Twofish for this.

NULL

This is the NULL routine. You need Crypt::NULL for this.

TEA

This is the TEA routine. You need Crypt::TEA for this.

RC6

This is the RC6 routine. You need Crypt::RC6 for this.

Serpent

This is the Serpent routine. You need Crypt::Serpent for this. (Untested)

But any CBC Compatible routine will work.

TEXT HANDLERS

As Paul Marquess noted, Filter has no problems with binary data. The text handlers are totally unnecesary. I therefor removed them. You can still use hex encoding by using the Filter::Hex module provided in the obsolete directory. If you have code that used the older version of Filter::CBC, I recommend stacking the HEX filter. Edit the use statement as follows :

  use Filter::Hex; use Filter::CBC "Rijndael","my secret key";

AUTOFILTERING

Since Filter::CBC 0.04, using code2cbc isn't required anymore. Filter::CBC can encrypt your code on the fly if it's not yet encrypted. Be warned that your source file is overwritten. You can use cbc2code.pl to decrypt your encrypted code. BACKUP!

  use Filter::CBC "Rijndael","my secret key";

  # This file will be encrypted and overwritten.
  # Make backups, damnit!
  # Autofilter example
  print "Don't try this at home, kids !";

This code will be encrypted the first time you run it. Everything before the 'use Filter::CBC' line is kept intact. Filter::CBC sets a 'marker' so that double encryption doesn't occur. If you see a comment stating 'This space is left blank intentionally', ignore it.

DEFAULTS

Encryption routine

Filter::CBC will use Rijndael when no encryption algorithm is defined.

Keyphrase

Filter::CBC will use the following line when no keyphrase is defined :

This space is left blank intentionally

REQUIREMENTS

Filter::CBC requires the following modules (depending on your needs)

Filter::Util::Call
Crypt::CBC
Crypt::Rijndael
Crypt::DES
Crypt::IDEA
Crypt::Blowfish
Crypt::GOST
Crypt::DES_EDE3
Crypt::Twofish
Crypt::NULL
Crypt::TEA
Crypt::RC6
Crypt::Serpent

THANKS A MILLION

Alot of thanks to Ray Brinzer (Petruchio on Perlmonks) for giving an example on how to handle parameters with use.

Paul Marquess for writing Filter and pointing out that Filter does what it should and not what I expect it to.

A bunch of monks at Perlmonks for giving some excellent and well appreciated feedback on detecting code. Thank you Blakem, Petral, Chipmunk, Tilly, Jepri and Zaxo.

TODO

A bit less then first release but still plenty.

DISCLAIMER

This code is released under GPL (GNU Public License). More information can be found on http://www.gnu.org/copyleft/gpl.html

VERSION

This is Filter::CBC 0.09

AUTHOR

Hendrik Van Belleghem (beatnik -at- quickndirty -dot- org)

SEE ALSO

GNU & GPL - http://www.gnu.org/copyleft/gpl.html

Filter::Util::Call - http://search.cpan.org/search?dist=Filter

Crypt::CBC - http://search.cpan.org/search?dist=Crypt-CBC

Crypt::Rijndael - http://search.cpan.org/search?dist=Crypt-Rijndael

Crypt::DES - http://search.cpan.org/search?dist=Crypt-DES

Crypt::IDEA - http://search.cpan.org/search?dist=Crypt-IDEA

Crypt::Blowfish - http://search.cpan.org/search?dist=Crypt-Blowfish

Crypt::GOST - http://search.cpan.org/search?dist=Crypt-GOST

Crypt::DES_EDE3 - http://search.cpan.org/search?dist=Crypt-DES_EDE3

Crypt::Twofish - http://search.cpan.org/search?dist=Crypt-Twofish

Crypt::NULL - http://search.cpan.org/search?dist=Crypt-NULL

Crypt::TEA - http://search.cpan.org/search?dist=Crypt-TEA

Crypt::RC6 - http://search.cpan.org/search?dist=Crypt-RC6

Crypt::Serpent - http://search.cpan.org/search?dist=Crypt-Serpent

Paul Marquess' article on Source Filters - http://www.samag.com/documents/s=1287/sam03030004/