ctr_eFuse/trunk/tools/bin2c.plx
(no author) 577c5fc792 ツリー全体をtrunkフォルダに移動。
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_eFuse@176 ff987cc8-cf2f-4642-8568-d52cce064691
2010-01-12 08:55:42 +00:00

95 lines
2.0 KiB
Perl
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#!/usr/bin/perl -w
use strict;
use File::Basename;
# バイナリファイルをCソースに変換
my $KEY_VER = 1;
my $srcfname = $ARGV[0];
my $dstfname_c;
my $dstfname_h;
my $arrayname;
my $size;
if( !$ARGV[0] || !$ARGV[1] ) {
die "parameter error.\n";
}
$_ = "cr_" . basename($srcfname, "");
s/(\..*)/_$ARGV[1]\.c/;
$dstfname_c = $_;
#s/(\..*)/\.h/;
#$dstfname_h = $_;
s/(\..*)//;
$arrayname = $_;
$size = -s $srcfname;
open SRC, "< $srcfname"
or die "Cannot open file $srcfname : $!";
open DST, "> $dstfname_c"
or die "Cannot open file temp : $!";
#open DST2, "> $dstfname_h"
# or die "Cannot open file temp : $!";
binmode( SRC );
# $sizeが16byte超(AES鍵でないなら、配列サイズを + magic_code(8) + keyLen(2) + padding(6) し、16bytesでROUNDUP
my $array_size = ( $size + 16 + 15) & 0xfffffff0;
# .c ファイルに変換して出力
printf DST "#include <stdio.h>\n\n";
printf DST "\/\/下記配列は、KEYデータの前に magic_code[8] + keyLen[2] + keyVer[1] + padding[5] のデータが挿入されています。\n\n";
printf DST "const unsigned char %s[ 0x%x ] = {\n\t", $arrayname, $array_size;
# magic code
my $magic_priv = "REDCODER";
my $magic_pub = "REDCODEU";
my @magic_list;
if( $srcfname =~ m/priv/ ) {
@magic_list = unpack( "H2H2H2H2H2H2H2H2", $magic_priv );
}else {
@magic_list = unpack( "H2H2H2H2H2H2H2H2", $magic_pub );
}
foreach my $elem ( @magic_list ) {
printf DST "0x%s, ", $elem;
}
# サイズ
printf DST "0x%02x, ", $size % 256;
printf DST "0x%02x, ", $size / 256;
# KEYバージョン
printf DST "0x%02x, ", $KEY_VER;
# パディング
my $i;
for ( $i = 0; $i < 5; $i++) {
printf DST "0x%02x, ", rand(255);
}
# KEY実体
my $buff;
my $count = 0;
while( sysread( SRC, $buff, 1 ) ) {
my $src = unpack( "C", $buff );
print DST "\n\t" if( ( $count & 0x0f ) == 0 );
printf DST "0x%02x, ", $src;
$count++;
}
print DST "\n};\n";
close SRC;
close DST;
# .h ファイルも出力
#printf DST2 "extern const unsigned char %s[ 0x%x ];\n", $arrayname, $array_size;
#close DST2;