File Coverage

blib/lib/Webqq/Encryption/RSA.pm
Criterion Covered Total %
statement 9 49 18.3
branch 0 12 0.0
condition 0 3 0.0
subroutine 3 4 75.0
pod 0 1 0.0
total 12 69 17.3


line stmt bran cond sub pod time code
1             package Webqq::Encryption::RSA;
2 1     1   4 use strict;
  1         1  
  1         26  
3 1     1   3 use JE;
  1         1  
  1         38  
4 1     1   3 use Carp;
  1         1  
  1         334  
5              
6             sub encrypt {
7 0     0 0   my $data = shift;
8 0           eval {
9 0           require Crypt::RSA::ES::PKCS1v15;
10 0           require Crypt::RSA::Key::Public;
11             };
12 0 0         unless($@){
13 0           my $n = "0xF20CE00BAE5361F8FA3AE9CEFA495362FF7DA1BA628F64A347F0A8C012BF0B254A30CD92ABFFE7A6EE0DC424CB6166F8819EFA5BCCB20EDFB4AD02E412CCF579B1CA711D55B8B0B3AEB60153D5E0693A2A86F3167D7847A0CB8B00004716A9095D9BADC977CBB804DBDCBA6029A9710869A453F27DFDDF83C016D928B3CBF4C7";
14 0           my $public = Crypt::RSA::Key::Public->new();
15 0           $public->e("0x3");
16 0           $public->n($n);
17 0           my $rsa = Crypt::RSA::ES::PKCS1v15->new();
18 0           return lc join "",unpack "H*", $rsa->encrypt(Message=>$data,Key=>$public,);
19             }
20             else{
21 0           eval{
22 0           require Crypt::OpenSSL::RSA;
23 0           require Crypt::OpenSSL::Bignum;
24             };
25 0 0         unless($@){
26 0           my $n = Crypt::OpenSSL::Bignum->new_from_hex("F20CE00BAE5361F8FA3AE9CEFA495362FF7DA1BA628F64A347F0A8C012BF0B254A30CD92ABFFE7A6EE0DC424CB6166F8819EFA5BCCB20EDFB4AD02E412CCF579B1CA711D55B8B0B3AEB60153D5E0693A2A86F3167D7847A0CB8B00004716A9095D9BADC977CBB804DBDCBA6029A9710869A453F27DFDDF83C016D928B3CBF4C7");
27 0           my $e = Crypt::OpenSSL::Bignum->new_from_hex("3");
28 0           my $rsa = Crypt::OpenSSL::RSA->new_key_from_parameters($n,$e);
29 0           $rsa->use_pkcs1_padding();
30 0           return lc join "",unpack "H*", $rsa->encrypt($data);
31             }
32             }
33 0           $data = join "",map {"\\x$_"} unpack "H2"x length($data),$data;
  0            
34 0           my $je;
35 0 0         if(defined $Webqq::Encryption::RSA::_je ){
36 0           $je = $Webqq::Encryption::RSA::_je ;
37             }
38             else{
39 0           my $javascript;
40 0 0         if(defined $Webqq::Encryption::RSA::_javascript){
41 0           $javascript = $Webqq::Encryption::RSA::_javascript;
42             }
43             else{
44 0           local $/ = undef;
45 0           $javascript = ;
46 0           $Webqq::Encryption::RSA::_javascript = $javascript;
47 0           close DATA;
48             }
49 0           $je = JE->new;
50 0           $je->eval($javascript);
51 0 0         croak "Webqq::Encryption::RSA load javascript error: $@\n" if $@;
52 0           $Webqq::Encryption::RSA::_je = $je;
53             }
54            
55             #print qq#
56             # var rsa = RSA();
57             # var r = rsa.rsa_encrypt('$data');
58             # return(r);
59             ##;
60 0           my $p = $je->eval(qq#
61             var rsa = RSA();
62             var r = rsa.rsa_encrypt('$data');
63             return(r);
64             #);
65 0 0 0       if($p and !$@){
66 0           return $p;
67             }
68             else{
69 0           croak "Webqq::Encryption::RSA error: $@\n";
70             }
71            
72             }
73              
74             1;
75             __DATA__