1package aes; 2 3use FileHandle; 4use IPC::Open2; 5use strict; 6 7my $aesconv = "../../../../tools/bin/aesconv.exe"; 8 9sub ctr 10{ my( $rKey, $rCounter, $rSrc ) = @_; 11 my $key = unpack("H*", $$rKey); 12 my $ctr = unpack("H*", $$rCounter); 13 my $encrypted = ""; 14 my $buf; 15 16 open2(*PIPE_IN, *PIPE_OUT, "$aesconv -m ctr -k hex:$key -c hex:$ctr") or die "cant exec aesconv\n"; 17 binmode PIPE_IN; 18 binmode PIPE_OUT; 19 print PIPE_OUT $$rSrc; 20 close(PIPE_OUT); 21 22 while( read(PIPE_IN, $buf, 1024) == 1024 ) 23 { 24 $encrypted .= $buf; 25 } 26 27 $encrypted .= $buf; 28 close(PIPE_IN); 29 30 return \$encrypted; 31} 32 33sub ccm_encrypt 34{ my( $rKey, $rNonce, $rAdata, $rPdata, $tlen ) = @_; 35 my $key = unpack("H*", $$rKey); 36 my $nonce = unpack("H*", $$rNonce); 37 my $adata_len = length($$rAdata); 38 my $encrypted = ""; 39 my $buf; 40 41 open2(*PIPE_IN, *PIPE_OUT, "$aesconv -m ccm -k hex:$key -n hex:$nonce -a stdin:$adata_len -t $tlen") or die "cant exec aesconv\n"; 42 binmode PIPE_IN; 43 binmode PIPE_OUT; 44 print PIPE_OUT $$rAdata; 45 print PIPE_OUT $$rPdata; 46 close(PIPE_OUT); 47 48 while( read(PIPE_IN, $buf, 1024) == 1024 ) 49 { 50 $encrypted .= $buf; 51 } 52 53 $encrypted .= $buf; 54 close(PIPE_IN); 55 56 return \$encrypted; 57} 58 59 601; 61