ハッシュ計算をクラス化できなかった

自己解決できた.showHash() するときは SHA256_Final() 済みとは限らない,というのが問題だった.showHash() の最初に SHA256_Final() して解決した.

何がいけないのかわからない.SHA256_Final() して hash に入るデータが32個すべて204になる.

#ifdef _DEBUG
#pragma comment(lib, "libeay32MDd.lib")
#pragma comment(lib, "ssleay32MDd.lib")
#else
#pragma comment(lib, "libeay32MD.lib")
#pragma comment(lib, "ssleay32MD.lib")
#endif

#include <openssl/sha.h>
#include <stdio.h>
#include <string.h>

class sha256c{
private:
	unsigned char hash[SHA256_DIGEST_LENGTH];
	SHA256_CTX ctx;

public:
	sha256c( void )
	{
		init();
	}

	void init( void )
	{
		SHA256_Init(&ctx);
	}

	void update( unsigned char *data, size_t len )
	{
		SHA256_Update( &ctx, data, len );
	}

	unsigned char *getHash()
	{
		SHA256_Final( hash, &ctx );
		return hash;
	}

	void showHash( void )
	{
		for ( size_t i = 0; i < SHA256_DIGEST_LENGTH; i++ )
		{
			printf("%02x", hash[i] );
		}
		printf("\n");
	}

};

int main ( int argc, char *argv[] )
{
	// ハッシュを求めたいデータ
	char *textvector = "The quick brown fox jumps over the lazy dog";

	// ハッシュ計算
	sha256c h;
	h.update( (unsigned char *)textvector, strlen(textvector) );
	h.showHash(); // 表示
	// d7a8fbb307d7809469ca9abcb0082e4f8d5651e46d3cdb762d02d0bf37c9e592 と出れば良し
	// http://www.chilkatsoft.com/js-sha256-hash.asp

	// ハッシュを求めたいデータを逐次送る場合
	char *fragment[] = {"The ","quick ","brown ","fox ","jumps ","over ","the ","lazy ","dog"};
	size_t numword = sizeof(fragment) / sizeof(fragment[0]); // 分割個数

	// ハッシュ計算
	h.init();
	for ( size_t i = 0; i < numword; i++ )
	{
		h.update( (unsigned char *)fragment[i], strlen(fragment[i]) );
	}
	h.showHash();

	return 0;
}