HTTP-Cookies-Chrome
view release on metacpan or search on metacpan
Makefile.PL view on Meta::CPAN
a module.
To build the distribution, run this file normally:
% perl Makefile.PL
But, it's more interesting than that. You can load it with C<require>
and call C<arguments> to get the data structure it passes to
C<WriteMakefile>:
my $package = require '/path/to/Makefile.PL';
my $arguments = $package->arguments;
Note that C<require>-ing a file makes an entry in C<%INC> for exactly
that name. If you try to C<require> another file with the same name,
even from a different path, C<require> thinks it has already loaded
the file. As such, I recommend you always require the full path to the
file.
The return value of the C<require> is a package name (in this case,
the name of the main module. Use that to call the C<arguments> method.
lib/HTTP/Cookies/Chrome.pm view on Meta::CPAN
sub _get_utc_microseconds {
no warnings 'uninitialized';
use bignum;
POSIX::strftime( '%s', gmtime() ) * 1_000_000 + ($_[1]//0);
}
sub _make_cipher {
my( $self, $password ) = @_;
my $key = do {
state $rc2 = require PBKDF2::Tiny;
my $s = _platform_settings();
my $salt = 'saltysalt';
my $length = 16;
PBKDF2::Tiny::derive( 'SHA-1', $password, $salt, $s->{iterations}, $length );
};
state $rc1 = require Crypt::Rijndael;
my $cipher = Crypt::Rijndael->new( $key, Crypt::Rijndael::MODE_CBC() );
$cipher->set_iv( ' ' x 16 );
$self->_add_value( chrome_safe_storage_password => $password );
$self->_add_value( cipher => $cipher );
}
sub _platform_settings {
# https://n8henrie.com/2014/05/decrypt-chrome-cookies-with-python/
# https://github.com/n8henrie/pycookiecheat/issues/12
( run in 0.323 second using v1.01-cache-2.11-cpan-0d8aa00de5b )