mirror of
https://github.com/rvtr/TwlIPL.git
synced 2025-10-31 06:01:12 -04:00
バージョンファイル関係更新
git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@1817 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
parent
b4e285d208
commit
de01bc3833
@ -17,23 +17,36 @@
|
|||||||
#----------------------------------------------------------------------------
|
#----------------------------------------------------------------------------
|
||||||
|
|
||||||
# バージョンファイルとTADを生成する
|
# バージョンファイルとTADを生成する
|
||||||
# WL_IPL_RED_PRIVATE_ROOTが設定されていない場合は
|
# TWL_IPL_RED_PRIVATE_ROOTが設定されていない場合は
|
||||||
# 既存のバージョンファイルからTADのみ生成する
|
# 既存のバージョンファイルからTADのみ生成する
|
||||||
|
|
||||||
|
# 現在、製品版の証明書を含んだものは生成しない
|
||||||
|
|
||||||
TARGET_FIRM = SYSTEMMENU
|
TARGET_FIRM = SYSTEMMENU
|
||||||
|
|
||||||
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs
|
||||||
include ./commondefs.sysmenuVersion
|
include ./commondefs.sysmenuVersion
|
||||||
|
|
||||||
|
# タイムスタンプ
|
||||||
VER_TIMESTAMP = 08062300
|
VER_TIMESTAMP = 08062300
|
||||||
|
|
||||||
# システムメニューバージョン
|
# システムメニューバージョン
|
||||||
|
STR_VERSION = 0.1A
|
||||||
MAJOR_VERSION = 0
|
MAJOR_VERSION = 0
|
||||||
MINOR_VERSION = 1
|
MINOR_VERSION = 1
|
||||||
|
|
||||||
# ユーザー領域サイズ(=128MB)
|
# ユーザー領域サイズ(=128MB)
|
||||||
USER_AREA_SIZE = 134217728
|
USER_AREA_SIZE = 134217728
|
||||||
|
|
||||||
|
# NUPホストネーム
|
||||||
|
NUP_HOSTNAME = nus.shop.wii.com:443
|
||||||
|
|
||||||
|
# EULAのURL
|
||||||
|
EULA_URL = https://cfh-test.t.app.nintendowifi.net/eula/
|
||||||
|
|
||||||
|
GEN_VERSION_PARAM = $(VER_TIMESTAMP) $(STR_VERSION) $(MAJOR_VERSION) $(MINOR_VERSION) \
|
||||||
|
$(USER_AREA_SIZE) $(NUP_HOSTNAME) $(EULA_URL)
|
||||||
|
|
||||||
GEN_VERSION_FILE = $(SYSMENU_TOOLSDIR)/bin/genVersion.plx
|
GEN_VERSION_FILE = $(SYSMENU_TOOLSDIR)/bin/genVersion.plx
|
||||||
|
|
||||||
VERSION_TAD = HNLA.tad
|
VERSION_TAD = HNLA.tad
|
||||||
@ -55,7 +68,7 @@ include $(TWL_IPL_RED_ROOT)/build/buildtools/modulerules
|
|||||||
do-build : $(VERSION_TAD)
|
do-build : $(VERSION_TAD)
|
||||||
|
|
||||||
$(VERSION_DAT): ./Makefile ./commondefs.sysmenuVersion
|
$(VERSION_DAT): ./Makefile ./commondefs.sysmenuVersion
|
||||||
$(GEN_VERSION_FILE) $(VER_TIMESTAMP) $(MAJOR_VERSION) $(MINOR_VERSION) $(USER_AREA_SIZE)
|
$(GEN_VERSION_FILE) $(GEN_VERSION_PARAM)
|
||||||
|
|
||||||
$(VERSION_TAD) : $(SYSMENU_VERSION_FILE)
|
$(VERSION_TAD) : $(SYSMENU_VERSION_FILE)
|
||||||
$(MAKETAD) $(call empath,$<) $(SYSMENU_VERSION_MAKETAD_OPTION) -o $@
|
$(MAKETAD) $(call empath,$<) $(SYSMENU_VERSION_MAKETAD_OPTION) -o $@
|
||||||
|
|||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -6,117 +6,51 @@
|
|||||||
# generate SystemMenu Version Data
|
# generate SystemMenu Version Data
|
||||||
#
|
#
|
||||||
# [[ FILE FORMAT ]]
|
# [[ FILE FORMAT ]]
|
||||||
# security code (128 bytes) : RSA signature of Version Data
|
|
||||||
#
|
#
|
||||||
# Header ( 96 bytes)
|
# Security code (128 bytes) : RSA signature of Header
|
||||||
# TimeStamp ( 4 bytes) : date %y%m%d%H
|
# Header + Data : NitroSystemArchive Format
|
||||||
# Version ( 4 bytes) : 0.0 ~ 65535.65535
|
|
||||||
# UserAreaSize ( 4 bytes) : Size of UserArea
|
|
||||||
# Data1Offset ( 4 bytes) : File offset of Data1
|
|
||||||
# Data1Size ( 4 bytes) : Size of Data1
|
|
||||||
# padding ( 12 bytes) :
|
|
||||||
# Data1Hash ( 20 bytes) : SHA1 digest of Data1
|
|
||||||
# padding ( 44 bytes) :
|
|
||||||
#
|
|
||||||
# Data1 (flexible length) :
|
|
||||||
# padding ( 32 bytes) :
|
|
||||||
#
|
|
||||||
# note: each section image is aligned to 32 bytes.
|
|
||||||
#
|
#
|
||||||
######################################################################
|
######################################################################
|
||||||
|
|
||||||
use POSIX 'strftime';
|
use POSIX 'strftime';
|
||||||
use File::Basename;
|
use File::Basename;
|
||||||
|
|
||||||
if ($#ARGV < 3) {
|
if ($#ARGV < 6) {
|
||||||
printf STDOUT ("Usage: %s [genVersion] timestamp majorVersion minorVersion userAreaSize\n", $0);
|
printf STDOUT ("Usage: %s [genVersion] timestamp strVersion majorVersion minorVersion userAreaSize NUPHostName EULAURL\n", $0);
|
||||||
exit(-1);
|
exit(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
my $outFile = "SysmenuVersion.dat";
|
# アーカイブにまとめるデータファイル
|
||||||
my $data1File = "data1.bin";
|
my $dataDir = "archive_data";
|
||||||
my $headerFile = "header.bin";
|
my $versionFile = "$dataDir/version.bin";
|
||||||
my $digestFile = "digest.bin";
|
my $timeStampFile = "$dataDir/time_stamp.bin";
|
||||||
my $tmpFile = "tmp.bin";
|
my $userAreaSizeFile = "$dataDir/user_area_size.bin";
|
||||||
my $signFile = "sign.bin";
|
my $nupHostFile = "$dataDir/nup_host.bin";
|
||||||
|
my $urlEULAFile = "$dataDir/eula_url.bin";
|
||||||
|
|
||||||
|
# 証明書および鍵はIPL_privateで作成したものをそのまま使うのでここでは作成しない
|
||||||
|
#my $cert4SSLClientFile = "$dataDir/cert4ssl";
|
||||||
|
#my $privKeyCert4SSLClientFile = "$dataDir/priv_key_cert4ssl";
|
||||||
|
#my $rootCACert4SSLFile1 = "$dataDir/root_ca_cert4ssl1";
|
||||||
|
#my $rootCACert4SSLFile2 = "$dataDir/root_ca_cert4ssl2";
|
||||||
|
#my $rootCACert4SSLFile3 = "$dataDir/root_ca_cert4ssl3";
|
||||||
|
#my $rootCACert4SSLFile4 = "$dataDir/root_ca_cert4ssl4";
|
||||||
|
#my $rootCACert4SSLFile5 = "$dataDir/root_ca_cert4ssl5";
|
||||||
|
#my $rootCACert4SSLFile6 = "$dataDir/root_ca_cert4ssl6";
|
||||||
|
|
||||||
|
# 出力ファイル
|
||||||
|
my $outFile = "SysmenuVersion.dat";
|
||||||
|
|
||||||
|
# 中間ファイル
|
||||||
|
my $archiveFile = "archive.narc";
|
||||||
|
my $digestFile = "digest.bin";
|
||||||
|
my $signFile = "sign.bin";
|
||||||
|
|
||||||
# 後始末
|
# 後始末
|
||||||
sub deleteTemp {
|
sub deleteTemp {
|
||||||
system ("rm -f $tmpFile");
|
|
||||||
system ("rm -f $digestFile");
|
system ("rm -f $digestFile");
|
||||||
system ("rm -f $data1File");
|
|
||||||
system ("rm -f $headerFile");
|
|
||||||
system ("rm -f $signFile");
|
system ("rm -f $signFile");
|
||||||
}
|
system ("rm -f $archiveFile");
|
||||||
|
|
||||||
my $signSize = 0x80;
|
|
||||||
my $headerSize = 0x80;
|
|
||||||
my $data1Len = 0x20;
|
|
||||||
|
|
||||||
# Data1情報の出力
|
|
||||||
{
|
|
||||||
open DATA1, ">$data1File" or die "File Open Error.\n";
|
|
||||||
binmode DATA1;
|
|
||||||
|
|
||||||
# ダミーデータの出力
|
|
||||||
syswrite( DATA1, pack( "x$data1Len") );
|
|
||||||
|
|
||||||
close DATA1;
|
|
||||||
}
|
|
||||||
|
|
||||||
# ヘッダ情報の出力
|
|
||||||
{
|
|
||||||
# timestampLen = 0x08;
|
|
||||||
# elementNumLen = 0x02;
|
|
||||||
my $pad1Len = 0x0c;
|
|
||||||
my $pad2Len = 0x2c;
|
|
||||||
my $data1Off = $signSize + $headerSize;
|
|
||||||
my $sha1Len = 0x14;
|
|
||||||
|
|
||||||
open HEADER, ">$headerFile" or die "File Open Error.\n";
|
|
||||||
binmode HEADER;
|
|
||||||
|
|
||||||
# my $timestamp = strftime "%y%m%d%H", localtime;
|
|
||||||
my $timestamp = $ARGV[ 0 ];
|
|
||||||
my $ver = ( ( $ARGV[ 1 ] & 0xffff ) << 16 ) | ($ARGV[ 2 ] & 0xffff);
|
|
||||||
my $userAreaSize = $ARGV[ 3 ];
|
|
||||||
|
|
||||||
# タイムスタンプの出力
|
|
||||||
printf "timestamp = %s\n", $timestamp;
|
|
||||||
syswrite( HEADER, pack( "N", unpack( "L", pack( "H8", $timestamp ) ) ) );
|
|
||||||
|
|
||||||
# バージョンの出力
|
|
||||||
printf "version = %d.%d\n", ($ver >> 16), ($ver & 0xffff);
|
|
||||||
syswrite( HEADER, pack( "L", $ver ) );
|
|
||||||
|
|
||||||
# ユーザ領域サイズの出力
|
|
||||||
printf "userAreaSize = $userAreaSize\n";
|
|
||||||
syswrite( HEADER, pack( "L", $userAreaSize ) );
|
|
||||||
# Data1オフセットの出力
|
|
||||||
printf "data1Offset = $data1Off\n";
|
|
||||||
syswrite( HEADER, pack( "L", $data1Off ) );
|
|
||||||
# Data1サイズの出力
|
|
||||||
printf "data1Size = $data1Len\n";
|
|
||||||
syswrite( HEADER, pack( "L", $data1Len ) );
|
|
||||||
|
|
||||||
# パディング1の出力
|
|
||||||
syswrite( HEADER, pack( "x$pad1Len") );
|
|
||||||
|
|
||||||
# Data1ハッシュの出力
|
|
||||||
{
|
|
||||||
my $digest;
|
|
||||||
system ("openssl dgst -sha1 -binary -out $digestFile $data1File");
|
|
||||||
open DIGEST, $digestFile or die "File Open Error.\n";
|
|
||||||
binmode DIGEST;
|
|
||||||
sysread( DIGEST, $digest, $sha1Len );
|
|
||||||
close DIGEST;
|
|
||||||
syswrite( HEADER, $digest, $sha1Len );
|
|
||||||
}
|
|
||||||
|
|
||||||
# パディング2の出力
|
|
||||||
syswrite( HEADER, pack( "x$pad2Len") );
|
|
||||||
|
|
||||||
close HEADER;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
# 環境変数サーチ
|
# 環境変数サーチ
|
||||||
@ -126,14 +60,97 @@ foreach ( sort keys ( %ENV ) ){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!$KEYROOT) {
|
if (!$KEYROOT) {
|
||||||
deleteTemp();
|
|
||||||
die "No TWL_IPL_RED_PRIVATE_ROOT is found.\n";
|
die "No TWL_IPL_RED_PRIVATE_ROOT is found.\n";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
my $TWLIPLRED_ROOT;
|
||||||
|
|
||||||
|
# 環境変数のキーにTWL_IPL_RED_ROOTがあるか
|
||||||
|
if (exists($ENV{"TWL_IPL_RED_ROOT"}) ){
|
||||||
|
$TWLIPLRED_ROOT = $ENV{"TWL_IPL_RED_ROOT"};
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
die "No TWL_IPL_RED_ROOT is found.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
# バージョンの出力
|
||||||
|
{
|
||||||
|
open VERSION, ">$versionFile" or die "File Open Error.\n";
|
||||||
|
binmode VERSION;
|
||||||
|
# my $ver = ( ( $ARGV[ 1 ] & 0xffff ) << 16 ) | ($ARGV[ 2 ] & 0xffff);
|
||||||
|
# printf "version = %d.%d\n", ($ver >> 16), ($ver & 0xffff);
|
||||||
|
# syswrite( VERSION, pack( "L", $ver ) );
|
||||||
|
printf "version = %s\n", $ARGV[1];
|
||||||
|
syswrite( VERSION, pack( "a*x", $ARGV[1]) );
|
||||||
|
close VERSION;
|
||||||
|
}
|
||||||
|
|
||||||
|
# タイムスタンプの出力
|
||||||
|
{
|
||||||
|
open TIMESTAMP, ">$timeStampFile" or die "File Open Error.\n";
|
||||||
|
binmode TIMESTAMP;
|
||||||
|
# my $timestamp = strftime "%y%m%d%H", localtime;
|
||||||
|
my $timestamp = $ARGV[ 0 ];
|
||||||
|
printf "timestamp = %s\n", $timestamp;
|
||||||
|
syswrite( TIMESTAMP, pack( "N", unpack( "L", pack( "H8", $timestamp ) ) ) );
|
||||||
|
close TIMESTAMP;
|
||||||
|
}
|
||||||
|
|
||||||
|
# ユーザエリアサイズの出力
|
||||||
|
{
|
||||||
|
open USERAREA, ">$userAreaSizeFile" or die "File Open Error.\n";
|
||||||
|
binmode USERAREA;
|
||||||
|
my $userAreaSize = $ARGV[ 4 ];
|
||||||
|
printf "userAreaSize = $userAreaSize\n";
|
||||||
|
syswrite( USERAREA, pack( "L", $userAreaSize ) );
|
||||||
|
close USERAREA;
|
||||||
|
}
|
||||||
|
|
||||||
|
# NUP_HOSTNAMEの出力
|
||||||
|
{
|
||||||
|
open NUPHOSTNAME, ">$nupHostFile" or die "File Open Error.\n";
|
||||||
|
binmode NUPHOSTNAME;
|
||||||
|
my $nupHostName = $ARGV[ 5 ];
|
||||||
|
printf "NUPHostName = $nupHostName\n";
|
||||||
|
syswrite( NUPHOSTNAME, pack( "a*x", $nupHostName ) );
|
||||||
|
close NUPHOSTNAME;
|
||||||
|
}
|
||||||
|
|
||||||
|
# EULA_URLの出力
|
||||||
|
{
|
||||||
|
open EULAURL, ">$urlEULAFile" or die "File Open Error.\n";
|
||||||
|
binmode EULAURL;
|
||||||
|
my $urlEULA = $ARGV[ 6 ];
|
||||||
|
printf "EULAURL = $urlEULA\n";
|
||||||
|
syswrite( EULAURL, pack( "a*x", $urlEULA ) );
|
||||||
|
close EULAURL;
|
||||||
|
}
|
||||||
|
|
||||||
|
my $TWLSYSTEM_ROOT;
|
||||||
|
|
||||||
|
# 環境変数のキーにTWLSYSTEM_ROOTがあるか
|
||||||
|
if (exists($ENV{"TWLSYSTEM_ROOT"}) ){
|
||||||
|
$TWLSYSTEM_ROOT = $ENV{"TWLSYSTEM_ROOT"};
|
||||||
|
}else
|
||||||
|
{
|
||||||
|
deleteTemp();
|
||||||
|
die "No TWLSYSTEM_ROOT is found.\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
# アーカイブ作成
|
||||||
|
{
|
||||||
|
system ( "$TWLSYSTEM_ROOT/tools/bin/nnsarc.exe -c $archiveFile $dataDir -s -E .svn" );
|
||||||
|
}
|
||||||
|
|
||||||
|
# アーカイブのハッシュの出力
|
||||||
|
{
|
||||||
|
my $digest;
|
||||||
|
system ("openssl dgst -sha1 -binary -out $digestFile $archiveFile");
|
||||||
|
}
|
||||||
|
|
||||||
# 署名付加
|
# 署名付加
|
||||||
{
|
{
|
||||||
system ( "openssl rsautl -sign -in $headerFile -inkey $KEYROOT/keys/rsa/private_sharedFont.der -keyform DER -out $signFile" );
|
system ( "openssl rsautl -sign -in $digestFile -inkey $KEYROOT/keys/rsa/private_sharedFont.der -keyform DER -out $signFile" );
|
||||||
system ( "cat $signFile $headerFile >$tmpFile" );
|
system ( "cat $signFile $archiveFile >$outFile" );
|
||||||
system ( "cat $tmpFile $data1File > $outFile" );
|
|
||||||
deleteTemp();
|
deleteTemp();
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user