TwlIPL/tools/bin/genVersion.plx
yoshida_teruhisa 87090c27b8 バージョン情報のためのTADファイルを生成する仕掛けを追加
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1675 b08762b0-b915-fc4b-9d8c-17b2551a87ff
2008-06-24 01:31:27 +00:00

84 lines
2.0 KiB
Perl

#!/usr/bin/perl
######################################################################
# genVersion.pl
#
# generate SystemMenu Version Data
#
# [[ FILE FORMAT ]]
# security code (128 bytes) : RSA signature of Version Data
#
# Version Data ( 32 bytes)
# TimeStamp ( 4 bytes) : date %y%m%d%H
# Version ( 4 bytes) : 0 ~
# padding ( 24 bytes) :
#
# note: each section image is aligned to 32 bytes.
#
######################################################################
use POSIX 'strftime';
use File::Basename;
if ($#ARGV < 1) {
printf STDOUT ("Usage: %s [genVersion] timestamp version\n", $0);
exit(-1);
}
my $outFile = "SysmenuVersion.dat";
my $versionFile = "version.bin";
my $signFile = "sign.bin";
# 後始末
sub deleteTemp {
system ("rm -f $versionFile");
system ("rm -f $signFile");
}
my $signSize = 0x80;
my $versionSize = 0x20;
my @files;
# バージョン情報の出力
{
# timestampLen = 0x08;
# elementNumLen = 0x02;
my $padLen = 0x18;
open VERSION, ">$versionFile" or die "File Open Error.\n";
binmode VERSION;
# タイムスタンプの出力
# my $timestamp = strftime "%y%m%d%H", localtime;
my $timestamp = $ARGV[ 0 ];
my $ver = $ARGV[ 1 ];
printf "timestamp = %s\n", $timestamp;
syswrite( VERSION, pack( "N", unpack( "L", pack( "H8", $timestamp ) ) ) );
# バージョンの出力
syswrite( VERSION, pack( "L", $ver ) );
# パディングの出力
syswrite( VERSION, pack( "x$padLen") );
close VERSION;
}
# 環境変数サーチ
foreach ( sort keys ( %ENV ) ){
if ($_ =~ m/TWL_IPL_RED_PRIVATE_ROOT/s) {
$KEYROOT = $ENV{$_};
}
}
if (!$KEYROOT) {
deleteTemp();
die "No TWL_IPL_RED_PRIVATE_ROOT is found.\n";
}
# バージョン情報に署名付加
{
system ( "openssl rsautl -sign -in $versionFile -inkey $KEYROOT/keys/rsa/private_sharedFont.der -keyform DER -out $signFile" );
system ( "cat $signFile $versionFile >$outFile" );
deleteTemp();
}