Crypt-Mimetic
view release on metacpan or search on metacpan
lib/Crypt/Mimetic.pm view on Meta::CPAN
use vars qw/*name *dir *prune/;
*name = *File::Find::name;
*dir = *File::Find::dir;
*prune = *File::Find::prune;
my (@dirs, %algo);
my $wanted = sub {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
/^Mimetic\z/os &&
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-d _ &&
push(@dirs,"$name");
};
# Traverse desired filesystems
File::Find::find({wanted => $wanted}, @INC);
$wanted = sub {
my ($dev,$ino,$mode,$nlink,$uid,$gid);
/^.*\.pm\z/os &&
(($dev,$ino,$mode,$nlink,$uid,$gid) = lstat($_)) &&
-f _ || return;
s/^(.+)\.pm$/$1/o;
$algo{$_} = $_;
};
File::Find::find({wanted => $wanted}, @dirs);
return ( keys %algo );
}
=pod
lib/Crypt/Mimetic.pm view on Meta::CPAN
encrypted_file_length\0
@info
than encrypt it and calculate length of encrypted sign.
Return a string composed by concatenation of encrypted sign, algorithm (32 bytes null padding string) and its length (8 bytes hex number).
=cut
sub Sign {
my ($original_file,$mask_file,$dlen,$algorithm,$key,@info) = @_;
my $mlen = (stat($mask_file))[7];
my $sign = join "\0", "Mimetic", $VERSION, $mask_file, $mlen, $original_file, $dlen, @info;
$sign = EncryptString($sign,$algorithm,$key,@info);
my $slen = pack "a8", sprintf "%x", length($sign);
my $algo = pack "A32", $algorithm;
return join '', $sign, ~$algo, ~$slen;
}
=pod
=item (string,int) I<GetSignInfo> ($mimetic_file)
Return the algorithm and the length of the sing read from last 40 bytes of $mimetic_file.
Throws an I<Error::Mimetic> if cannot open file
=cut
sub GetSignInfo {
my ($mimetic_file) = @_;
my $len = (stat($mimetic_file))[7];
my $offset = $len - 40;
open (FH, "$mimetic_file") or throw Error::Mimetic "Cannot open $mimetic_file: $!";
my ($algo,$slen) = ("","");
seek FH, $offset, 0;
read FH, $algo, 32;
read FH, $slen, 8;
close(FH);
return (unpack ("A32", ~$algo) , hex(~$slen));
}
lib/Crypt/Mimetic.pm view on Meta::CPAN
$original_file - original file's name
$olen - original file's length
@pinfo - specific encryption algorithm information
Throws an I<Error::Mimetic> if cannot open file
=cut
sub ParseSign {
my ($mimetic_file,$slen,$algorithm,$key,@info) = @_;
my $len = (stat($mimetic_file))[7];
my $offset = $len - 40 - $slen;
open (FH, "$mimetic_file") or throw Error::Mimetic "Cannot open $mimetic_file: $!";
my $sign = "";
seek FH, $offset, 0;
read FH, $sign, $slen;
close(FH);
$sign = DecryptString($sign,$algorithm,$key,@info);
return split "\0", $sign;
}
( run in 1.352 second using v1.01-cache-2.11-cpan-49f99fa48dc )