| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210 |
- /*
- * Tomcrypt library <= firebird : c++ wrapper.
- *
- * The contents of this file are subject to the Initial
- * Developer's Public License Version 1.0 (the "License");
- * you may not use this file except in compliance with the
- * License. You may obtain a copy of the License at
- * https://www.firebirdsql.org/en/initial-developer-s-public-license-version-1-0/
- *
- * Software distributed under the License is distributed AS IS,
- * WITHOUT WARRANTY OF ANY KIND, either express or implied.
- * See the License for the specific language governing rights
- * and limitations under the License.
- *
- * The Original Code was created by Alexander Peshkoff
- * for the Firebird Open Source RDBMS project.
- *
- * Copyright (c) 2020 Alexander Peshkoff <[email protected]>
- * and all contributors signed below.
- *
- * All Rights Reserved.
- * Contributor(s): ______________________________________.
- */
- #include <tomcrypt.h>
- #include <firebird/Interface.h>
- using namespace Firebird;
- #include <stdio.h>
- void error(ThrowStatusWrapper* status, const char* text);
- void check(ThrowStatusWrapper* status, int err, const char* text);
- unsigned readHexKey(ThrowStatusWrapper* status, const char* hex, unsigned char* key, unsigned bufSize);
- class PseudoRandom
- {
- public:
- #if CRYPT > 0x0100
- typedef ltc_prng_descriptor PrngDescriptor;
- #else
- typedef _prng_descriptor PrngDescriptor;
- #endif
- void init(ThrowStatusWrapper* status);
- void fini();
- const PrngDescriptor* getDsc();
- int index = 0;
- prng_state state{};
- };
- class Hash
- {
- protected:
- void init(ThrowStatusWrapper* status, const ltc_hash_descriptor* desc);
- public:
- void fini()
- { }
- int index;
- };
- class HashSha1 : public Hash
- {
- public:
- void init(ThrowStatusWrapper* status)
- {
- Hash::init(status, &sha1_desc);
- }
- };
- class HashSha256 : public Hash
- {
- public:
- void init(ThrowStatusWrapper* status)
- {
- Hash::init(status, &sha256_desc);
- }
- };
- // controls reference counter of the object where points
- enum NoIncrement {NO_INCREMENT};
- template <typename T>
- class RefPtr
- {
- public:
- RefPtr() : ptr(NULL)
- { }
- explicit RefPtr(T* p) : ptr(p)
- {
- if (ptr)
- {
- ptr->addRef();
- }
- }
- // This special form of ctor is used to create refcounted ptr from interface,
- // returned by a function (which increments counter on return)
- RefPtr(NoIncrement x, T* p) : ptr(p)
- { }
- RefPtr(const RefPtr& r) : ptr(r.ptr)
- {
- if (ptr)
- {
- ptr->addRef();
- }
- }
- ~RefPtr()
- {
- if (ptr)
- {
- ptr->release();
- }
- }
- T* operator=(T* p)
- {
- return assign(p);
- }
- T* operator=(const RefPtr& r)
- {
- return assign(r.ptr);
- }
- operator T*()
- {
- return ptr;
- }
- T* operator->()
- {
- return ptr;
- }
- operator const T*() const
- {
- return ptr;
- }
- const T* operator->() const
- {
- return ptr;
- }
- bool operator !() const
- {
- return !ptr;
- }
- bool operator ==(const RefPtr& r) const
- {
- return ptr == r.ptr;
- }
- bool operator !=(const RefPtr& r) const
- {
- return ptr != r.ptr;
- }
- void clear() noexcept // Used after detach/commit/close/etc., i.e. release() not needed
- {
- ptr = NULL;
- }
- void assignNoIncrement(T* const p)
- {
- assign(NULL);
- ptr = p;
- }
- private:
- T* assign(T* const p)
- {
- if (ptr != p)
- {
- if (p)
- {
- p->addRef();
- }
- T* tmp = ptr;
- ptr = p;
- if (tmp)
- {
- tmp->release();
- }
- }
- return ptr;
- }
- T* ptr;
- };
- // Often used form of RefPtr
- template <class R>
- class AutoRelease : public RefPtr<R>
- {
- public:
- AutoRelease(R* r)
- : RefPtr<R>(NO_INCREMENT, r)
- { }
- };
|