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@433 b08762b0-b915-fc4b-9d8c-17b2551a87ff
106 lines
2.0 KiB
Perl
Executable File
106 lines
2.0 KiB
Perl
Executable File
#!/bin/perl
|
|
|
|
use strict;
|
|
|
|
|
|
if( @ARGV != 8 ) {
|
|
die "usage: makeHWInfo.pl -r <RegionName> -s <SerialNo> -k <RSA PrivKey> -o <outName>\n";
|
|
}
|
|
|
|
#引数チェック
|
|
my $cmd = &analyze_argv;
|
|
|
|
if( !exists($cmd->{"-r"}) or
|
|
!exists($cmd->{"-s"}) or
|
|
!exists($cmd->{"-k"}) or
|
|
!exists($cmd->{"-o"}) ) {
|
|
die "parameter error.\n";
|
|
}
|
|
|
|
|
|
#リージョン
|
|
my @regionNameList = qw/ JAPAN AMERICA EUROPE AUSTRALIA CHINA KOREA /;
|
|
my $i = 0;
|
|
my $region = 0xff;
|
|
foreach ( @regionNameList ) {
|
|
if( $cmd->{"-r"} eq $_ ) {
|
|
$region = $i;
|
|
last;
|
|
}
|
|
$i++;
|
|
}
|
|
if( $region == 0xff ) {
|
|
die "region error.\n", $cmd->{"-r"};
|
|
}
|
|
|
|
|
|
#シリアルNo.
|
|
my $serialNo = $cmd->{"-s"};
|
|
if( !( 11 == length($serialNo) or ( 12 == length($serialNo) ) ) ) {
|
|
die "serialNo length error. needs length \"11\" or \"12\"\n";
|
|
}
|
|
|
|
|
|
#Bodyファイル
|
|
open(OUT, ">body.bin");
|
|
binmode(OUT);
|
|
print OUT pack( "C", $region );
|
|
print OUT pack( "A16", $serialNo );
|
|
close(OUT);
|
|
|
|
|
|
#Headerファイル
|
|
my $version = 1;
|
|
my $length = 17;
|
|
open(OUT, ">header.bin");
|
|
binmode(OUT);
|
|
print OUT pack( "C", $version );
|
|
print OUT pack( "CCC", 0, 0, 0 );
|
|
print OUT pack( "L", $length );
|
|
close(OUT);
|
|
|
|
#コンソール出力
|
|
print "[Header]\n";
|
|
printf " version : %d\n", $version;
|
|
printf " length : %d\n", $length;
|
|
print "[Body]\n";
|
|
printf " region : %d (%s)\n", $region, $regionNameList[$region];
|
|
printf " serialNo : %s (%d)\n", $serialNo, length($serialNo);
|
|
|
|
#RSA署名
|
|
my $key = $cmd->{"-k"};
|
|
my $outName = $cmd->{"-o"};
|
|
system "openssl dgst -sha1 -binary -out tgt.dgst body.bin";
|
|
system "openssl rsautl -sign -in tgt.dgst -inkey $key -out tgt.sgn";
|
|
system "cat tgt.sgn header.bin body.bin >$outName";
|
|
system "rm header.bin body.bin tgt.dgst tgt.sgn";
|
|
|
|
exit;
|
|
|
|
|
|
sub analyze_argv
|
|
{
|
|
my $opt;
|
|
my %cmd = ();
|
|
|
|
foreach my $token ( @ARGV )
|
|
{
|
|
if( substr($token, 0, 1) eq "-" )
|
|
{
|
|
$opt = $token;
|
|
}
|
|
elsif( $opt )
|
|
{
|
|
$cmd{$opt} = $token;
|
|
$opt = "";
|
|
}
|
|
else
|
|
{
|
|
push @{$cmd{""}}, $token;
|
|
}
|
|
}
|
|
|
|
return \%cmd;
|
|
}
|
|
|