123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111 |
- //
- // RSADigestEngine.h
- //
- // Library: Crypto
- // Package: RSA
- // Module: RSADigestEngine
- //
- // Definition of the RSADigestEngine class.
- //
- // Copyright (c) 2008, Applied Informatics Software Engineering GmbH.
- // and Contributors.
- //
- // SPDX-License-Identifier: BSL-1.0
- //
- #ifndef Crypto_RSADigestEngine_INCLUDED
- #define Crypto_RSADigestEngine_INCLUDED
- #include "Poco/Crypto/Crypto.h"
- #include "Poco/Crypto/RSAKey.h"
- #include "Poco/DigestEngine.h"
- #include "Poco/Crypto/DigestEngine.h"
- #include <istream>
- #include <ostream>
- namespace Poco {
- namespace Crypto {
- class Crypto_API RSADigestEngine: public Poco::DigestEngine
- /// This class implements a Poco::DigestEngine that can be
- /// used to compute a secure digital signature.
- ///
- /// First another Poco::Crypto::DigestEngine is created and
- /// used to compute a cryptographic hash of the data to be
- /// signed. Then, the hash value is encrypted, using
- /// the RSA private key.
- ///
- /// To verify a signature, pass it to the verify()
- /// member function. It will decrypt the signature
- /// using the RSA public key and compare the resulting
- /// hash with the actual hash of the data.
- {
- public:
- enum DigestType
- {
- DIGEST_MD5,
- DIGEST_SHA1
- };
-
- //@ deprecated
- RSADigestEngine(const RSAKey& key, DigestType digestType = DIGEST_SHA1);
- /// Creates the RSADigestEngine with the given RSA key,
- /// using the MD5 or SHA-1 hash algorithm.
- /// Kept for backward compatibility
- RSADigestEngine(const RSAKey& key, const std::string &name);
- /// Creates the RSADigestEngine with the given RSA key,
- /// using the hash algorithm with the given name
- /// (e.g., "MD5", "SHA1", "SHA256", "SHA512", etc.).
- /// See the OpenSSL documentation for a list of supported digest algorithms.
- ///
- /// Throws a Poco::NotFoundException if no algorithm with the given name exists.
- ~RSADigestEngine();
- /// Destroys the RSADigestEngine.
- std::size_t digestLength() const;
- /// Returns the length of the digest in bytes.
- void reset();
- /// Resets the engine so that a new
- /// digest can be computed.
-
- const DigestEngine::Digest& digest();
- /// Finishes the computation of the digest
- /// (the first time it's called) and
- /// returns the message digest.
- ///
- /// Can be called multiple times.
- const DigestEngine::Digest& signature();
- /// Signs the digest using the RSA algorithm
- /// and the private key (the first time it's
- /// called) and returns the result.
- ///
- /// Can be called multiple times.
- bool verify(const DigestEngine::Digest& signature);
- /// Verifies the data against the signature.
- ///
- /// Returns true if the signature can be verified, false otherwise.
- protected:
- void updateImpl(const void* data, std::size_t length);
- private:
- RSAKey _key;
- Poco::Crypto::DigestEngine _engine;
- Poco::DigestEngine::Digest _digest;
- Poco::DigestEngine::Digest _signature;
- };
- } } // namespace Poco::Crypto
- #endif // Crypto_RSADigestEngine_INCLUDED
|