sha256c というクラスを作った

コメントを書き込まなきゃな.javadoc 形式なりなんなり.

main.cpp

#include "sha256c.h"

int main ( int argc, char *argv[] )
{
	sha256c s;
	s.classtest();

	return 0;
}

sha256.h

#pragma once

#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 );

	void init( void );

	void update( unsigned char *data, size_t len );

	unsigned char *getHash();

	void showHash( void );

	void classtest( void );
};

sha256c.cpp

#include "sha256c.h"

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

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

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

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

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

void sha256c::classtest( void )
{
	// ハッシュを求めたいデータ
	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();
}