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