1 /*---------------------------------------------------------------------------*
2   Project:  Horizon
3   File:     crypto_Sha256.h
4 
5   Copyright (C)2009 Nintendo Co., Ltd.  All rights reserved.
6 
7   These coded instructions, statements, and computer programs contain
8   proprietary information of Nintendo of America Inc. and/or Nintendo
9   Company Ltd., and are protected by Federal copyright law.  They may
10   not be disclosed to third parties or copied or duplicated in any form,
11   in whole or in part, without the prior written consent of Nintendo.
12 
13   $Rev: 12449 $
14  *---------------------------------------------------------------------------*/
15 
16 /*! @file
17     @brief      SHA-256 に関する API の宣言
18 
19 */
20 
21 #ifndef NN_CRYPTO_CRYPTO_SHA256_H_
22 #define NN_CRYPTO_CRYPTO_SHA256_H_
23 
24 #include <nn/crypto/crypto_HashContextBase.h>
25 #include <nn/crypto/crypto_ShaBlock512BitContext.h>
26 
27 #ifdef __cplusplus
28 
29 namespace nn{ namespace crypto{
30 
31 /*!
32     @brief  SHA-256 計算用コンテキストオブジェクトです。
33 */
34 class Sha256Context : public ShaBlock512BitContext
35 {
36 public:
37     static const size_t HASH_SIZE  = (256/8);  // 256bit
38 
39 private:
40     u32     m_H[8];
41 
42 protected:
43     virtual void ProcessBlock();
44 
45 public:
46 
47     /*!
48         @brief    SHA-256 計算用コンテキストを作成します。初期化は行いません。
49 
50         @return   無し。
51     */
Sha256Context()52     Sha256Context() {}
53 
54     /*!
55         @brief    SHA-256 計算用コンテキストを破棄します。
56 
57         @return   無し。
58     */
~Sha256Context()59     ~Sha256Context() {};
60 
61     /*!
62         @brief    SHA-256 計算用コンテキストの初期化処理を行います。
63 
64         @return   無し。
65     */
66     virtual void Initialize();
67 
68     /*!
69         @brief    SHA-256 計算用コンテキストの完了処理を行います。
70 
71         @return   無し。
72     */
Finalize()73     virtual void Finalize() {}
74 
75     /*!
76         @brief    SHA-256 ハッシュ値を与えられたデータで更新します。
77 
78         @param[in]  pData  入力データへのポインタ
79         @param[in]  length 入力データ長
80 
81         @return   無し。
82     */
83     virtual void Update(const void* pData, size_t length);
84 
85     /*!
86         @brief    SHA-256 ハッシュの長さを取得します。
87 
88         @return   SHA-256 ハッシュの長さ。(バイト数)
89     */
GetHashLength()90     virtual size_t GetHashLength() { return HASH_SIZE; }
91 
92     /*!
93         @brief    最終的な SHA-256 ハッシュ計算結果を取得します。
94 
95         @param[out]  pOut SHA-256 値を格納する場所へのポインタ
96                      (GetHashLength() 分のバイト数が必要です。)
97 
98         @return   無し。(pOut に SHA-256 計算結果が格納されます。)
99     */
100     virtual void GetHash(void* pOut);
101 
102 };  // sizeof(Sha256Context) == 112
103 
104 /*!
105     @brief    SHA-256 を計算するための一連の流れをまとめたユーティリティ関数です。
106 
107               Update を分割して何回も呼ぶ必要がある場合は使用できません。
108 
109     @param[out]  pOut    SHA-256 値を格納する場所へのポインタ
110     @param[in]   pData   入力データのポインタ
111     @param[in]   length  入力データ長
112 
113     @return   無し。(pOut に SHA-256 計算結果が入ります。)
114 */
115 void CalculateSha256(void *pOut, const void *pData, size_t length);
116 
117 }} // namespace nn::crypto
118 
119 #endif // __cplusplus
120 
121 
122 #endif /* NN_CRYPTO_CRYPTO_SHA256_H_ */
123