・HWInfoWriter、NandInitializerでHWID署名に対応する。

・ドキュメント更新・追加。
・不要なダミー鍵を削除。

git-svn-id: file:///Users/lillianskinner/Downloads/platinum/twl/TwlIPL/trunk@739 b08762b0-b915-fc4b-9d8c-17b2551a87ff
This commit is contained in:
yosiokat 2008-02-25 13:07:31 +00:00
parent 6785096227
commit 00efdd6242
18 changed files with 194 additions and 75 deletions

View File

@ -20,6 +20,12 @@ SUBDIRS = \
#----------------------------------------------------------------------------
#============================================================================
#現時点で製品鍵を使った書き込みが行えてはダメなので、デフォルトOFFにしておいてください。
#USE_PRODUCT_KEY = TRUE
#============================================================================
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED
@ -40,14 +46,20 @@ LINCLUDES = $(MISC_DIR)/include \
$(ROOT)/build/libraries/lcfg/ARM9.TWL/include
LLIBRARIES = libacsign_enc$(TWL_LIBSUFFIX).a
ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),)
ifdef USE_PRODUCT_KEY
MACRO_FLAGS += -DUSE_PRODUCT_KEY
MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der'
else
MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der'
endif
endif
MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
-DHWINFO_PRIVKEY='private_HWInfo.der'
-DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
MAKETAD_FLAGS += -s
MAKEROM_FLAGS += -DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),)
MACRO_FLAGS += -DUSE_PRODUCT_KEY
endif
include $(TWL_IPL_RED_ROOT)/build/buildtools/commondefs

View File

@ -179,5 +179,4 @@ RomSpec
HostRoot $(PRIVKEY_PATH)
Root /key
File $(HWINFO_PRIVKEY)
}

View File

@ -26,7 +26,7 @@
// define data------------------------------------------
#define WRITER_ELEMENT_NUM 7
#define MSG_X 3
#define MSG_Y 19
#define MSG_Y 18
// extern data------------------------------------------
@ -59,13 +59,13 @@ static const u16 *const s_pStrWriter[ WRITER_ELEMENT_NUM ] = {
};
static MenuPos s_writerPos[] = {
{ TRUE, 3 * 8, 4 * 8 },
{ TRUE, 3 * 8, 6 * 8 },
{ TRUE, 3 * 8, 8 * 8 },
{ TRUE, 3 * 8, 10 * 8 },
{ TRUE, 3 * 8, 12 * 8 },
{ TRUE, 3 * 8, 14 * 8 },
{ TRUE, 3 * 8, 16 * 8 },
{ TRUE, 3 * 8, 3 * 8 },
{ TRUE, 3 * 8, 5 * 8 },
{ TRUE, 3 * 8, 7 * 8 },
{ TRUE, 3 * 8, 9 * 8 },
{ TRUE, 3 * 8, 11 * 8 },
{ TRUE, 3 * 8, 13 * 8 },
{ TRUE, 3 * 8, 15 * 8 },
};
@ -106,9 +106,20 @@ void HWInfoWriterInit( void )
PutStringUTF16( 1 * 8, 0 * 8, TXT_COLOR_BLUE, (const u16 *)L"HW Info Writer");
GetAndDrawRTCData( &g_rtcDraw, TRUE );
if (HWI_Init( Alloc, Free ) == HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE)
{
PutStringUTF16( 14 * 8, 0 * 8, TXT_COLOR_RED, (const u16 *)L"[No Signature MODE]" );
char *pMode = NULL;
switch ( HWI_Init( Alloc, Free ) ) {
case HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE:
pMode = "No";
break;
case HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE:
pMode = "Pro";
break;
case HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE:
pMode = "Dev";
break;
}
PrintfSJIS( 14 * 8, 0 * 8, TXT_COLOR_RED, "[%s Signature MODE]", pMode );
}
OS_TPrintf( "region = %d\n", LCFG_THW_GetRegion() );
@ -169,25 +180,41 @@ static void WriteHWInfoFile( u8 region )
{
static const u16 *pMsgNormalWriting = (const u16 *)L"Writing Normal File...";
static const u16 *pMsgSecureWriting = (const u16 *)L"Writing Secure File...";
static const u16 *pMsgHWIDSignWriting = (const u16 *)L"Writing HWID Sign File...";
static const u16 *pMsgSucceeded = (const u16 *)L"Succeeded!";
static const u16 *pMsgFailed = (const u16 *)L"Failed!";
// -------------------------------------
// ノーマルファイルのライト
// -------------------------------------
(void)PutStringUTF16( MSG_X * 8, MSG_Y * 8, TXT_COLOR_BLACK, pMsgNormalWriting );
if( HWI_WriteHWNormalInfoFile() ) {
(void)PutStringUTF16( ( MSG_X + 18 ) * 8, MSG_Y * 8, TXT_COLOR_BLUE, pMsgSucceeded );
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, MSG_Y * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
(void)PutStringUTF16( ( MSG_X + 18 ) * 8, MSG_Y * 8, TXT_COLOR_RED, pMsgFailed );
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, MSG_Y * 8, TXT_COLOR_RED, pMsgFailed );
}
// -------------------------------------
// セキュアファイルのライト
// -------------------------------------
(void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLACK, pMsgSecureWriting );
if( HWI_WriteHWSecureInfoFile( region ) ) {
(void)PutStringUTF16( ( MSG_X + 18 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
if( HWI_WriteHWSecureInfoFile( region, NULL ) ) {
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
(void)PutStringUTF16( ( MSG_X + 18 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );
}
// -------------------------------------
// HWID署名ファイルのライト
// -------------------------------------
(void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 4 ) * 8, TXT_COLOR_BLACK, pMsgHWIDSignWriting );
if( HWI_WriteHWIDSignFile() ) {
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 4 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 4 ) * 8, TXT_COLOR_RED, pMsgFailed );
}
HWI_ModifyLanguage( region );
@ -207,24 +234,40 @@ static void DeleteHWInfoFile( void )
{
static const u16 *pMsgNormalDeleting = (const u16 *)L"Deleting Normal File...";
static const u16 *pMsgSecureDeleting = (const u16 *)L"Deteting Secure File...";
static const u16 *pMsgHWIDSignDeleting = (const u16 *)L"Deteting HWID Sign File.";
static const u16 *pMsgSucceeded = (const u16 *)L"Succeeded!";
static const u16 *pMsgFailed = (const u16 *)L"Failed!";
// ノーマルファイル
// -------------------------------------
// ノーマルファイルの削除
// -------------------------------------
(void)PutStringUTF16( MSG_X * 8, MSG_Y * 8, TXT_COLOR_BLACK, pMsgNormalDeleting );
if( HWI_DeleteHWNormalInfoFile() ) {
(void)PutStringUTF16( ( MSG_X + 19 ) * 8, MSG_Y * 8, TXT_COLOR_BLUE, pMsgSucceeded );
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, MSG_Y * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
(void)PutStringUTF16( ( MSG_X + 19 ) * 8, MSG_Y * 8, TXT_COLOR_RED, pMsgFailed );
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, MSG_Y * 8, TXT_COLOR_RED, pMsgFailed );
}
// セキュアファイル
// -------------------------------------
// セキュアファイルの削除
// -------------------------------------
(void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLACK, pMsgSecureDeleting );
if( HWI_DeleteHWSecureInfoFile() ) {
(void)PutStringUTF16( ( MSG_X + 19 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
(void)PutStringUTF16( ( MSG_X + 19 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 2 ) * 8, TXT_COLOR_RED, pMsgFailed );
}
// -------------------------------------
// HWID署名ファイルの削除
// -------------------------------------
(void)PutStringUTF16( MSG_X * 8, ( MSG_Y + 4 ) * 8, TXT_COLOR_BLACK, pMsgHWIDSignDeleting );
if( HWI_DeleteHWIDSignFile() ) {
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 4 ) * 8, TXT_COLOR_BLUE, pMsgSucceeded );
}else {
(void)PutStringUTF16( ( MSG_X + 20 ) * 8, ( MSG_Y + 4 ) * 8, TXT_COLOR_RED, pMsgFailed );
}
DispMessage( 0, 0, TXT_COLOR_NULL, NULL );
NNS_G2dCharCanvasClearArea( &gCanvas, TXT_COLOR_WHITE,
MSG_X * 8 , MSG_Y * 8, ( 32 - MSG_X ) * 8, ( MSG_Y + 4 ) * 8 );

View File

@ -22,6 +22,11 @@
#include "hwi.h"
// define data------------------------------------------
#ifdef USE_PRODUCT_KEY // 鍵選択スイッチ
#define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo.der" // 製品用秘密鍵
#else
#define HWINFO_PRIVKEY_PATH "rom:key/private_HWInfo_dev.der" // 開発用秘密鍵
#endif
// extern data------------------------------------------
const LCFGTWLHWNormalInfo *LCFG_THW_GetDefaultNormalInfo( void );
@ -40,7 +45,6 @@ static BOOL VerifyData( const u8 *pTgt, const u8 *pOrg, u32 len );
// static variable -------------------------------------
static u8 *s_pPrivKeyBuffer = NULL;
static LCFGReadResult (*s_pReadSecureInfoFunc)( void );
static BOOL s_isReadTSD;
static void *(*spAlloc)( u32 length );
static void (*spFree)( void *ptr );
@ -101,7 +105,17 @@ HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) )
result = ReadPrivateKey();
ReadHWInfoFile();
// VerifyHWInfo();
if( 1 ) {
u8 sign[ RSA_KEY_LENGTH ];
if( !LCFG_ReadHWID_Signature( sign ) ||
!LCFG_CheckHWID_Signature( sign )
) {
OS_TPrintf( "HWID Signature check failed.\n" );
}else {
OS_TPrintf( "HWID Signature check succeeded.\n" );
}
}
return result;
}
@ -117,7 +131,6 @@ static void ReadTWLSettings( void )
}
}
// 秘密鍵のリード
HwiInitResult ReadPrivateKey( void )
{
@ -127,7 +140,7 @@ HwiInitResult ReadPrivateKey( void )
OSTick start = OS_GetTick();
FS_InitFile( &file );
if( !FS_OpenFileEx( &file, "rom:key/private_HWInfo.der", FS_FILEMODE_R ) )
if( !FS_OpenFileEx( &file, HWINFO_PRIVKEY_PATH, FS_FILEMODE_R ) )
{
OS_TPrintf( "PrivateKey read failed.\n" );
}
@ -152,17 +165,15 @@ HwiInitResult ReadPrivateKey( void )
}
OS_TPrintf( "PrivKey read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
if (result) {
#ifdef USE_PRODUCT_KEY
// 製品用秘密鍵が有効なら、署名ありのアクセス
s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo;
if (result) { return HWI_INIT_SUCCESS_SIGNATURE_MODE; }
else { return HWI_INIT_FAILURE; }
return HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE;
#else
// そうでないなら、署名なしのアクセス
s_pReadSecureInfoFunc = LCFGi_THW_ReadSecureInfo_NoCheck;
if (result) { return HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE; }
else { return HWI_INIT_FAILURE; }
return HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE;
#endif
}else {
return HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE;
}
}
// HW情報全体のリード
@ -181,7 +192,7 @@ static void ReadHWInfoFile( void )
OS_TPrintf( "HW Normal Info read time = %dms\n", OS_TicksToMilliSeconds( OS_GetTick() - start ) );
start = OS_GetTick();
retval = s_pReadSecureInfoFunc();
retval = LCFGi_THW_ReadSecureInfo();
if( retval == LCFG_TSF_READ_RESULT_SUCCEEDED ) {
OS_TPrintf( "HW Secure Info read succeeded.\n" );
}else {
@ -292,13 +303,13 @@ BOOL HWI_WriteHWNormalInfoFile( void )
Returns: None.
*---------------------------------------------------------------------------*/
BOOL HWI_WriteHWSecureInfoFile( u8 region )
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo )
{
BOOL isWrite = TRUE;
LCFGReadResult result;
// ファイルのリード
result = s_pReadSecureInfoFunc();
result = LCFGi_THW_ReadSecureInfo();
// リードに失敗したらリカバリ
if( result != LCFG_TSF_READ_RESULT_SUCCEEDED ) {
@ -314,9 +325,9 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region )
// 対応言語ビットマップのセット
LCFG_THW_SetValidLanguageBitmap( s_langBitmapList[ region ] );
// [TODO:]量産工程でないとシリアルNo.は用意できないので、ここではMACアドレスをもとに適当な値をセットする。
// シリアルNo.のセット
{
if( pSerialNo == NULL ) {
// 量産工程でないとシリアルNo.は用意できないので、ここではMACアドレスをもとに適当な値をセットする。
u8 buffer[ 12 ] = "SERIAL"; // 適当な文字列をMACアドレスと結合してSHA1を取り、仮SerialNoとする。
u8 serialNo[ SVC_SHA1_DIGEST_SIZE ];
int i;
@ -331,6 +342,8 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region )
MI_CpuClear8( &serialNo[ len ], sizeof(serialNo) - len );
OS_TPrintf( "serialNo : %s\n", serialNo );
LCFG_THW_SetSerialNo( serialNo );
}else {
LCFG_THW_SetSerialNo( pSerialNo );
}
// ランチャーTitleID_Loのセット
@ -351,6 +364,31 @@ BOOL HWI_WriteHWSecureInfoFile( u8 region )
return isWrite;
}
/*---------------------------------------------------------------------------*
Name: HWI_WriteHWIDSignFile
Description: HWID署名ファイルのライト
Arguments:
Returns: None.
*---------------------------------------------------------------------------*/
BOOL HWI_WriteHWIDSignFile( void )
{
BOOL retval;
(void)FS_DeleteFile( (char *)LCFG_TWL_HWID_SIGN_PATH );
if( !FS_CreateFile( LCFG_TWL_HWID_SIGN_PATH, FS_PERMIT_R | FS_PERMIT_W ) ) {
OS_TPrintf( "file create error. %s\n", LCFG_TWL_HWID_SIGN_PATH );
}
retval = LCFG_WriteHWID_Signature( s_pPrivKeyBuffer );
if( !retval ) {
OS_TPrintf( "HWID Signature Write failed.\n" );
}
return retval;
}
/*---------------------------------------------------------------------------*
Name: HWI_DeleteHWNormalInfoFile
@ -397,3 +435,25 @@ BOOL HWI_DeleteHWSecureInfoFile( void )
}
}
/*---------------------------------------------------------------------------*
Name: HWI_DeleteHWIDSignFile
Description: HWID署名ファイルの消去
Arguments: None
Returns: BOOL
*---------------------------------------------------------------------------*/
BOOL HWI_DeleteHWIDSignFile( void )
{
if (FS_DeleteFile( (char *)LCFG_TWL_HWID_SIGN_PATH ))
{
OS_TPrintf( "%s delete succeeded.\n", (char *)LCFG_TWL_HWID_SIGN_PATH );
return TRUE;
}
else
{
OS_TPrintf( "%s delete failed.\n", (char *)LCFG_TWL_HWID_SIGN_PATH );
return FALSE;
}
}

View File

@ -30,7 +30,8 @@ extern "C" {
typedef enum
{
HWI_INIT_FAILURE,
HWI_INIT_SUCCESS_SIGNATURE_MODE,
HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE,
HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE,
HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE
}
HwiInitResult;
@ -38,9 +39,11 @@ HwiInitResult;
HwiInitResult HWI_Init( void *(*pAlloc)( u32 ), void (*pFree)( void * ) );
void HWI_ModifyLanguage( u8 region );
BOOL HWI_WriteHWNormalInfoFile( void );
BOOL HWI_WriteHWSecureInfoFile( u8 region );
BOOL HWI_WriteHWSecureInfoFile( u8 region, const u8 *pSerialNo );
BOOL HWI_WriteHWIDSignFile( void );
BOOL HWI_DeleteHWNormalInfoFile( void );
BOOL HWI_DeleteHWSecureInfoFile( void );
BOOL HWI_DeleteHWIDSignFile( void );
#ifdef __cplusplus
}

View File

@ -21,6 +21,11 @@ SUBDIRS =
#----------------------------------------------------------------------------
#============================================================================
#現時点で製品鍵を使った書き込みが行えてはダメなので、デフォルトOFFにしておいてください。
#USE_PRODUCT_KEY = TRUE
#============================================================================
TARGET_FIRM = SYSTEMMENU
TARGET_PLATFORM = TWL
TWL_ARCHGEN = LIMITED
@ -65,14 +70,18 @@ SRCDIR = src \
#LCFILE = # using default
MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
-DHWINFO_PRIVKEY='private_HWInfo.der'
MAKETAD_FLAGS += -s
MAKEROM_FLAGS += -DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
ifneq ($(TWL_IPL_RED_PRIVATE_ROOT),)
ifdef USE_PRODUCT_KEY
MACRO_FLAGS += -DUSE_PRODUCT_KEY
MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo.der'
else
MAKEROM_FLAGS += -DHWINFO_PRIVKEY='private_HWInfo_dev.der'
endif
endif
MAKEROM_FLAGS += -DTITLEID_LO='$(TITLEID_LO)' \
-DPRIVKEY_PATH='$(TWL_KEYSDIR)/rsa'
MAKETAD_FLAGS += -s
LLIBRARIES += libes$(TWL_LIBSUFFIX).a \
libboc$(TWL_LIBSUFFIX).a \

View File

@ -182,8 +182,11 @@ void* HWInfoProcess0(void)
case HWI_INIT_FAILURE:
kamiFontPrintfConsoleEx(CONSOLE_RED, "HWI_INIT() Failure!\n" );
break;
case HWI_INIT_SUCCESS_SIGNATURE_MODE:
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, "[Signature MODE]\n" );
case HWI_INIT_SUCCESS_PRO_SIGNATURE_MODE:
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, "[PRO Signature MODE]\n" );
break;
case HWI_INIT_SUCCESS_DEV_SIGNATURE_MODE:
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, "[DEV Signature MODE]\n" );
break;
case HWI_INIT_SUCCESS_NO_SIGNATRUE_MODE:
kamiFontPrintfConsoleEx(CONSOLE_RED, "[No Signature MODE]\n" );
@ -316,6 +319,7 @@ static BOOL WriteHWInfoFile( u8 region )
{
static const char *pMsgNormalWriting = "Writing Normal File...";
static const char *pMsgSecureWriting = "Writing Secure File...";
static const char *pMsgSignWriting = "Writing Sign File...";
static const char *pMsgSucceeded = "Succeeded!";
static const char *pMsgFailed = "Failed!";
BOOL result = TRUE;
@ -333,7 +337,17 @@ static BOOL WriteHWInfoFile( u8 region )
// セキュアファイルのライト
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSecureWriting );
if( HWI_WriteHWSecureInfoFile( region ) ) {
if( HWI_WriteHWSecureInfoFile( region, NULL ) ) {
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
}else {
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );
result = FALSE;
}
// HWID<49><44>¼ƒtƒ@ƒCƒÌƒ‰ƒCƒg
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSignWriting );
if( HWI_WriteHWIDSignFile() ) {
kamiFontPrintfConsoleEx(CONSOLE_ORANGE, pMsgSucceeded );
}else {
kamiFontPrintfConsoleEx(CONSOLE_RED, pMsgFailed );

Binary file not shown.

BIN
docs/format_TitleID.xls Normal file

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -1,15 +0,0 @@
-----BEGIN RSA PRIVATE KEY-----
MIICXQIBAAKBgQDlcyzdiJ14or13KZTuxvMyZCCVuVLZndVNtd1zhhqX0BQQgEb0
LM75BQbkwlhwQgdecdSc6xZwaxSWCoRpKB2CzT6UgpPIC0XTiZwFsriu/o1T3E8d
g4r+8QDNqcD6PxcxhBamOKtcO4GgZzUkU2bttyVzg9YI9KZLPJlKyhsitQIDAQAB
AoGBAIIVGRODl1tEUEwVi/UPX+NqtrqLtbfgboS/HYyYM81rz2RHhXJ7UOAHBJB+
yirilFDsEhDgivkzDBnAXq9LaeaiXHZQwuUTszXyRSOdnaYzWoJAdPd3GH96a/xs
0VLWUTrzs1CH/5k8sxT4erk5l07ouBx5r/CPyJO/X5pIy8XhAkEA96DaxiFfdvEj
xXo1wkBmZbOsg+/wFMZhn+Bhm5Mxhblcrba60DmMyWhdJy6jb/gysAWY8OHLR21t
wMxAFccbvQJBAO00/fW8fA92BCb4Jh1s9uiXQAPpd+LdnxhXrm9+5y//wLLAUtii
awVmIycAuYlJSVzGSeQjAIP6MIefMp9lVlkCQHtDsAN2c13y1Vqk5gPHKPGxScv3
cSv2QHxkJlJaKAmn5rF2R3IFY8aSU+SAO80t4JVsg+BMlXL9zudtBO2SSoUCQANe
pFjwU4bYs1hmYAw89wj41RT5JRXY9iCfZj/5OomJBZDEgKjJLeIGwGsWbIxRuTQT
MQuHn8NAM55JmauAAgkCQQC4bqOlgAPVGaoAK98Kf40EKufyY2XaMSiGmqpG3bnw
o13x8SWrOh6Stu5jgFnyGcItJone3lLWo2xN1b6SzN84
-----END RSA PRIVATE KEY-----

Binary file not shown.

View File

@ -1,6 +0,0 @@
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDlcyzdiJ14or13KZTuxvMyZCCV
uVLZndVNtd1zhhqX0BQQgEb0LM75BQbkwlhwQgdecdSc6xZwaxSWCoRpKB2CzT6U
gpPIC0XTiZwFsriu/o1T3E8dg4r+8QDNqcD6PxcxhBamOKtcO4GgZzUkU2bttyVz
g9YI9KZLPJlKyhsitQIDAQAB
-----END PUBLIC KEY-----