=head1 NAME Net::FCP::Key::CHK - manage CHK keys. =head1 SYNOPSIS use Net::FCP::Key::CHK; my $key = new Net::FCP::Key::CHK; my $key = new_from_uri Net::FCP::Key::CHK $uri; my $key = new_from_data Net::FCP::Key::CHK $data, $metadata; ... more to come =head1 DESCRIPTION =back =head2 THE Net::FCP::Key::CHK CLASS =over 4 =cut package Net::FCP::Key::CHK; use Carp; use Digest::SHA1; use Crypt::Twofish2; use MIME::Base64; no warnings; sub log2($$) { # n, minlog my ($n, $b) = @_; $b++ while 1 << $b < $n; $b; } sub decode_fbase64 { my $s = shift; $s =~ y%~\-%+/%; decode_base64 "$s======"; } sub encode_fbase64 { my $s = encode_base64 shift, ""; $s =~ s/=+$//; $s =~ y%+/%~\-%; $s; } =item my $key = new Net::FCP::Key::CHK; Don't use :) =cut sub new { my $class = shift; bless { }, $class; } =item my $key = new_from_date Net::FCP::Key::CHK $data, $metadata; Generate a CHK from the given data and metadata strings. =cut sub new_from_data { my ($class, $data, $metadata) = @_; $class->new->set_data ($data, $metadata); } sub set_data { my ($self, $data, $metadata) = @_; my $d = new Digest::SHA1; $d->add ($metadata); $d->add ($data); $d = $d->digest; # only works for 128 bit keys my $k = new Digest::SHA1; $k->add ("\x00" x 1); $k->add ($d); } =item $size = $key->size Returns the size of the data (in bytes). =cut =item $digest = $key->digest Return the store digest/hash. =cut =item $keynum = $key->keynumber Returns the keynumber (version?) =cut =item $chk = $key->chk Return the full CHK. =cut =back =head1 SEE ALSO L. =head1 BUGS Not heavily tested. =head1 AUTHOR Marc Lehmann http://www.goof.com/pcg/marc/ =cut 1;