mirror of
https://github.com/rvtr/ctr_eFuse.git
synced 2025-11-02 00:11:04 -04:00
git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_eFuse@1 ff987cc8-cf2f-4642-8568-d52cce064691
95 lines
2.0 KiB
Perl
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;
|
|
|