99 lines
2.1 KiB
C++
99 lines
2.1 KiB
C++
/*
|
|
Copyright (c) 2006-2009 by Jakob Schroeter <js@camaya.net>
|
|
This file is part of the gloox library. http://camaya.net/gloox
|
|
|
|
This software is distributed under a license. The full license
|
|
agreement can be found in the file LICENSE in this distribution.
|
|
This software may not be copied, modified, sold or distributed
|
|
other than expressed in the named license agreement.
|
|
|
|
This software is distributed without any warranty.
|
|
*/
|
|
|
|
#ifndef SHA_H__
|
|
#define SHA_H__
|
|
|
|
#include "macros.h"
|
|
|
|
#include <string>
|
|
|
|
namespace gloox
|
|
{
|
|
|
|
/**
|
|
* @brief An implementation of SHA1.
|
|
*
|
|
* @author Jakob Schroeter <js@camaya.net>
|
|
* @since 0.9
|
|
*/
|
|
class GLOOX_API SHA
|
|
{
|
|
|
|
public:
|
|
/**
|
|
* Constructs a new SHA object.
|
|
*/
|
|
SHA();
|
|
|
|
/**
|
|
* Virtual Destructor.
|
|
*/
|
|
virtual ~SHA();
|
|
|
|
/**
|
|
* Resets the internal state.
|
|
*/
|
|
void reset();
|
|
|
|
/**
|
|
* Finalizes the hash computation.
|
|
*/
|
|
void finalize();
|
|
|
|
/**
|
|
* Returns the message digest in hex notation. Finalizes the hash if finalize()
|
|
* has not been called before.
|
|
* @return The message digest.
|
|
*/
|
|
const std::string hex();
|
|
|
|
/**
|
|
* Returns the raw binary message digest. Finalizes the hash if finalize()
|
|
* has not been called before.
|
|
* @return The message raw binary digest.
|
|
*/
|
|
const std::string binary();
|
|
|
|
/**
|
|
* Provide input to SHA1.
|
|
* @param data The data to compute the digest of.
|
|
* @param length The size of the data in bytes.
|
|
*/
|
|
void feed( const unsigned char* data, unsigned length );
|
|
|
|
/**
|
|
* Provide input to SHA1.
|
|
* @param data The data to compute the digest of.
|
|
*/
|
|
void feed( const std::string& data );
|
|
|
|
private:
|
|
void process();
|
|
void pad();
|
|
inline unsigned shift( int bits, unsigned word );
|
|
void init();
|
|
|
|
unsigned H[5];
|
|
unsigned Length_Low;
|
|
unsigned Length_High;
|
|
unsigned char Message_Block[64];
|
|
int Message_Block_Index;
|
|
bool m_finished;
|
|
bool m_corrupted;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
#endif // SHA_H__
|