mirror of
https://github.com/rvtr/ctr_eFuse.git
synced 2025-11-02 00:11:04 -04:00
HSM使用時は、ダミー鍵をリンクしないよう変更。 HSM未使用時は、ダミー鍵を使用するよう変更。 ENCRYPT_AESは、Makefileではなく、ヘッダで定義するよう変更。 ・ダミー鍵処理を整備。 AES鍵も外部データをリンクするよう変更。 RSA鍵、AES鍵を共に開発鍵と製品鍵の両方を用意し、ボンディングオプションで切り替えるよう変更。 ダミー鍵使用時は、gen_id.exeを停止せず、最初に警告メッセージを表示するよう変更。 git-svn-id: file:///Volumes/Transfer/gigaleak_20231201/2020-09-30%20-%20paladin.7z/paladin/ctr_eFuse@32 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] || !$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;
|
||
|