1#!/bin/perl
2
3use strict;
4
5require "../common-perl/aes.pl";
6require "../common-perl/aes-demo-lib.pl";
7
8my $dec_mode = 0;
9
10if( $ARGV[0] eq "-d" )
11{
12	$dec_mode = 1;
13	shift @ARGV;
14}
15
16my( $src_a_file, $src_p_file, $tlen, $key_file, $nnc_file, $dst_file ) = @ARGV;
17
18die "invalid key file size\n" if -s $key_file != 16;
19die "Adata size must be a multiple of 16\n" if (-s $key_file) % 16 != 0;
20
21srand;
22
23my $rAdata = &demo::read_file($src_a_file);
24my $rPdata = &demo::read_file($src_p_file);
25my $rKey   = &demo::read_file($key_file);
26my $rOutput;
27
28if( length($$rPdata) % 16 != 0 )
29{
30	my $padBytes = 16 - (length($$rPdata) % 16);
31	$$rPdata .= pack("x$padBytes");
32}
33
34if( $dec_mode )
35{
36	my $result;
37	my $rNonce = &demo::read_file($nnc_file);
38	($rOutput, $result) = &aes::ccm_decrypt($rKey, $rNonce, $rAdata, $rPdata, $tlen);
39	print $result, "\n";
40}
41else
42{
43	my $rNonce = &demo::generate_rand(12);
44	$rOutput = &aes::ccm_encrypt($rKey, $rNonce, $rAdata, $rPdata, $tlen);
45	&demo::write_file($nnc_file, $rNonce);
46}
47
48&demo::write_file($dst_file, $rOutput);
49
50exit;
51
52
53