1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150
|
//
// SHA2Engine.h
//
// Library: Foundation
// Package: Crypt
// Module: SHA2Engine
//
// Definition of class SHA2Engine.
//
// Secure Hash Standard SHA-2 algorithm
// (FIPS 180-4, see http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf)
//
// Based on the implementation of mbed TLS (Apache 2.0)
// http://www.apache.org/licenses/LICENSE-2.0
//
// Copyright (c) 2017, Applied Informatics Software Engineering GmbH
// and Contributors.
//
// SPDX-License-Identifier: BSL-1.0
//
#ifndef Foundation_SHA2Engine_INCLUDED
#define Foundation_SHA2Engine_INCLUDED
#include "Poco/Foundation.h"
#include "Poco/DigestEngine.h"
namespace Poco {
class Foundation_API SHA2Engine: public DigestEngine
/// This class implements the SHA-2 message digest algorithm.
/// (FIPS 180-4, see http://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf)
{
public:
enum ALGORITHM
{
SHA_224 = 1,
SHA_256,
SHA_384,
SHA_512,
SHA_512_224,
SHA_512_256
};
SHA2Engine(ALGORITHM algorithm = SHA_256);
virtual ~SHA2Engine();
std::size_t digestLength() const;
void reset();
const DigestEngine::Digest& digest();
protected:
void updateImpl(const void* data, std::size_t length);
private:
void transform();
void* _context;
ALGORITHM _algorithm;
DigestEngine::Digest _digest;
SHA2Engine(const SHA2Engine&);
SHA2Engine& operator = (const SHA2Engine&);
};
class Foundation_API SHA2Engine224 : public SHA2Engine
{
public:
enum
{
BLOCK_SIZE = 64,
DIGEST_SIZE = 28
};
SHA2Engine224(): Poco::SHA2Engine(Poco::SHA2Engine::ALGORITHM::SHA_224)
{
}
virtual ~SHA2Engine224()
{
}
};
class Foundation_API SHA2Engine256 : public SHA2Engine
{
public:
enum
{
BLOCK_SIZE = 64,
DIGEST_SIZE = 32
};
SHA2Engine256(): Poco::SHA2Engine(Poco::SHA2Engine::ALGORITHM::SHA_256)
{
}
virtual ~SHA2Engine256()
{
}
};
class Foundation_API SHA2Engine384 : public SHA2Engine
{
public:
enum
{
BLOCK_SIZE = 128,
DIGEST_SIZE = 48
};
SHA2Engine384(): Poco::SHA2Engine(Poco::SHA2Engine::ALGORITHM::SHA_384)
{
}
virtual ~SHA2Engine384()
{
}
};
class Foundation_API SHA2Engine512 : public SHA2Engine
{
public:
enum
{
BLOCK_SIZE = 128,
DIGEST_SIZE = 64
};
SHA2Engine512(): Poco::SHA2Engine(Poco::SHA2Engine::ALGORITHM::SHA_512)
{
}
virtual ~SHA2Engine512()
{
}
};
} // namespace Poco
#endif // Foundation_SHA2Engine_INCLUDED
|