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