| line |
stmt |
bran |
cond |
sub |
pod |
time |
code |
|
1
|
|
|
|
|
|
|
package Net::DAAP::Client::v3; |
|
2
|
1
|
|
|
1
|
|
5
|
use strict; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
31
|
|
|
3
|
1
|
|
|
1
|
|
4
|
use warnings; |
|
|
1
|
|
|
|
|
2
|
|
|
|
1
|
|
|
|
|
23
|
|
|
4
|
1
|
|
|
1
|
|
892
|
use Digest::MD5::M4p; |
|
|
1
|
|
|
|
|
1098
|
|
|
|
1
|
|
|
|
|
341
|
|
|
5
|
|
|
|
|
|
|
|
|
6
|
|
|
|
|
|
|
# this is a translation of the GenerateHash function in hasher.c of |
|
7
|
|
|
|
|
|
|
# libopendaap http://crazney.net/programs/itunes/authentication.html |
|
8
|
|
|
|
|
|
|
|
|
9
|
|
|
|
|
|
|
my @seeds; |
|
10
|
|
|
|
|
|
|
sub validate { |
|
11
|
0
|
|
|
0
|
0
|
|
my $self = shift; |
|
12
|
0
|
|
|
|
|
|
my ($url, $select, $sequence) = @_; |
|
13
|
0
|
0
|
|
|
|
|
unless (@seeds) { |
|
14
|
0
|
|
|
|
|
|
for my $i (0..255) { |
|
15
|
0
|
|
|
|
|
|
my $ctx = Digest::MD5::M4p->new; |
|
16
|
|
|
|
|
|
|
|
|
17
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x40 ? "eqwsdxcqwesdc" : "op[;lm,piojkmn" ); |
|
18
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x20 ? "876trfvb 34rtgbvc" : "=-0ol.,m3ewrdfv" ); |
|
19
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x10 ? "87654323e4rgbv " |
|
20
|
|
|
|
|
|
|
: "1535753690868867974342659792" ); |
|
21
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x08 ? "Song Name" : "DAAP-CLIENT-ID:" ); |
|
22
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x04 ? "111222333444555" : "4089961010" ); |
|
23
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x02 ? "playlist-item-spec" : "revision-number" ); |
|
24
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x01 ? "session-id" : "content-codes" ); |
|
25
|
0
|
0
|
|
|
|
|
$ctx->add( $i & 0x80 ? "IUYHGFDCXWEDFGHN" : "iuytgfdxwerfghjm" ); |
|
26
|
0
|
|
|
|
|
|
push @seeds, uc $ctx->hexdigest; |
|
27
|
|
|
|
|
|
|
} |
|
28
|
|
|
|
|
|
|
} |
|
29
|
|
|
|
|
|
|
|
|
30
|
0
|
|
|
|
|
|
my $ctx = Digest::MD5::M4p->new; |
|
31
|
0
|
|
|
|
|
|
$ctx->add( $url ); |
|
32
|
0
|
|
|
|
|
|
$ctx->add( "Copyright 2003 Apple Computer, Inc." ); |
|
33
|
0
|
|
|
|
|
|
$ctx->add( $seeds[ $select ]); |
|
34
|
0
|
0
|
|
|
|
|
$ctx->add( $sequence ) if $sequence; |
|
35
|
0
|
|
|
|
|
|
return uc $ctx->hexdigest; |
|
36
|
|
|
|
|
|
|
} |
|
37
|
|
|
|
|
|
|
|
|
38
|
|
|
|
|
|
|
1; |
|
39
|
|
|
|
|
|
|
__END__ |