Audio-M4P
view release on metacpan or search on metacpan
lib/Audio/M4P/Decrypt.pm view on Meta::CPAN
|| $self->GetSCInfoUserKey();
if ( !$userKey ) {
carp "Cannot find user key for $infile";
return;
}
else {
print "User key is $userKey\n" if $self->{DEBUG};
}
my $md5 = new Digest::MD5;
$md5->add( $self->{QTStream}->{name}, $self->{QTStream}->{iviv} );
my $alg = new Crypt::Rijndael( $userKey, Crypt::Rijndael::MODE_CBC );
$alg->set_iv( $md5->digest );
$self->Decrypt(
\$self->{QTStream}->{priv}, 0,
length( $self->{QTStream}->{priv} ), $alg
);
if ( $self->{QTStream}->{priv} !~ /^itun/ ) {
carp "Priv decryption if $infile failed.";
return;
}
my $key = substr( $self->{QTStream}->{priv}, 24, 16 );
$alg = new Crypt::Rijndael( $key, Crypt::Rijndael::MODE_CBC );
$alg->set_iv( substr( $self->{QTStream}->{priv}, 48, 16 ) );
my $mdata = $self->{QTStream}->FindAtom('mdat');
my $posit = $mdata->start + 8;
foreach my $samplesize ( @{$sampleTable} ) {
$self->Decrypt( $mdata->rbuf, $posit, $samplesize, $alg );
$posit += $samplesize;
}
$self->{QTStream}->ConvertDrmsToMp4a();
if ( $self->{forceclean} ) {
( run in 2.210 seconds using v1.01-cache-2.11-cpan-e1769b4cff6 )