ctr_eFuse/tools/bin2c.plx
(no author) 42b718d775 Add first files.
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_eFuse@1 ff987cc8-cf2f-4642-8568-d52cce064691
2009-12-21 08:45:37 +00:00

95 lines
2.0 KiB
Perl

#!/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] ) {
die "parameter error.\n";
}
$_ = "cr_" . basename($srcfname, "");
s/(\..*)/\.c/;
$dstfname_c = $_;
s/(\..*)/\.h/;
$dstfname_h = $_;
s/(\..*)/_DER/;
$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 );
# 配列サイズを + 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 "\/\/下記配列は、DERフォーマットの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;