Crypt::RSA is a pure-perl, cleanroom implementation of the RSA
public-key cryptosystem. The focus of the library is speed, security,
compatability, comprehensiveness and ease-of use. Crypt::RSA provides
simple, high level interfaces for most functions as well as clean
low-level interfaces should the programmer need to access them. It's
built atop the blazingly fast PARI library which is used for all big
integer arithmetic and number theoretic computations.
Crypt::RSA provides arbitrary size key-pair generation,
plaintext-aware encryption (OAEP) and digital signatures with appendix
(PSS). For compatibility with SSLv3, RSAREF2, PGP and other
applications that follow the PKCS #1 v1.5 standard, it also provides
PKCS #1 v1.5 encryption and signatures.
Crypt::Random is an interface module to the /dev/random device found
on most modern unix systems. It also interfaces with egd, a user space
entropy gathering daemon, available for systems where /dev/random (or
similar) devices are not available. When Math::Pari is installed,
Crypt::Random will return random integers of arbritary length of a
given bitsize or in a specified interval.
Tie::EncryptedHash augments Perl hash semantics to build secure,
encrypting containers of data. Tie::EncryptedHash introduces special
hash fields that are coupled with encrypt/decrypt routines to encrypt
assignments at STORE() and decrypt retrievals at FETCH(). By design,
encrypting fields are associated with keys that begin in single
underscore. The remaining keyspace is used for accessing normal hash
fields, which are retained without modification.
This module implements Ueli Maurer's algorithm for generating large
provable primes and secure parameters for public-key cryptosystems.
The generated primes are almost uniformly distributed over the set of
primes of the specified bitsize and expected time for generation is
less than the time required for generating a pseudo-prime of the same
size with Miller-Rabin tests.
A 3DES implementation in pure perl. A few people have written to me
about potential endianness issues in this module. There's quite
possibly a bug in here, but I haven't had a chance to look at it. Use
with caution, or don't use it at all. I'll happily accept a patch the
bug that lurks in there.
A system for executing perl objects in parallel on a single or a
cluster of machines. Concurrent::Object allows existing perl programs
to run in parallel with simple modifications to the code. It also
simulates Lazy Evaluation by replacing methods with dummies
that return tied values which are evaluated at access time by way of
obtaining their real value from proxy objects over IPC or TCP.
Concurrent::Object was presented at Yet Another Perl Conference, 2001
held in Montreal, Canada. Here's a link to the slides.
Concurrent::Object is a nifty hack, but some of the semantics I
desire (like methods that return tied hashes and arrays instead of
tied hash and array references) are not available in Perl 5. Perl 6
will allow me all the cool things I want this module to do, and I
eagerly its await its arrival. A production quality
Concurrent::Object would also use interpretter threads (ithreads) in addition to fork().
The Net::XWhois class provides a generic client framework for doing
Whois queries and parsing server response.
The class maintains an array of top level domains and whois
servers associated with them. This allows the class to
transparently serve requests for different TLDs, selecting servers
appropriate for the TLD.
One of the goals of this module is to enable the design of consistent
and predictable interfaces to incompatible whois response formats. The
Whois RFC (954)
does not define a template for presenting server data; consequently
there is a large variation in layout styles as well as content served
across servers.
CGI::Persistent is a subclass of the popular CGI module. It maintains
server-side sessions and allows the programmer to easily propagate
user state through her web application.
Provides a few functions related to Fibonacci numbers, including a
decompose() function that breaks down a given integer into the sum of
the multiples of Fibonacci numbers.
This module converts hashes of binary octets into ASCII messages
suitable for transfer over 6-bit clean transport channels. The encoded
ASCII resembles PGP's armoured messages.
Class::Loader is an inheritable class that provides a method,
_load(), to load a module from disk and construct an object by
calling its constructor. It also provides a way to map modules names
and associated metadata with symbolic names that can be used in
place of module names at _load(). Also, see Class::Autouse
by Adam Kenedy and
Rob Napier which provides a transparent way to defer
loading of a module till it is actually required.
throttle is a high-level, DWIM, configuration manager for Linux
traffic control engine. It provides a declaration syntax to describe
CBQ link-sharing structures (guidelines on how to distribute
bandwidth) and an interpreter to translate these declarations into
tc commands. throttle (holistically) manages various aspects of
Linux traffic control including CBQ classes, leaf queues, and packet
classification rules.
One of the primary goals of throttle is ease of maintainance of
large and complex CBQ structures, which tend to get difficult to
manage with tc rules. throttle's declaration syntax is simple and
optimized for describing CBQ trees, while its intelligent defaults,
symbolic naming and various configuration shortcuts make for minimal
con figuration files. Since throttle is mainly a wrapper around
tc, the expressiveness of tc command line has been retained
wherever possible.
I wrote throttle in the winter of 2000 for a
plug-into-the-network-n-play traffic shaping device I built at PacificNet to shape our wireless
customers.
The code is not quite as complete as I'd like it to be, but a lot of
folks have asked for it, so it's now officially available from here. It
worked well for us at PacificNet, but I have had no occasion to shape
traffic for myself since (and I don't work at PacificNet anymore).
It's unlikely I'll work on this codebase anytime soon, but you are
welcome to use it, extend it, or write applications based on
it.
In my research for throttle I found there was very little in the way
of documentation on Linux's implementation of CBQ. In the throttle
manual, I have attempted to explain concepts behind CBQ and how it is
implemented in Linux. Here's the PDF version of the manual.
Vipul's Razor is a colloborative, content-based spam filteration
system. Since its first release in 1998, Vipul's Razor has seen two
generations of evolution, and is considered to be one of the most
effective methods available for combatting spam.
Vipul's Razor (also known as SpamNet) is actively developed and
promoted by Cloudmark, Inc., a
company I founded along with Jordan Ritter. In December 2002,
Razor2/SpamNet had a quarter of million users, and it saved a
century's worth of its users' time during the previous six month
period. Razor2/SpamNet is growing rapidly both in participation and as
a technology and I am very excited to see where it will be and what
impact it will have on spam in the months & years to come.
For open source client clients, see Vipul's Razor homepage, and for the
Outlook plugin, see SpamNet homepage.
Ricochet is an automated source tracing and spam reporting
application. By analyzing received headers it determines hosts
responsible in propagation of the spam, and sends complaints to owners
or abuse contacts of these hosts.
Sidekick is a tool for building and maintaining Perl SDKs. An SDK is a
collection of perl modules, that installs from a top-level makefile.
Sidekick fetches latest versions of modules from CPAN, untars them,
applies stored patches, writes an appropriate Makefile.PL and a
MANIFEST and builds an SDK tarball. Essentially, it converts a list of
modules into a shippable SDK distribution. Sidekick also does
dependency resolution by parsing the sources to find modules missing
from the package. This feature can be used to build self-contained
SDKs, that don't have any dangling dependencies.
CODD is a tool for creating and analyzing statistical measures of
"developer involvement" in free software projects. By assimilating
authorship attribution information included in source files of a
package, CODD approximates the the amount of individual contributions
from developers who constructed the codebase. CODD also provides many
tools for analysis of the attribution data.
CODD was used in the First
Orbiten Free Software Survey. It has since been extended for International Institute of
Infonomics that uses CODD in open source research.
pev is a tiny perl script that stands for "perl extension version" and it
extracts and reports metadata from installed perl modules. It's default
behaviour it to print out the version number of the installed module
provided on the command line.