/*---------------------------------------------------------------------------* Project: Horizon File: crypto_Sha256.h Copyright (C)2009 Nintendo Co., Ltd. All rights reserved. These coded instructions, statements, and computer programs contain proprietary information of Nintendo of America Inc. and/or Nintendo Company Ltd., and are protected by Federal copyright law. They may not be disclosed to third parties or copied or duplicated in any form, in whole or in part, without the prior written consent of Nintendo. $Rev: 12449 $ *---------------------------------------------------------------------------*/ /*! @file @brief SHA-256 に関する API の宣言 */ #ifndef NN_CRYPTO_CRYPTO_SHA256_H_ #define NN_CRYPTO_CRYPTO_SHA256_H_ #include #include #ifdef __cplusplus namespace nn{ namespace crypto{ /*! @brief SHA-256 計算用コンテキストオブジェクトです。 */ class Sha256Context : public ShaBlock512BitContext { public: static const size_t HASH_SIZE = (256/8); // 256bit private: u32 m_H[8]; protected: virtual void ProcessBlock(); public: /*! @brief SHA-256 計算用コンテキストを作成します。初期化は行いません。 @return 無し。 */ Sha256Context() {} /*! @brief SHA-256 計算用コンテキストを破棄します。 @return 無し。 */ ~Sha256Context() {}; /*! @brief SHA-256 計算用コンテキストの初期化処理を行います。 @return 無し。 */ virtual void Initialize(); /*! @brief SHA-256 計算用コンテキストの完了処理を行います。 @return 無し。 */ virtual void Finalize() {} /*! @brief SHA-256 ハッシュ値を与えられたデータで更新します。 @param[in] pData 入力データへのポインタ @param[in] length 入力データ長 @return 無し。 */ virtual void Update(const void* pData, size_t length); /*! @brief SHA-256 ハッシュの長さを取得します。 @return SHA-256 ハッシュの長さ。(バイト数) */ virtual size_t GetHashLength() { return HASH_SIZE; } /*! @brief 最終的な SHA-256 ハッシュ計算結果を取得します。 @param[out] pOut SHA-256 値を格納する場所へのポインタ (GetHashLength() 分のバイト数が必要です。) @return 無し。(pOut に SHA-256 計算結果が格納されます。) */ virtual void GetHash(void* pOut); }; // sizeof(Sha256Context) == 112 /*! @brief SHA-256 を計算するための一連の流れをまとめたユーティリティ関数です。 Update を分割して何回も呼ぶ必要がある場合は使用できません。 @param[out] pOut SHA-256 値を格納する場所へのポインタ @param[in] pData 入力データのポインタ @param[in] length 入力データ長 @return 無し。(pOut に SHA-256 計算結果が入ります。) */ void CalculateSha256(void *pOut, const void *pData, size_t length); }} // namespace nn::crypto #endif // __cplusplus #endif /* NN_CRYPTO_CRYPTO_SHA256_H_ */