File Coverage

blib/lib/Webqq/Encryption/TEA.pm
Criterion Covered Total %
statement 9 41 21.9
branch 0 14 0.0
condition 0 3 0.0
subroutine 3 5 60.0
pod 0 2 0.0
total 12 65 18.4


line stmt bran cond sub pod time code
1             package Webqq::Encryption::TEA;
2 1     1   2 use strict;
  1         2  
  1         25  
3 1     1   4 use Carp;
  1         0  
  1         35  
4 1     1   3 use JE;
  1         1  
  1         313  
5              
6             sub strToBytes{
7 0     0 0   my $str = shift;
8             #$str = join "",map {"\\x$_"} unpack "H2"x length($str),$str;
9 0           my $return = "";
10 0           for(split //,$str){$return .= sprintf "%02x",ord($_)};
  0            
11             #my $je;
12             #if(defined $Webqq::Encryption::TEA::_je ){
13             # $je = $Webqq::Encryption::TEA::_je ;
14             #}
15             #else{
16             # my $javascript;
17             # if(defined $Webqq::Encryption::TEA::_javascript){
18             # $javascript = $Webqq::Encryption::TEA::_javascript;
19             # }
20             # else{
21             # local $/ = undef;
22             # $javascript = ;
23             # $Webqq::Encryption::TEA::_javascript = $javascript;
24             # close DATA;
25             # }
26             # $je = JE->new;
27             # $je->eval($javascript);
28             # croak "Webqq::Encryption::TEA load javascript error: $@\n" if $@;
29             # $Webqq::Encryption::TEA::_je = $je;
30             #}
31            
32             #print qq#
33             # var tea = TEA();
34             # var r = tea.strToBytes('$str');
35             # return(r);
36             ##;
37             #$return = $je->eval(qq#
38             # var tea = TEA();
39             # var r = tea.strToBytes('$str');
40             # return(r);
41             ##);
42              
43             #croak $@ if $@;
44 0           return $return;
45             }
46             sub encrypt {
47 0     0 0   my ($key,$data) = @_;
48 0           $key = join "",map {"\\x$_"} unpack "H2"x length($key),$key;
  0            
49 0           my $je;
50 0 0         if(defined $Webqq::Encryption::TEA::_je ){
51 0           $je = $Webqq::Encryption::TEA::_je ;
52             }
53             else{
54 0           my $javascript;
55 0 0         if(defined $Webqq::Encryption::TEA::_javascript){
56 0           $javascript = $Webqq::Encryption::TEA::_javascript;
57             }
58             else{
59 0           local $/ = undef;
60 0           $javascript = ;
61 0           $Webqq::Encryption::TEA::_javascript = $javascript;
62 0           close DATA;
63             }
64 0           $je = JE->new;
65 0           $je->eval($javascript);
66 0 0         croak "Webqq::Encryption::TEA load javascript error: $@\n" if $@;
67 0           $Webqq::Encryption::TEA::_je = $je;
68             }
69              
70             #print qq#
71             # var tea = TEA();
72             # tea.initkey('$key');
73             # //var r = tea.enWithoutBase64('$data');
74             # var r = tea.enAsBase64("$data");
75             # tea.initkey("");
76             # return(r);
77             ##;
78 0           my $has_mime_base64;
79 0           eval{
80 0           require MIME::Base64;
81 0           *Webqq::Encryption::TEA::encode_base64 = *MIME::Base64::encode_base64;
82             };
83 0 0         $has_mime_base64 = 1 unless $@;
84 0 0         my $js_code = $has_mime_base64?"var r = tea.enWithoutBase64('$data')":"var r = tea.enAsBase64('$data')";
85 0           my $p = $je->eval(qq#
86             var tea = TEA();
87             tea.initkey('$key');
88             $js_code;
89             tea.initkey("");
90             return(r);
91             #);
92 0 0 0       if($p and !$@){
93 0 0         return $has_mime_base64?encode_base64($p,""):$p;
94             }
95             else{
96 0           croak "Webqq::Encryption::TEA error: $@\n";
97             }
98             }
99             1;
100             __DATA__