/* ==================================================================== * Copyright (c) 1998-2008 The OpenSSL Project. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. All advertising materials mentioning features or use of this * software must display the following acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to * endorse or promote products derived from this software without * prior written permission. For written permission, please contact * openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" * nor may "OpenSSL" appear in their names without prior written * permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following * acknowledgment: * "This product includes software developed by the OpenSSL Project * for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com). This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */ /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) * All rights reserved. * * This package is an SSL implementation written * by Eric Young (eay@cryptsoft.com). * The implementation was written so as to conform with Netscapes SSL. * * This library is free for commercial and non-commercial use as long as * the following conditions are aheared to. The following conditions * apply to all code found in this distribution, be it the RC4, RSA, * lhash, DES, etc., code; not just the SSL code. The SSL documentation * included with this distribution is covered by the same copyright terms * except that the holder is Tim Hudson (tjh@cryptsoft.com). * * Copyright remains Eric Young's, and as such any Copyright notices in * the code are not to be removed. * If this package is used in a product, Eric Young should be given attribution * as the author of the parts of the library used. * This can be in the form of a textual message at program startup or * in documentation (online or textual) provided with the package. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * 1. Redistributions of source code must retain the copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the distribution. * 3. All advertising materials mentioning features or use of this software * must display the following acknowledgement: * "This product includes cryptographic software written by * Eric Young (eay@cryptsoft.com)" * The word 'cryptographic' can be left out if the rouines from the library * being used are not cryptographic related :-). * 4. If you include any Windows specific code (or a derivative thereof) from * the apps directory (application code) you must include an acknowledgement: * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" * * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF * SUCH DAMAGE. * * The licence and distribution terms for any publically available version or * derivative of this code cannot be changed. i.e. this code cannot simply be * copied and put under another distribution licence * [including the GNU Public Licence.] */ #ifndef _CR_GENERATE_ID_H_ #define _CR_GENERATE_ID_H_ #define CR_GENID_SUCCESS 0 #define CR_GENID_ERROR_NON 0 #define CR_GENID_ERROR_RSA_ENC ( -1) #define CR_GENID_ERROR_RSA_DEC ( -2) #define CR_GENID_ERROR_RSA_VERIFY ( -3) #define CR_GENID_ERROR_ECDSA_SIGN ( -4) #define CR_GENID_ERROR_ECDSA_VERIFY ( -5) #define CR_GENID_ERROR_SET_MEM_FUNCTIONS ( -6) #define CR_GENID_ERROR_RSA_LOAD_PARAM ( -7) #define CR_GENID_ERROR_EC_GENERATE_PRIVATE_KEY ( -8) #define CR_GENID_ERROR_EC_GENERATE_PUBLIC_KEY ( -9) #define CR_GENID_ERROR_RSA_READ_PRIVATE_KEY (-10) #define CR_GENID_ERROR_RSA_READ_PUBLIC_KEY (-11) #define CR_GENID_ERROR_BN_NEW_0 (-12) #define CR_GENID_ERROR_BN_NEW_1 (-13) #define CR_GENID_ERROR_BN_NEW_2 (-14) #define CR_GENID_ERROR_BN_CTX_NEW (-15) #define CR_GENID_ERROR_EC_POINT_NEW (-16) #define CR_GENID_ERROR_EC_KEY_NEW_0 (-17) #define CR_GENID_ERROR_EC_KEY_NEW_1 (-18) #define CR_GENID_ERROR_ID_BUF_SIZE (-19) #define CR_GENID_ERROR_ERR_BUF_SIZE (-20) #define CR_GENID_ERROR_PRIVKEY_SCRAMBLE (-21) // HSM処理に伴う追加コード // NFastAppライブラリ? : 20 #define CR_GENID_ERROR_ACCESS_DENIED // Status_AccessDenied = 5, : 処理と鍵のACLの不一致に伴うエラー #define CR_GENID_ERROR_BAD_KEYHASH // Status_BadCertKeyHash = 9, : 証明書のハッシュが正しくない #define CR_GENID_ERROR_BAD_SIGN // Status_BadCertSignature = 10, : 証明書の署名が正しくない #define CR_GENID_ERROR_SIGN_VERIFY // Status_VerifyFailed = 11, : 署名の検証に失敗した場合 -> OpenSSLで行うから不要? #define CR_GENID_ERROR_NO_MEMORY // Status_NoMemory = 15, : (HSMの)メモリを使い果たした -> SEE使うわけではないので不要かも #define CR_GENID_ERROR_KEY_TYPE // Status_BlobTypeUnknown = 19, : kmdataを認識出来ない -> HDDの不具合で発生しうる? #define CR_GENID_ERROR_BUFFER_FULL // Status_BufferFull = 20, : 固定長バッファを使い果たした -> 引数のバッファの話か? #define CR_GENID_ERROR_HSM_RESET // Status_UnitReset = 21, : コマンド処理中にHSMリセット発生 -> 異常系 #define CR_GENID_ERROR_STATUS_INVALID // Status_InvalidState = 25, : モジュール、あるいはAPIのレベル(e.g. Fips)がリクエストされたコマンドを実行できる状態にない #define CR_GENID_ERROR_KEY_NOT_FOUND // Status_UnknownKM = 28, : HSMキーが見付からない #define CR_GENID_ERROR_HSM_DEC // Status_DecryptFailed = 31, : 復号化に失敗した #define CR_GENID_ERROR_KEY_HASH // Status_UnknownKeyHash = 37, : 鍵のハッシュとモジュール内のハッシュが一致しない -> 改竄 or HDD関連異常 #define CR_GENID_ERROR_HSM_ENC // Status_EncryptFailed = 44, : 暗号化に失敗した #define CR_GENID_ERROR_HSM_FAILED // Status_HardwareFailed = 55, : HSMハードエラー #define CR_GENID_ERROR_SERVER_STOPPED // Status_ServerNotRunning = 56, : サーバが動作していない #define CR_GENID_ERROR_OS_ERROR // Status_OSErrorErrno = 57, : OSがHSMとプログラムの通信を遂行できない #define CR_GENID_ERROR_CONNECTION_LOST // Status_ServerConnectionLost = 60, : HSMと通信するためのサーバとの接続が切れた。エラーが多発すると発生するとのこと #define CR_GENID_ERROR_HSM_CANCELLED // Status_Cancelled = 64, : HSMの障害・リセットが起きそうなため、コマンド発行がキャンセルされた -> HSMの故障? #define CR_GENID_ERROR_BIGNUMOP_STACK_OVERFLOW // Status_OpStackOverflow = 67, : Bignum操作コマンドよりスタックのエントリ数を超えるPushを行おうとした #define CR_GENID_ERROR_BIGNUMOP_STACK_UNDERFLOW // Status_OpStackUnderflow = 68, : Bignum操作コマンドより空スタックからPopを行おうとした #define CR_GENID_ERROR_BIGNUMOP_NEGATIVE // Status_NegativeResult = 69,: Bignum操作コマンドの結果に負の値があった(かつ、AllowNegtiveフラグがセットされていなかった) // netHSM 関連か? : 4 #define CR_GENID_ERROR_SOFTWARE_FAILED // Status_SoftwareFailed = 80, : ホストソフトウェアで起きたエラー -> netHSM関連? #define CR_GENID_ERROR_NO_HOST_MEMORY // Status_NoHostMemory = 81, : ホストメモリを使い果たした -> netHSM関連? #define CR_GENID_ERROR_NO_MODULE_MEMORY // Status_NoModuleMemory = 82, : HSMメモリを使い果たした -> netHSM関連? #define CR_GENID_ERROR_OPERATION_FAILED // Status_OperationFailed = 84, : nCipherサーバで不正な操作が発行された -> netHSM関連? #define CR_GENID_ERROR_NC_ERR // Status_nCErrno = 93, : OSエラー -> netHSMのOSのエラーか? // NFKMライブラリ? : 7 #define CR_GENID_ERROR_NO_PERMID // Status_UnknownPermID = 104, : 割り当てられていないPermID -> PermIDとは? #define CR_GENID_ERROR_OP_TIMEOUT // Status_OperationTimeout : モジュールに設定されているtimelimit以内にコマンドが完了しなかった -> key の time limit とはまた別? #define CR_GENID_ERROR_UNKNOWN_KEY // Status_UnknownKey = 130, : 鍵がモジュール内で見付からなかった #define CR_GENID_ERROR_KEY_LOAD // Status_KeyNotLoaded = 132, : リクエストされた鍵が見付からなかった(NFKMライブラリ) #define CR_GENID_ERROR_HSM_NOUSABLE // Status_NoUsableModules = 135, : 利用可能なモジュールが存在しない(NFKMライブラリ) #define CR_GENID_ERROR_WORLD_UNUSABLE // Status_WorldUnusable = 137, : 現在のセキュリティワールドが使用不可である。(NFKMライブラリ) #define CR_GENID_ERROR_USELIMIT_UNAVAILABLE // Status_UseLimitsUnavailable = 141, : 鍵が適切なUSE LIMITを持っていない #define CR_GENID_ERROR_MODULE_UNUSABLE // Status_ModuleNotUsable = 144, : モジュールが利用不可である。(NFKMライブラリ) // その他? : 2 #define CR_GENID_ERROR_REPLY_MISMATCH // Status_CommandReplyMismatch = 238, : reply が command と一致しない。 #define CR_GENID_ERROR_TIME_OUTOFRANGE // Status_TimeOutOfRange = 283, : Time が time_tの値の範囲を超えた -> 何の Time? // 現在大好評発生中であるが、将来的には出ない(ようにする)と思われるもの #if 0 #define CR_GENID_ERROR_USE_LIMIT // Status_UseLimitExceeded = 7, : ACLに定められた使用回数を超えた場合 #define CR_GENID_ERROR_TIME_LIMIT // Status_TimeLimitExceeded = 8, : 処理を行うまでのタイムリミット(これもACL) #define CR_GENID_ERROR_BAD_TOKEN // Status_BadTokenData = 14, : カード、NVRAM、またはRTCの値が不正 -> RTC は一度値をセットすれば電池切れまで大丈夫、なはず #define CR_GENID_ERROR_NOT_SUPPORT // Status_UnknownParameter = 17, Status_UnknownFlag = 18, Status_UnknownMechanism = 39, : コマンドまたはフラグ、メカニズム(暗号アルゴリズムなど)をサポートしていない、ECC系で出る? #define CR_GENID_ERROR_PARAM_INVALID // Status_InvalidParameter = 24, : 矛盾したパラメータ設定 #define CR_GENID_ERROR_TOKEN_ASSEMBLE // Status_TokenAssemblyFailed = 27, : トークンの再構築に失敗した -> セットアップの時のみ? #define CR_GENID_ERROR_PRAM_OUTOFRANGE // Status_OutOfRange = 34, : パラメータが範囲外 #define CR_GENID_ERROR_PRIVILEGED_COMMAND // Status_PrivilegedCommand = 35, : 非特権接続において特権コマンドを発行 -> 本プログラムでは発生するようなコマンドはない(はず) #define CR_GENID_ERROR_ACL_INVALID // Status_InvalidACL = 45, : ACLに矛盾が起きている -> セットアップ時のみ #define CR_GENID_ERROR_TRANSACT_NOT_FOUND // Status_TransactionNotFound = 58, : NFastApp_Query or NFastApp_Wait で待つべきトランザクションが無かった -> 今は使っていないので不要と思われる #define CR_GENID_ERROR_CONNECTION_FAILED // Status_ServerFailed = 61, : HSMと通信するためのサーバで internal software エラーが発生。クライアント側の不正行為が原因 #define CR_GENID_ERROR_FIPS_MODE // Status_StrictFIPS140 = 62, : strict FIPSモードで許可されていない操作を行った -> nShield500では strict FIPSモードが無いはずなので、不要? #define CR_GENID_ERROR_UNKNOWN_CODE // Status_UnknownStatus = 63, : サーバとHSM間のバージョン違いでステータスコードに齟齬が発生 -> たぶん発生しない #define CR_GENID_ERROR_CHANNEL_TYPE // Status_UnsupportedChannelType = 65, : オープンしようとしたチャンネルのタイプをサポートしてない -> 今はチャンネルを使っていないが、今後使う可能性あり? #define CR_GENID_ERROR_BIGNUMOP_ARITHMETIC // Status_ArithmeticError = 66, : Bignum操作コマンドで 0 で割るような不正な計算を行おうとした #define CR_GENID_ERROR_BIGNUMOP_NOUPCALL // Status_NoUpcall = 72, : Bignum操作が必要なコマンドが呼ばれたとき、Bignum操作関数が登録されていなかった -> NFastApp_SetBignumUpcalls() が必要 #define CR_GENID_ERROR_MANY_LINKS // Status_TooManyLinks = 140, : Blobを読み込もうとしたとき、モジュールの許可する以上(5)の多くのエイリアスが存在した(NFKMライブラリ) #define CR_GENID_ERROR_HSM_BUSY // Status_Busy = 142, : モジュールが処理中である。 -> これは発生しない?(はず)#define CR_GENID_ERROR_STRICT_FIPS // Status_StrictFIPSSecurityLevel = 275, : strict FIPSモードで許可されていない処理を行った #define CR_GENID_ERROR_CONFLICT_PARAM // Status_ConflictingParameters = 239, : パラメータが衝突している。(データベース?) #define CR_GENID_ERROR_DATA_MISMATCH // Status_DataMismatch = 240, : データベース?のデータが予期していたデータとマッチしない。 #define CR_GENID_ERROR_KEY_NOACTIVE // Status_NoActiveKey = 242, : 鍵を鍵束からロードしようとしたが、その鍵束は現在ハンドリングされていないものである。 #define CR_GENID_ERROR_NOGROUP_PERM // Status_NoGroupPermission = 244, : エンドポイント?が鍵をフェッチしようとしたが、適切なグループパーミッションが見付からなかった #define CR_GENID_ERROR_STATUS_MAX // Status__Max = 288 : HSM のエラーコードの最大値 #endif // 詳細不明だが、響きから起こりうる可能性がありそうなもの // Status_HostDataInvalid = 70, // Status_HostDataAccessFailed = 71, // Status_HostDataAccessDenied = 86, // Status_InvalidMergedKey = 87, // Status_AlreadyExists = 88, // Status_UserCancelled = 131, // Status_HostUnknownKeyType = 133, // Status_IncorrectRepositoryName = 134, // Status_SecurityWorldFeatureDisabled = 143, // Status_UnknownESN = 213, #ifdef __cplusplus extern "C" { #endif typedef signed char s8; typedef unsigned char u8; typedef unsigned short u16; typedef signed long s32; typedef unsigned long u32; typedef unsigned long long u64; //#define DEBUG_PRINT 1 #ifdef USE_SFMT #include "SFMT.h" #endif /* USE_SFMT */ #define CR_ID_BUF_SIZE (2048/8) #define CR_NUM_OF_SERIAL 5 /* serial と 実際のID との関係は、下記のようになっています。 ID0 = serial[ 0 ] ID1 = serial[ 1 ] | ( serial[ 2 ] << 32 ) ID2 = serial[ 3 ] | ( serial[ 4 ] << 32 ) */ // Nintendo ID 仕様 #define CR_ID0_BIT_NUM 32 #define CR_ID1_BIT_NUM 34 #define CR_ID2_BIT_NUM 64 #define CR_ID0_MASK 0xFFFFFFFF // 32bit #define CR_ID1_MASK 0x00000003FFFFFFFFll // 34bit #define CR_ID2_MASK 0xFFFFFFFFFFFFFFFFll // 64bit int cr_generate_id_initialize( void ); int cr_generate_id_finalize( void ); int cr_generate_id( u32 serial[CR_NUM_OF_SERIAL], u8 id[CR_ID_BUF_SIZE], u8 bondingOption ); extern int cr_print_flag; #ifdef __cplusplus } #endif #endif /* _CR_GENERATE_ID_H_ */