aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorJack Lloyd <[email protected]>2017-09-22 11:38:42 -0400
committerJack Lloyd <[email protected]>2017-09-22 11:38:42 -0400
commit27482d71e00dcf106735ef824ded70cf25c6150f (patch)
tree60ee512ff6eed74051718920eb126c30c854e322 /src
parenta2e70c4eb74d016d8b3c783b4964cfc5ea2b7ddf (diff)
Apply final annotations to the library also
Done by a perl script which converted all classes to final, followed by selective reversion where it caused compilation failures.
Diffstat (limited to 'src')
-rw-r--r--src/lib/asn1/asn1_obj.h4
-rw-r--r--src/lib/asn1/ber_dec.h2
-rw-r--r--src/lib/asn1/der_enc.h2
-rw-r--r--src/lib/base/init.h2
-rw-r--r--src/lib/base/key_spec.h2
-rw-r--r--src/lib/base/scan_name.h2
-rw-r--r--src/lib/base/symkey.h2
-rw-r--r--src/lib/block/gost_28147/gost_28147.h2
-rw-r--r--src/lib/block/xtea/xtea.h2
-rw-r--r--src/lib/compression/bzip2/bzip2.cpp4
-rw-r--r--src/lib/compression/compress_utils.h2
-rw-r--r--src/lib/compression/lzma/lzma.cpp4
-rw-r--r--src/lib/compression/zlib/zlib.cpp8
-rw-r--r--src/lib/entropy/entropy_srcs.cpp2
-rw-r--r--src/lib/entropy/proc_walk/proc_walk.cpp2
-rw-r--r--src/lib/ffi/ffi_cipher.cpp2
-rw-r--r--src/lib/ffi/ffi_util.h4
-rw-r--r--src/lib/filters/aead_filt.h2
-rw-r--r--src/lib/filters/basefilt.h4
-rw-r--r--src/lib/filters/cipher_filter.h2
-rw-r--r--src/lib/filters/comp_filter.h4
-rw-r--r--src/lib/filters/data_snk.h2
-rw-r--r--src/lib/filters/filters.h6
-rw-r--r--src/lib/filters/out_buf.h2
-rw-r--r--src/lib/filters/pipe.cpp2
-rw-r--r--src/lib/filters/pipe.h2
-rw-r--r--src/lib/filters/secqueue.cpp2
-rw-r--r--src/lib/filters/secqueue.h2
-rw-r--r--src/lib/hash/shake/shake.h4
-rw-r--r--src/lib/hash/streebog/streebog.h2
-rw-r--r--src/lib/kdf/kdf1_iso18033/kdf1_iso18033.h2
-rw-r--r--src/lib/kdf/sp800_108/sp800_108.h6
-rw-r--r--src/lib/kdf/sp800_56c/sp800_56c.h2
-rw-r--r--src/lib/mac/gmac/gmac.h2
-rw-r--r--src/lib/math/bigint/bigint.h4
-rw-r--r--src/lib/math/ec_gfp/curve_gfp.h2
-rw-r--r--src/lib/math/ec_gfp/point_gfp.h8
-rw-r--r--src/lib/math/numbertheory/def_powm.h4
-rw-r--r--src/lib/math/numbertheory/pow_mod.h4
-rw-r--r--src/lib/misc/fpe_fe1/fpe_fe1.cpp2
-rw-r--r--src/lib/misc/hotp/hotp.h2
-rw-r--r--src/lib/misc/hotp/totp.h2
-rw-r--r--src/lib/misc/srp6/srp6.h2
-rw-r--r--src/lib/misc/tss/tss.h2
-rw-r--r--src/lib/modes/aead/ocb/ocb.cpp2
-rw-r--r--src/lib/modes/stream_mode.h2
-rw-r--r--src/lib/pk_pad/emsa1/emsa1.h2
-rw-r--r--src/lib/prov/bearssl/bearssl.h2
-rw-r--r--src/lib/prov/bearssl/bearssl_ec.cpp4
-rw-r--r--src/lib/prov/bearssl/bearssl_hash.cpp2
-rw-r--r--src/lib/prov/openssl/openssl.h2
-rw-r--r--src/lib/prov/openssl/openssl_block.cpp2
-rw-r--r--src/lib/prov/openssl/openssl_ec.cpp6
-rw-r--r--src/lib/prov/openssl/openssl_hash.cpp2
-rw-r--r--src/lib/prov/openssl/openssl_mode.cpp2
-rw-r--r--src/lib/prov/openssl/openssl_rc4.cpp2
-rw-r--r--src/lib/prov/openssl/openssl_rsa.cpp8
-rw-r--r--src/lib/prov/pkcs11/p11.h2
-rw-r--r--src/lib/prov/pkcs11/p11_ecdh.cpp2
-rw-r--r--src/lib/prov/pkcs11/p11_ecdh.h2
-rw-r--r--src/lib/prov/pkcs11/p11_ecdsa.cpp4
-rw-r--r--src/lib/prov/pkcs11/p11_mechanism.cpp4
-rw-r--r--src/lib/prov/pkcs11/p11_object.h6
-rw-r--r--src/lib/prov/pkcs11/p11_rsa.cpp6
-rw-r--r--src/lib/prov/pkcs11/p11_rsa.h2
-rw-r--r--src/lib/prov/tpm/tpm.cpp2
-rw-r--r--src/lib/prov/tpm/tpm.h9
-rw-r--r--src/lib/prov/tpm/uuid.h2
-rw-r--r--src/lib/pubkey/blinding.h2
-rw-r--r--src/lib/pubkey/cecpq1/cecpq1.h2
-rw-r--r--src/lib/pubkey/curve25519/curve25519.cpp2
-rw-r--r--src/lib/pubkey/curve25519/curve25519.h2
-rw-r--r--src/lib/pubkey/dh/dh.cpp2
-rw-r--r--src/lib/pubkey/dh/dh.h2
-rw-r--r--src/lib/pubkey/dl_group/dl_group.h2
-rw-r--r--src/lib/pubkey/dlies/dlies.h4
-rw-r--r--src/lib/pubkey/dsa/dsa.cpp4
-rw-r--r--src/lib/pubkey/dsa/dsa.h2
-rw-r--r--src/lib/pubkey/ec_group/ec_group.h2
-rw-r--r--src/lib/pubkey/ecdh/ecdh.cpp2
-rw-r--r--src/lib/pubkey/ecdh/ecdh.h2
-rw-r--r--src/lib/pubkey/ecdsa/ecdsa.cpp4
-rw-r--r--src/lib/pubkey/ecdsa/ecdsa.h2
-rw-r--r--src/lib/pubkey/ecgdsa/ecgdsa.cpp4
-rw-r--r--src/lib/pubkey/ecgdsa/ecgdsa.h2
-rw-r--r--src/lib/pubkey/ecies/ecies.cpp4
-rw-r--r--src/lib/pubkey/ecies/ecies.h6
-rw-r--r--src/lib/pubkey/eckcdsa/eckcdsa.cpp4
-rw-r--r--src/lib/pubkey/eckcdsa/eckcdsa.h2
-rw-r--r--src/lib/pubkey/ed25519/ed25519.h2
-rw-r--r--src/lib/pubkey/ed25519/ed25519_key.cpp8
-rw-r--r--src/lib/pubkey/elgamal/elgamal.cpp4
-rw-r--r--src/lib/pubkey/elgamal/elgamal.h2
-rw-r--r--src/lib/pubkey/gost_3410/gost_3410.cpp4
-rw-r--r--src/lib/pubkey/gost_3410/gost_3410.h2
-rw-r--r--src/lib/pubkey/mce/mceliece.h2
-rw-r--r--src/lib/pubkey/mce/mceliece_key.cpp4
-rw-r--r--src/lib/pubkey/pkcs8.h2
-rw-r--r--src/lib/pubkey/rfc6979/rfc6979.h2
-rw-r--r--src/lib/pubkey/rsa/rsa.cpp12
-rw-r--r--src/lib/pubkey/rsa/rsa.h2
-rw-r--r--src/lib/pubkey/sm2/sm2.cpp4
-rw-r--r--src/lib/pubkey/sm2/sm2.h2
-rw-r--r--src/lib/pubkey/sm2/sm2_enc.cpp4
-rw-r--r--src/lib/pubkey/xmss/xmss_privatekey.h2
-rw-r--r--src/lib/pubkey/xmss/xmss_signature_operation.h2
-rw-r--r--src/lib/pubkey/xmss/xmss_verification_operation.h2
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_addressed_privatekey.h2
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_privatekey.h2
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_signature_operation.h2
-rw-r--r--src/lib/pubkey/xmss/xmss_wots_verification_operation.h2
-rw-r--r--src/lib/rng/rdrand_rng/rdrand_rng.h2
-rw-r--r--src/lib/tls/sessions_sqlite3/tls_session_manager_sqlite.h2
-rw-r--r--src/lib/tls/tls_alert.h2
-rw-r--r--src/lib/tls/tls_blocking.h2
-rw-r--r--src/lib/tls/tls_ciphersuite.h2
-rw-r--r--src/lib/tls/tls_client.cpp2
-rw-r--r--src/lib/tls/tls_exceptn.h2
-rw-r--r--src/lib/tls/tls_extensions.h2
-rw-r--r--src/lib/tls/tls_handshake_hash.h2
-rw-r--r--src/lib/tls/tls_policy.cpp2
-rw-r--r--src/lib/tls/tls_policy.h8
-rw-r--r--src/lib/tls/tls_reader.h2
-rw-r--r--src/lib/tls/tls_record.h8
-rw-r--r--src/lib/tls/tls_server.cpp2
-rw-r--r--src/lib/tls/tls_server_info.h2
-rw-r--r--src/lib/tls/tls_session.h2
-rw-r--r--src/lib/tls/tls_session_key.h2
-rw-r--r--src/lib/tls/tls_session_manager.h4
-rw-r--r--src/lib/tls/tls_version.h2
-rw-r--r--src/lib/utils/barrier.h2
-rw-r--r--src/lib/utils/cpuid/cpuid.h2
-rw-r--r--src/lib/utils/data_src.h4
-rw-r--r--src/lib/utils/database.h2
-rw-r--r--src/lib/utils/donna128.h2
-rw-r--r--src/lib/utils/dyn_load/dyn_load.h2
-rw-r--r--src/lib/utils/exceptn.h32
-rw-r--r--src/lib/utils/http_util/http_util.h2
-rw-r--r--src/lib/utils/locking_allocator/locking_allocator.h2
-rw-r--r--src/lib/utils/os_utils.cpp6
-rw-r--r--src/lib/utils/safeint.h2
-rw-r--r--src/lib/utils/semaphore.h2
-rw-r--r--src/lib/utils/sqlite3/sqlite3.h4
-rw-r--r--src/lib/x509/certstor.h2
-rw-r--r--src/lib/x509/certstor_sqlite3/certstor_sqlite.h2
-rw-r--r--src/lib/x509/name_constraint.h6
-rw-r--r--src/lib/x509/ocsp.h4
-rw-r--r--src/lib/x509/x509_ca.h2
-rw-r--r--src/lib/x509/x509_crl.h2
-rw-r--r--src/lib/x509/x509_ext.cpp2
-rw-r--r--src/lib/x509/x509_ext.h8
-rw-r--r--src/lib/x509/x509path.h4
-rw-r--r--src/lib/x509/x509self.h2
153 files changed, 243 insertions, 242 deletions
diff --git a/src/lib/asn1/asn1_obj.h b/src/lib/asn1/asn1_obj.h
index 133166d28..65a4919fd 100644
--- a/src/lib/asn1/asn1_obj.h
+++ b/src/lib/asn1/asn1_obj.h
@@ -82,7 +82,7 @@ class BOTAN_PUBLIC_API(2,0) ASN1_Object
/**
* BER Encoded Object
*/
-class BOTAN_PUBLIC_API(2,0) BER_Object
+class BOTAN_PUBLIC_API(2,0) BER_Object final
{
public:
void assert_is_a(ASN1_Tag, ASN1_Tag);
@@ -123,7 +123,7 @@ struct BOTAN_PUBLIC_API(2,0) BER_Decoding_Error : public Decoding_Error
/**
* Exception For Incorrect BER Taggings
*/
-struct BOTAN_PUBLIC_API(2,0) BER_Bad_Tag : public BER_Decoding_Error
+struct BOTAN_PUBLIC_API(2,0) BER_Bad_Tag final : public BER_Decoding_Error
{
BER_Bad_Tag(const std::string& msg, ASN1_Tag tag);
BER_Bad_Tag(const std::string& msg, ASN1_Tag tag1, ASN1_Tag tag2);
diff --git a/src/lib/asn1/ber_dec.h b/src/lib/asn1/ber_dec.h
index 75616ed16..ab39d985d 100644
--- a/src/lib/asn1/ber_dec.h
+++ b/src/lib/asn1/ber_dec.h
@@ -16,7 +16,7 @@ namespace Botan {
/**
* BER Decoding Object
*/
-class BOTAN_PUBLIC_API(2,0) BER_Decoder
+class BOTAN_PUBLIC_API(2,0) BER_Decoder final
{
public:
BER_Object get_next_object();
diff --git a/src/lib/asn1/der_enc.h b/src/lib/asn1/der_enc.h
index becdd747e..7ffa824e6 100644
--- a/src/lib/asn1/der_enc.h
+++ b/src/lib/asn1/der_enc.h
@@ -19,7 +19,7 @@ class ASN1_Object;
/**
* General DER Encoding Object
*/
-class BOTAN_PUBLIC_API(2,0) DER_Encoder
+class BOTAN_PUBLIC_API(2,0) DER_Encoder final
{
public:
secure_vector<uint8_t> get_contents();
diff --git a/src/lib/base/init.h b/src/lib/base/init.h
index 37c053b4c..ba014d8e1 100644
--- a/src/lib/base/init.h
+++ b/src/lib/base/init.h
@@ -19,7 +19,7 @@ namespace Botan {
* case, and this class is no longer needed and kept only for backwards
* compatibility.
*/
-class BOTAN_PUBLIC_API(2,0) BOTAN_DEPRECATED("LibraryInitializer is no longer required") LibraryInitializer
+class BOTAN_PUBLIC_API(2,0) BOTAN_DEPRECATED("LibraryInitializer is no longer required") LibraryInitializer final
{
public:
explicit LibraryInitializer(const std::string& /*ignored*/ = "") { }
diff --git a/src/lib/base/key_spec.h b/src/lib/base/key_spec.h
index 0a08cf27a..6db20a9b6 100644
--- a/src/lib/base/key_spec.h
+++ b/src/lib/base/key_spec.h
@@ -15,7 +15,7 @@ namespace Botan {
/**
* Represents the length requirements on an algorithm key
*/
-class BOTAN_PUBLIC_API(2,0) Key_Length_Specification
+class BOTAN_PUBLIC_API(2,0) Key_Length_Specification final
{
public:
/**
diff --git a/src/lib/base/scan_name.h b/src/lib/base/scan_name.h
index 9bc5afde8..8aa45f50f 100644
--- a/src/lib/base/scan_name.h
+++ b/src/lib/base/scan_name.h
@@ -18,7 +18,7 @@ namespace Botan {
A class encapsulating a SCAN name (similar to JCE conventions)
http://www.users.zetnet.co.uk/hopwood/crypto/scan/
*/
-class BOTAN_PUBLIC_API(2,0) SCAN_Name
+class BOTAN_PUBLIC_API(2,0) SCAN_Name final
{
public:
/**
diff --git a/src/lib/base/symkey.h b/src/lib/base/symkey.h
index 6f933896d..a010cc466 100644
--- a/src/lib/base/symkey.h
+++ b/src/lib/base/symkey.h
@@ -16,7 +16,7 @@ namespace Botan {
/**
* Octet String
*/
-class BOTAN_PUBLIC_API(2,0) OctetString
+class BOTAN_PUBLIC_API(2,0) OctetString final
{
public:
/**
diff --git a/src/lib/block/gost_28147/gost_28147.h b/src/lib/block/gost_28147/gost_28147.h
index 735cc6161..fb2e981ac 100644
--- a/src/lib/block/gost_28147/gost_28147.h
+++ b/src/lib/block/gost_28147/gost_28147.h
@@ -18,7 +18,7 @@ namespace Botan {
* considered a local configuration issue. Several different sets are
* used.
*/
-class BOTAN_PUBLIC_API(2,0) GOST_28147_89_Params
+class BOTAN_PUBLIC_API(2,0) GOST_28147_89_Params final
{
public:
/**
diff --git a/src/lib/block/xtea/xtea.h b/src/lib/block/xtea/xtea.h
index 1a073418b..3ce0fda58 100644
--- a/src/lib/block/xtea/xtea.h
+++ b/src/lib/block/xtea/xtea.h
@@ -15,7 +15,7 @@ namespace Botan {
/**
* XTEA
*/
-class BOTAN_PUBLIC_API(2,0) XTEA : public Block_Cipher_Fixed_Params<8, 16>
+class BOTAN_PUBLIC_API(2,0) XTEA final : public Block_Cipher_Fixed_Params<8, 16>
{
public:
void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
diff --git a/src/lib/compression/bzip2/bzip2.cpp b/src/lib/compression/bzip2/bzip2.cpp
index 4ebf572c9..02d17ea07 100644
--- a/src/lib/compression/bzip2/bzip2.cpp
+++ b/src/lib/compression/bzip2/bzip2.cpp
@@ -33,7 +33,7 @@ class Bzip2_Stream : public Zlib_Style_Stream<bz_stream, char>
uint32_t finish_flag() const override { return BZ_FINISH; }
};
-class Bzip2_Compression_Stream : public Bzip2_Stream
+class Bzip2_Compression_Stream final : public Bzip2_Stream
{
public:
explicit Bzip2_Compression_Stream(size_t block_size)
@@ -72,7 +72,7 @@ class Bzip2_Compression_Stream : public Bzip2_Stream
}
};
-class Bzip2_Decompression_Stream : public Bzip2_Stream
+class Bzip2_Decompression_Stream final : public Bzip2_Stream
{
public:
Bzip2_Decompression_Stream()
diff --git a/src/lib/compression/compress_utils.h b/src/lib/compression/compress_utils.h
index 90244a8c0..396fc47be 100644
--- a/src/lib/compression/compress_utils.h
+++ b/src/lib/compression/compress_utils.h
@@ -17,7 +17,7 @@ namespace Botan {
/*
* Allocation Size Tracking Helper for Zlib/Bzlib/LZMA
*/
-class Compression_Alloc_Info
+class Compression_Alloc_Info final
{
public:
template<typename T>
diff --git a/src/lib/compression/lzma/lzma.cpp b/src/lib/compression/lzma/lzma.cpp
index 44af1ee67..365affa91 100644
--- a/src/lib/compression/lzma/lzma.cpp
+++ b/src/lib/compression/lzma/lzma.cpp
@@ -52,7 +52,7 @@ class LZMA_Stream : public Zlib_Style_Stream<lzma_stream, uint8_t>
uint32_t finish_flag() const override { return LZMA_FINISH; }
};
-class LZMA_Compression_Stream : public LZMA_Stream
+class LZMA_Compression_Stream final : public LZMA_Stream
{
public:
explicit LZMA_Compression_Stream(size_t level)
@@ -71,7 +71,7 @@ class LZMA_Compression_Stream : public LZMA_Stream
}
};
-class LZMA_Decompression_Stream : public LZMA_Stream
+class LZMA_Decompression_Stream final : public LZMA_Stream
{
public:
LZMA_Decompression_Stream()
diff --git a/src/lib/compression/zlib/zlib.cpp b/src/lib/compression/zlib/zlib.cpp
index 2bfd22928..14bc12b27 100644
--- a/src/lib/compression/zlib/zlib.cpp
+++ b/src/lib/compression/zlib/zlib.cpp
@@ -107,20 +107,20 @@ class Zlib_Decompression_Stream : public Zlib_Stream
}
};
-class Deflate_Compression_Stream : public Zlib_Compression_Stream
+class Deflate_Compression_Stream final : public Zlib_Compression_Stream
{
public:
Deflate_Compression_Stream(size_t level, int wbits) :
Zlib_Compression_Stream(level, wbits, -1) {}
};
-class Deflate_Decompression_Stream : public Zlib_Decompression_Stream
+class Deflate_Decompression_Stream final : public Zlib_Decompression_Stream
{
public:
explicit Deflate_Decompression_Stream(int wbits) : Zlib_Decompression_Stream(wbits, -1) {}
};
-class Gzip_Compression_Stream : public Zlib_Compression_Stream
+class Gzip_Compression_Stream final : public Zlib_Compression_Stream
{
public:
Gzip_Compression_Stream(size_t level, int wbits, uint8_t os_code) :
@@ -139,7 +139,7 @@ class Gzip_Compression_Stream : public Zlib_Compression_Stream
::gz_header m_header;
};
-class Gzip_Decompression_Stream : public Zlib_Decompression_Stream
+class Gzip_Decompression_Stream final : public Zlib_Decompression_Stream
{
public:
explicit Gzip_Decompression_Stream(int wbits) : Zlib_Decompression_Stream(wbits, 16) {}
diff --git a/src/lib/entropy/entropy_srcs.cpp b/src/lib/entropy/entropy_srcs.cpp
index 76546c5da..69e593fb9 100644
--- a/src/lib/entropy/entropy_srcs.cpp
+++ b/src/lib/entropy/entropy_srcs.cpp
@@ -46,7 +46,7 @@ namespace Botan {
namespace {
-class System_RNG_EntropySource : public Entropy_Source
+class System_RNG_EntropySource final : public Entropy_Source
{
public:
size_t poll(RandomNumberGenerator& rng) override
diff --git a/src/lib/entropy/proc_walk/proc_walk.cpp b/src/lib/entropy/proc_walk/proc_walk.cpp
index 1fb040b1b..d780cbf73 100644
--- a/src/lib/entropy/proc_walk/proc_walk.cpp
+++ b/src/lib/entropy/proc_walk/proc_walk.cpp
@@ -24,7 +24,7 @@ namespace Botan {
namespace {
-class Directory_Walker : public File_Descriptor_Source
+class Directory_Walker final : public File_Descriptor_Source
{
public:
explicit Directory_Walker(const std::string& root) :
diff --git a/src/lib/ffi/ffi_cipher.cpp b/src/lib/ffi/ffi_cipher.cpp
index 72fa2eec8..23e277166 100644
--- a/src/lib/ffi/ffi_cipher.cpp
+++ b/src/lib/ffi/ffi_cipher.cpp
@@ -12,7 +12,7 @@ extern "C" {
using namespace Botan_FFI;
-struct botan_cipher_struct : public botan_struct<Botan::Cipher_Mode, 0xB4A2BF9C>
+struct botan_cipher_struct final : public botan_struct<Botan::Cipher_Mode, 0xB4A2BF9C>
{
explicit botan_cipher_struct(Botan::Cipher_Mode* x) : botan_struct(x) {}
Botan::secure_vector<uint8_t> m_buf;
diff --git a/src/lib/ffi/ffi_util.h b/src/lib/ffi/ffi_util.h
index 59d9a032d..7f959259c 100644
--- a/src/lib/ffi/ffi_util.h
+++ b/src/lib/ffi/ffi_util.h
@@ -18,7 +18,7 @@ namespace Botan_FFI {
#define BOTAN_ASSERT_ARG_NON_NULL(p) \
do { if(!p) throw Botan::Invalid_Argument("Argument " #p " is null"); } while(0)
-class FFI_Error : public Botan::Exception
+class FFI_Error final : public Botan::Exception
{
public:
explicit FFI_Error(const std::string& what) : Exception("FFI error", what) {}
@@ -46,7 +46,7 @@ struct botan_struct
};
#define BOTAN_FFI_DECLARE_STRUCT(NAME, TYPE, MAGIC) \
- struct NAME : public botan_struct<TYPE, MAGIC> { explicit NAME(TYPE* x) : botan_struct(x) {} }
+ struct NAME final : public botan_struct<TYPE, MAGIC> { explicit NAME(TYPE* x) : botan_struct(x) {} }
// Declared in ffi.cpp
int ffi_error_exception_thrown(const char* func_name, const char* exn);
diff --git a/src/lib/filters/aead_filt.h b/src/lib/filters/aead_filt.h
index 7927e7001..f569423a6 100644
--- a/src/lib/filters/aead_filt.h
+++ b/src/lib/filters/aead_filt.h
@@ -16,7 +16,7 @@ namespace Botan {
/**
* Filter interface for AEAD Modes
*/
-class AEAD_Filter : public Cipher_Mode_Filter
+class AEAD_Filter final : public Cipher_Mode_Filter
{
public:
AEAD_Filter(AEAD_Mode* aead) : Cipher_Mode_Filter(aead) {}
diff --git a/src/lib/filters/basefilt.h b/src/lib/filters/basefilt.h
index 1716c6aaf..40ce0ec6e 100644
--- a/src/lib/filters/basefilt.h
+++ b/src/lib/filters/basefilt.h
@@ -33,7 +33,7 @@ struct BOTAN_PUBLIC_API(2,0) BitBucket final : public Filter
* through all the Filters contained in the Chain.
*/
-class BOTAN_PUBLIC_API(2,0) Chain : public Fanout_Filter
+class BOTAN_PUBLIC_API(2,0) Chain final : public Fanout_Filter
{
public:
void write(const uint8_t input[], size_t length) override { send(input, length); }
@@ -88,7 +88,7 @@ class BOTAN_PUBLIC_API(2,0) Fork : public Fanout_Filter
* threads, the class itself is NOT thread-safe. This is meant as a drop-
* in replacement for Fork where performance gains are possible.
*/
-class BOTAN_PUBLIC_API(2,0) Threaded_Fork : public Fork
+class BOTAN_PUBLIC_API(2,0) Threaded_Fork final : public Fork
{
public:
std::string name() const override;
diff --git a/src/lib/filters/cipher_filter.h b/src/lib/filters/cipher_filter.h
index d26585723..94cfa71df 100644
--- a/src/lib/filters/cipher_filter.h
+++ b/src/lib/filters/cipher_filter.h
@@ -17,7 +17,7 @@ namespace Botan {
/**
* Filter interface for cipher modes
*/
-class BOTAN_PUBLIC_API(2,0) Cipher_Mode_Filter : public Keyed_Filter,
+class BOTAN_PUBLIC_API(2,0) Cipher_Mode_Filter final : public Keyed_Filter,
private Buffered_Filter
{
public:
diff --git a/src/lib/filters/comp_filter.h b/src/lib/filters/comp_filter.h
index f9d2a7d1d..d9cc00b68 100644
--- a/src/lib/filters/comp_filter.h
+++ b/src/lib/filters/comp_filter.h
@@ -20,7 +20,7 @@ class Decompression_Algorithm;
/**
* Filter interface for compression
*/
-class BOTAN_PUBLIC_API(2,0) Compression_Filter : public Filter
+class BOTAN_PUBLIC_API(2,0) Compression_Filter final : public Filter
{
public:
void start_msg() override;
@@ -45,7 +45,7 @@ class BOTAN_PUBLIC_API(2,0) Compression_Filter : public Filter
/**
* Filter interface for decompression
*/
-class BOTAN_PUBLIC_API(2,0) Decompression_Filter : public Filter
+class BOTAN_PUBLIC_API(2,0) Decompression_Filter final : public Filter
{
public:
void start_msg() override;
diff --git a/src/lib/filters/data_snk.h b/src/lib/filters/data_snk.h
index 4134ccbe5..49484b1c1 100644
--- a/src/lib/filters/data_snk.h
+++ b/src/lib/filters/data_snk.h
@@ -32,7 +32,7 @@ class BOTAN_PUBLIC_API(2,0) DataSink : public Filter
/**
* This class represents a data sink which writes its output to a stream.
*/
-class BOTAN_PUBLIC_API(2,0) DataSink_Stream : public DataSink
+class BOTAN_PUBLIC_API(2,0) DataSink_Stream final : public DataSink
{
public:
/**
diff --git a/src/lib/filters/filters.h b/src/lib/filters/filters.h
index 4f0e836ba..690c21214 100644
--- a/src/lib/filters/filters.h
+++ b/src/lib/filters/filters.h
@@ -28,7 +28,7 @@ namespace Botan {
/**
* Stream Cipher Filter
*/
-class BOTAN_PUBLIC_API(2,0) StreamCipher_Filter : public Keyed_Filter
+class BOTAN_PUBLIC_API(2,0) StreamCipher_Filter final : public Keyed_Filter
{
public:
@@ -94,7 +94,7 @@ class BOTAN_PUBLIC_API(2,0) StreamCipher_Filter : public Keyed_Filter
/**
* Hash Filter.
*/
-class BOTAN_PUBLIC_API(2,0) Hash_Filter : public Filter
+class BOTAN_PUBLIC_API(2,0) Hash_Filter final : public Filter
{
public:
void write(const uint8_t input[], size_t len) override { m_hash->update(input, len); }
@@ -131,7 +131,7 @@ class BOTAN_PUBLIC_API(2,0) Hash_Filter : public Filter
/**
* MessageAuthenticationCode Filter.
*/
-class BOTAN_PUBLIC_API(2,0) MAC_Filter : public Keyed_Filter
+class BOTAN_PUBLIC_API(2,0) MAC_Filter final : public Keyed_Filter
{
public:
void write(const uint8_t input[], size_t len) override { m_mac->update(input, len); }
diff --git a/src/lib/filters/out_buf.h b/src/lib/filters/out_buf.h
index d933df223..eab19fb3b 100644
--- a/src/lib/filters/out_buf.h
+++ b/src/lib/filters/out_buf.h
@@ -18,7 +18,7 @@ namespace Botan {
/**
* Container of output buffers for Pipe
*/
-class Output_Buffers
+class Output_Buffers final
{
public:
size_t read(uint8_t[], size_t, Pipe::message_id);
diff --git a/src/lib/filters/pipe.cpp b/src/lib/filters/pipe.cpp
index 3c901d0b7..bd6969f30 100644
--- a/src/lib/filters/pipe.cpp
+++ b/src/lib/filters/pipe.cpp
@@ -16,7 +16,7 @@ namespace {
/*
* A Filter that does nothing
*/
-class Null_Filter : public Filter
+class Null_Filter final : public Filter
{
public:
void write(const uint8_t input[], size_t length) override
diff --git a/src/lib/filters/pipe.h b/src/lib/filters/pipe.h
index 24b536bf7..74a6f33d3 100644
--- a/src/lib/filters/pipe.h
+++ b/src/lib/filters/pipe.h
@@ -37,7 +37,7 @@ class BOTAN_PUBLIC_API(2,0) Pipe final : public DataSource
* Exception if you use an invalid message as an argument to
* read, remaining, etc
*/
- struct BOTAN_PUBLIC_API(2,0) Invalid_Message_Number : public Invalid_Argument
+ struct BOTAN_PUBLIC_API(2,0) Invalid_Message_Number final : public Invalid_Argument
{
/**
* @param where the error occurred
diff --git a/src/lib/filters/secqueue.cpp b/src/lib/filters/secqueue.cpp
index b2fc444af..feaa26b4c 100644
--- a/src/lib/filters/secqueue.cpp
+++ b/src/lib/filters/secqueue.cpp
@@ -14,7 +14,7 @@ namespace Botan {
/**
* A node in a SecureQueue
*/
-class SecureQueueNode
+class SecureQueueNode final
{
public:
SecureQueueNode() : m_buffer(DEFAULT_BUFFERSIZE)
diff --git a/src/lib/filters/secqueue.h b/src/lib/filters/secqueue.h
index 2a999a04b..00616f5cf 100644
--- a/src/lib/filters/secqueue.h
+++ b/src/lib/filters/secqueue.h
@@ -17,7 +17,7 @@ namespace Botan {
/**
* A queue that knows how to zeroize itself
*/
-class BOTAN_PUBLIC_API(2,0) SecureQueue : public Fanout_Filter, public DataSource
+class BOTAN_PUBLIC_API(2,0) SecureQueue final : public Fanout_Filter, public DataSource
{
public:
std::string name() const override { return "Queue"; }
diff --git a/src/lib/hash/shake/shake.h b/src/lib/hash/shake/shake.h
index b41baa492..5ec35901f 100644
--- a/src/lib/hash/shake/shake.h
+++ b/src/lib/hash/shake/shake.h
@@ -17,7 +17,7 @@ namespace Botan {
/**
* SHAKE-128
*/
-class BOTAN_PUBLIC_API(2,0) SHAKE_128 : public HashFunction
+class BOTAN_PUBLIC_API(2,0) SHAKE_128 final : public HashFunction
{
public:
@@ -49,7 +49,7 @@ class BOTAN_PUBLIC_API(2,0) SHAKE_128 : public HashFunction
/**
* SHAKE-256
*/
-class BOTAN_PUBLIC_API(2,0) SHAKE_256 : public HashFunction
+class BOTAN_PUBLIC_API(2,0) SHAKE_256 final : public HashFunction
{
public:
diff --git a/src/lib/hash/streebog/streebog.h b/src/lib/hash/streebog/streebog.h
index d18ac02fc..5e83efb39 100644
--- a/src/lib/hash/streebog/streebog.h
+++ b/src/lib/hash/streebog/streebog.h
@@ -16,7 +16,7 @@ namespace Botan {
* Streebog (GOST R 34.11-2012)
* RFC 6986
*/
-class BOTAN_PUBLIC_API(2,2) Streebog: public HashFunction
+class BOTAN_PUBLIC_API(2,2) Streebog : public HashFunction
{
public:
size_t output_length() const override { return m_output_bits / 8; }
diff --git a/src/lib/kdf/kdf1_iso18033/kdf1_iso18033.h b/src/lib/kdf/kdf1_iso18033/kdf1_iso18033.h
index e49f41d22..fcd465436 100644
--- a/src/lib/kdf/kdf1_iso18033/kdf1_iso18033.h
+++ b/src/lib/kdf/kdf1_iso18033/kdf1_iso18033.h
@@ -16,7 +16,7 @@ namespace Botan {
/**
* KDF1, from ISO 18033-2
*/
-class BOTAN_PUBLIC_API(2,0) KDF1_18033 : public KDF
+class BOTAN_PUBLIC_API(2,0) KDF1_18033 final : public KDF
{
public:
std::string name() const override { return "KDF1-18033(" + m_hash->name() + ")"; }
diff --git a/src/lib/kdf/sp800_108/sp800_108.h b/src/lib/kdf/sp800_108/sp800_108.h
index 6bf488ac0..d74c876f7 100644
--- a/src/lib/kdf/sp800_108/sp800_108.h
+++ b/src/lib/kdf/sp800_108/sp800_108.h
@@ -16,7 +16,7 @@ namespace Botan {
/**
* NIST SP 800-108 KDF in Counter Mode (5.1)
*/
-class BOTAN_PUBLIC_API(2,0) SP800_108_Counter : public KDF
+class BOTAN_PUBLIC_API(2,0) SP800_108_Counter final : public KDF
{
public:
std::string name() const override { return "SP800-108-Counter(" + m_prf->name() + ")"; }
@@ -56,7 +56,7 @@ class BOTAN_PUBLIC_API(2,0) SP800_108_Counter : public KDF
/**
* NIST SP 800-108 KDF in Feedback Mode (5.2)
*/
-class BOTAN_PUBLIC_API(2,0) SP800_108_Feedback : public KDF
+class BOTAN_PUBLIC_API(2,0) SP800_108_Feedback final : public KDF
{
public:
std::string name() const override { return "SP800-108-Feedback(" + m_prf->name() + ")"; }
@@ -93,7 +93,7 @@ class BOTAN_PUBLIC_API(2,0) SP800_108_Feedback : public KDF
/**
* NIST SP 800-108 KDF in Double Pipeline Mode (5.3)
*/
-class BOTAN_PUBLIC_API(2,0) SP800_108_Pipeline : public KDF
+class BOTAN_PUBLIC_API(2,0) SP800_108_Pipeline final : public KDF
{
public:
std::string name() const override { return "SP800-108-Pipeline(" + m_prf->name() + ")"; }
diff --git a/src/lib/kdf/sp800_56c/sp800_56c.h b/src/lib/kdf/sp800_56c/sp800_56c.h
index 891933296..a6db91658 100644
--- a/src/lib/kdf/sp800_56c/sp800_56c.h
+++ b/src/lib/kdf/sp800_56c/sp800_56c.h
@@ -16,7 +16,7 @@ namespace Botan {
/**
* NIST SP 800-56C KDF
*/
-class BOTAN_PUBLIC_API(2,0) SP800_56C : public KDF
+class BOTAN_PUBLIC_API(2,0) SP800_56C final : public KDF
{
public:
std::string name() const override { return "SP800-56C(" + m_prf->name() + ")"; }
diff --git a/src/lib/mac/gmac/gmac.h b/src/lib/mac/gmac/gmac.h
index 6d1c6e1fe..eb14b8e11 100644
--- a/src/lib/mac/gmac/gmac.h
+++ b/src/lib/mac/gmac/gmac.h
@@ -17,7 +17,7 @@ namespace Botan {
/**
* GMAC
*/
-class BOTAN_PUBLIC_API(2,0) GMAC : public MessageAuthenticationCode, public GHASH
+class BOTAN_PUBLIC_API(2,0) GMAC final : public MessageAuthenticationCode, public GHASH
{
public:
void clear() override;
diff --git a/src/lib/math/bigint/bigint.h b/src/lib/math/bigint/bigint.h
index 0b116f3cc..9455a869b 100644
--- a/src/lib/math/bigint/bigint.h
+++ b/src/lib/math/bigint/bigint.h
@@ -22,7 +22,7 @@ class RandomNumberGenerator;
/**
* Arbitrary precision integer
*/
-class BOTAN_PUBLIC_API(2,0) BigInt
+class BOTAN_PUBLIC_API(2,0) BigInt final
{
public:
/**
@@ -38,7 +38,7 @@ class BOTAN_PUBLIC_API(2,0) BigInt
/**
* DivideByZero Exception
*/
- struct BOTAN_PUBLIC_API(2,0) DivideByZero : public Exception
+ struct BOTAN_PUBLIC_API(2,0) DivideByZero final : public Exception
{ DivideByZero() : Exception("BigInt divide by zero") {} };
/**
diff --git a/src/lib/math/ec_gfp/curve_gfp.h b/src/lib/math/ec_gfp/curve_gfp.h
index 805359ba9..a0d9bc1c7 100644
--- a/src/lib/math/ec_gfp/curve_gfp.h
+++ b/src/lib/math/ec_gfp/curve_gfp.h
@@ -50,7 +50,7 @@ class BOTAN_UNSTABLE_API CurveGFp_Repr
/**
* This class represents an elliptic curve over GF(p)
*/
-class BOTAN_PUBLIC_API(2,0) CurveGFp
+class BOTAN_PUBLIC_API(2,0) CurveGFp final
{
public:
diff --git a/src/lib/math/ec_gfp/point_gfp.h b/src/lib/math/ec_gfp/point_gfp.h
index 125fd6ccf..1d36ad2f4 100644
--- a/src/lib/math/ec_gfp/point_gfp.h
+++ b/src/lib/math/ec_gfp/point_gfp.h
@@ -19,7 +19,7 @@ namespace Botan {
* Exception thrown if you try to convert a zero point to an affine
* coordinate
*/
-struct BOTAN_PUBLIC_API(2,0) Illegal_Transformation : public Exception
+struct BOTAN_PUBLIC_API(2,0) Illegal_Transformation final : public Exception
{
explicit Illegal_Transformation(const std::string& err =
"Requested transformation is not possible") :
@@ -29,7 +29,7 @@ struct BOTAN_PUBLIC_API(2,0) Illegal_Transformation : public Exception
/**
* Exception thrown if some form of illegal point is decoded
*/
-struct BOTAN_PUBLIC_API(2,0) Illegal_Point : public Exception
+struct BOTAN_PUBLIC_API(2,0) Illegal_Point final : public Exception
{
explicit Illegal_Point(const std::string& err = "Malformed ECP point detected") :
Exception(err) {}
@@ -38,7 +38,7 @@ struct BOTAN_PUBLIC_API(2,0) Illegal_Point : public Exception
/**
* This class represents one point on a curve of GF(p)
*/
-class BOTAN_PUBLIC_API(2,0) PointGFp
+class BOTAN_PUBLIC_API(2,0) PointGFp final
{
public:
enum Compression_Type {
@@ -286,7 +286,7 @@ PointGFp OS2ECP(const std::vector<uint8_t, Alloc>& data, const CurveGFp& curve)
/**
*/
-class BOTAN_PUBLIC_API(2,0) Blinded_Point_Multiply
+class BOTAN_PUBLIC_API(2,0) Blinded_Point_Multiply final
{
public:
Blinded_Point_Multiply(const PointGFp& base, const BigInt& order, size_t h = 0);
diff --git a/src/lib/math/numbertheory/def_powm.h b/src/lib/math/numbertheory/def_powm.h
index f284739e4..826ffb49f 100644
--- a/src/lib/math/numbertheory/def_powm.h
+++ b/src/lib/math/numbertheory/def_powm.h
@@ -17,7 +17,7 @@ namespace Botan {
/**
* Fixed Window Exponentiator
*/
-class Fixed_Window_Exponentiator : public Modular_Exponentiator
+class Fixed_Window_Exponentiator final : public Modular_Exponentiator
{
public:
void set_exponent(const BigInt&) override;
@@ -39,7 +39,7 @@ class Fixed_Window_Exponentiator : public Modular_Exponentiator
/**
* Montgomery Exponentiator
*/
-class Montgomery_Exponentiator : public Modular_Exponentiator
+class Montgomery_Exponentiator final : public Modular_Exponentiator
{
public:
void set_exponent(const BigInt&) override;
diff --git a/src/lib/math/numbertheory/pow_mod.h b/src/lib/math/numbertheory/pow_mod.h
index 0739b0736..7613c2ddf 100644
--- a/src/lib/math/numbertheory/pow_mod.h
+++ b/src/lib/math/numbertheory/pow_mod.h
@@ -101,7 +101,7 @@ class BOTAN_PUBLIC_API(2,0) Power_Mod
/**
* Fixed Exponent Modular Exponentiator Proxy
*/
-class BOTAN_PUBLIC_API(2,0) Fixed_Exponent_Power_Mod : public Power_Mod
+class BOTAN_PUBLIC_API(2,0) Fixed_Exponent_Power_Mod final : public Power_Mod
{
public:
BigInt operator()(const BigInt& b) const
@@ -117,7 +117,7 @@ class BOTAN_PUBLIC_API(2,0) Fixed_Exponent_Power_Mod : public Power_Mod
/**
* Fixed Base Modular Exponentiator Proxy
*/
-class BOTAN_PUBLIC_API(2,0) Fixed_Base_Power_Mod : public Power_Mod
+class BOTAN_PUBLIC_API(2,0) Fixed_Base_Power_Mod final : public Power_Mod
{
public:
BigInt operator()(const BigInt& e) const
diff --git a/src/lib/misc/fpe_fe1/fpe_fe1.cpp b/src/lib/misc/fpe_fe1/fpe_fe1.cpp
index 72e154374..41a0cc606 100644
--- a/src/lib/misc/fpe_fe1/fpe_fe1.cpp
+++ b/src/lib/misc/fpe_fe1/fpe_fe1.cpp
@@ -75,7 +75,7 @@ size_t rounds(const BigInt& a, const BigInt& b)
/*
* A simple round function based on HMAC(SHA-256)
*/
-class FPE_Encryptor
+class FPE_Encryptor final
{
public:
FPE_Encryptor(const SymmetricKey& key,
diff --git a/src/lib/misc/hotp/hotp.h b/src/lib/misc/hotp/hotp.h
index 8d10357b9..481e404eb 100644
--- a/src/lib/misc/hotp/hotp.h
+++ b/src/lib/misc/hotp/hotp.h
@@ -15,7 +15,7 @@ namespace Botan {
/**
* HOTP one time passwords (RFC 4226)
*/
-class BOTAN_PUBLIC_API(2,2) HOTP
+class BOTAN_PUBLIC_API(2,2) HOTP final
{
public:
/**
diff --git a/src/lib/misc/hotp/totp.h b/src/lib/misc/hotp/totp.h
index 55ff93a5e..4ef74d363 100644
--- a/src/lib/misc/hotp/totp.h
+++ b/src/lib/misc/hotp/totp.h
@@ -15,7 +15,7 @@ namespace Botan {
/**
* TOTP (time based) one time passwords (RFC 6238)
*/
-class BOTAN_PUBLIC_API(2,2) TOTP
+class BOTAN_PUBLIC_API(2,2) TOTP final
{
public:
/**
diff --git a/src/lib/misc/srp6/srp6.h b/src/lib/misc/srp6/srp6.h
index 464b67252..ad880946a 100644
--- a/src/lib/misc/srp6/srp6.h
+++ b/src/lib/misc/srp6/srp6.h
@@ -63,7 +63,7 @@ std::string BOTAN_PUBLIC_API(2,0) srp6_group_identifier(const BigInt& N, const B
/**
* Represents a SRP-6a server session
*/
-class BOTAN_PUBLIC_API(2,0) SRP6_Server_Session
+class BOTAN_PUBLIC_API(2,0) SRP6_Server_Session final
{
public:
/**
diff --git a/src/lib/misc/tss/tss.h b/src/lib/misc/tss/tss.h
index d1fd15f24..4a5a5571d 100644
--- a/src/lib/misc/tss/tss.h
+++ b/src/lib/misc/tss/tss.h
@@ -18,7 +18,7 @@ class RandomNumberGenerator;
/**
* A split secret, using the format from draft-mcgrew-tss-03
*/
-class BOTAN_PUBLIC_API(2,0) RTSS_Share
+class BOTAN_PUBLIC_API(2,0) RTSS_Share final
{
public:
/**
diff --git a/src/lib/modes/aead/ocb/ocb.cpp b/src/lib/modes/aead/ocb/ocb.cpp
index 6644b4935..e885eb5bc 100644
--- a/src/lib/modes/aead/ocb/ocb.cpp
+++ b/src/lib/modes/aead/ocb/ocb.cpp
@@ -14,7 +14,7 @@
namespace Botan {
// Has to be in Botan namespace so unique_ptr can reference it
-class L_computer
+class L_computer final
{
public:
explicit L_computer(const BlockCipher& cipher)
diff --git a/src/lib/modes/stream_mode.h b/src/lib/modes/stream_mode.h
index 003a396fd..1f0fb29d2 100644
--- a/src/lib/modes/stream_mode.h
+++ b/src/lib/modes/stream_mode.h
@@ -13,7 +13,7 @@
namespace Botan {
-class BOTAN_PUBLIC_API(2,0) Stream_Cipher_Mode : public Cipher_Mode
+class BOTAN_PUBLIC_API(2,0) Stream_Cipher_Mode final : public Cipher_Mode
{
public:
/**
diff --git a/src/lib/pk_pad/emsa1/emsa1.h b/src/lib/pk_pad/emsa1/emsa1.h
index 1d682f7f1..98c040b2b 100644
--- a/src/lib/pk_pad/emsa1/emsa1.h
+++ b/src/lib/pk_pad/emsa1/emsa1.h
@@ -17,7 +17,7 @@ namespace Botan {
* EMSA1 from IEEE 1363
* Essentially, sign the hash directly
*/
-class BOTAN_PUBLIC_API(2,0) EMSA1 : public EMSA
+class BOTAN_PUBLIC_API(2,0) EMSA1 final : public EMSA
{
public:
/**
diff --git a/src/lib/prov/bearssl/bearssl.h b/src/lib/prov/bearssl/bearssl.h
index f4def013b..e6d77fcfa 100644
--- a/src/lib/prov/bearssl/bearssl.h
+++ b/src/lib/prov/bearssl/bearssl.h
@@ -19,7 +19,7 @@ namespace Botan {
class HashFunction;
-class BearSSL_Error : public Exception
+class BearSSL_Error final : public Exception
{
public:
BearSSL_Error(const std::string& what) :
diff --git a/src/lib/prov/bearssl/bearssl_ec.cpp b/src/lib/prov/bearssl/bearssl_ec.cpp
index fe661f357..7a0808c47 100644
--- a/src/lib/prov/bearssl/bearssl_ec.cpp
+++ b/src/lib/prov/bearssl/bearssl_ec.cpp
@@ -73,7 +73,7 @@ const br_hash_class *BearSSL_hash_class_for(const std::string& emsa)
namespace {
-class BearSSL_ECDSA_Verification_Operation : public PK_Ops::Verification
+class BearSSL_ECDSA_Verification_Operation final : public PK_Ops::Verification
{
public:
BearSSL_ECDSA_Verification_Operation(const ECDSA_PublicKey& ecdsa, const std::string& emsa) :
@@ -132,7 +132,7 @@ class BearSSL_ECDSA_Verification_Operation : public PK_Ops::Verification
size_t m_order_bits;
};
-class BearSSL_ECDSA_Signing_Operation : public PK_Ops::Signature
+class BearSSL_ECDSA_Signing_Operation final : public PK_Ops::Signature
{
public:
BearSSL_ECDSA_Signing_Operation(const ECDSA_PrivateKey& ecdsa, const std::string& emsa) :
diff --git a/src/lib/prov/bearssl/bearssl_hash.cpp b/src/lib/prov/bearssl/bearssl_hash.cpp
index 9620d6d70..a0eb845f1 100644
--- a/src/lib/prov/bearssl/bearssl_hash.cpp
+++ b/src/lib/prov/bearssl/bearssl_hash.cpp
@@ -18,7 +18,7 @@ namespace Botan {
namespace {
-class BearSSL_HashFunction : public HashFunction
+class BearSSL_HashFunction final : public HashFunction
{
public:
void clear() override
diff --git a/src/lib/prov/openssl/openssl.h b/src/lib/prov/openssl/openssl.h
index 5a81f878d..89bd0b1a7 100644
--- a/src/lib/prov/openssl/openssl.h
+++ b/src/lib/prov/openssl/openssl.h
@@ -30,7 +30,7 @@ class HashFunction;
class RandomNumberGenerator;
enum Cipher_Dir : int;
-class OpenSSL_Error : public Exception
+class OpenSSL_Error final : public Exception
{
public:
OpenSSL_Error(const std::string& what) :
diff --git a/src/lib/prov/openssl/openssl_block.cpp b/src/lib/prov/openssl/openssl_block.cpp
index 122678b6d..83e0e960d 100644
--- a/src/lib/prov/openssl/openssl_block.cpp
+++ b/src/lib/prov/openssl/openssl_block.cpp
@@ -13,7 +13,7 @@ namespace Botan {
namespace {
-class OpenSSL_BlockCipher : public BlockCipher
+class OpenSSL_BlockCipher final : public BlockCipher
{
public:
OpenSSL_BlockCipher(const std::string& name,
diff --git a/src/lib/prov/openssl/openssl_ec.cpp b/src/lib/prov/openssl/openssl_ec.cpp
index 4d26661ac..66c3d286b 100644
--- a/src/lib/prov/openssl/openssl_ec.cpp
+++ b/src/lib/prov/openssl/openssl_ec.cpp
@@ -132,7 +132,7 @@ int OpenSSL_EC_nid_for(const OID& oid)
namespace {
-class OpenSSL_ECDSA_Verification_Operation : public PK_Ops::Verification_with_EMSA
+class OpenSSL_ECDSA_Verification_Operation final : public PK_Ops::Verification_with_EMSA
{
public:
OpenSSL_ECDSA_Verification_Operation(const ECDSA_PublicKey& ecdsa, const std::string& emsa, int nid) :
@@ -194,7 +194,7 @@ class OpenSSL_ECDSA_Verification_Operation : public PK_Ops::Verification_with_EM
size_t m_order_bits = 0;
};
-class OpenSSL_ECDSA_Signing_Operation : public PK_Ops::Signature_with_EMSA
+class OpenSSL_ECDSA_Signing_Operation final : public PK_Ops::Signature_with_EMSA
{
public:
OpenSSL_ECDSA_Signing_Operation(const ECDSA_PrivateKey& ecdsa, const std::string& emsa) :
@@ -276,7 +276,7 @@ make_openssl_ecdsa_sig_op(const ECDSA_PrivateKey& key, const std::string& params
namespace {
-class OpenSSL_ECDH_KA_Operation : public PK_Ops::Key_Agreement_with_KDF
+class OpenSSL_ECDH_KA_Operation final : public PK_Ops::Key_Agreement_with_KDF
{
public:
diff --git a/src/lib/prov/openssl/openssl_hash.cpp b/src/lib/prov/openssl/openssl_hash.cpp
index 16b1a79fe..1b7bbb19b 100644
--- a/src/lib/prov/openssl/openssl_hash.cpp
+++ b/src/lib/prov/openssl/openssl_hash.cpp
@@ -14,7 +14,7 @@ namespace Botan {
namespace {
-class OpenSSL_HashFunction : public HashFunction
+class OpenSSL_HashFunction final : public HashFunction
{
public:
void clear() override
diff --git a/src/lib/prov/openssl/openssl_mode.cpp b/src/lib/prov/openssl/openssl_mode.cpp
index e056dda16..9580bc9c5 100644
--- a/src/lib/prov/openssl/openssl_mode.cpp
+++ b/src/lib/prov/openssl/openssl_mode.cpp
@@ -15,7 +15,7 @@ namespace Botan {
namespace {
-class OpenSSL_Cipher_Mode : public Cipher_Mode
+class OpenSSL_Cipher_Mode final : public Cipher_Mode
{
public:
OpenSSL_Cipher_Mode(const std::string& name,
diff --git a/src/lib/prov/openssl/openssl_rc4.cpp b/src/lib/prov/openssl/openssl_rc4.cpp
index 9cca7fdd1..5fb2a68f5 100644
--- a/src/lib/prov/openssl/openssl_rc4.cpp
+++ b/src/lib/prov/openssl/openssl_rc4.cpp
@@ -18,7 +18,7 @@ namespace Botan {
namespace {
-class OpenSSL_RC4 : public StreamCipher
+class OpenSSL_RC4 final : public StreamCipher
{
public:
void clear() override { clear_mem(&m_rc4, 1); }
diff --git a/src/lib/prov/openssl/openssl_rsa.cpp b/src/lib/prov/openssl/openssl_rsa.cpp
index b1c73d851..a7ba6e3e9 100644
--- a/src/lib/prov/openssl/openssl_rsa.cpp
+++ b/src/lib/prov/openssl/openssl_rsa.cpp
@@ -39,7 +39,7 @@ std::pair<int, size_t> get_openssl_enc_pad(const std::string& eme)
throw Lookup_Error("OpenSSL RSA does not support EME " + eme);
}
-class OpenSSL_RSA_Encryption_Operation : public PK_Ops::Encryption
+class OpenSSL_RSA_Encryption_Operation final : public PK_Ops::Encryption
{
public:
@@ -94,7 +94,7 @@ class OpenSSL_RSA_Encryption_Operation : public PK_Ops::Encryption
int m_padding = 0;
};
-class OpenSSL_RSA_Decryption_Operation : public PK_Ops::Decryption
+class OpenSSL_RSA_Decryption_Operation final : public PK_Ops::Decryption
{
public:
@@ -137,7 +137,7 @@ class OpenSSL_RSA_Decryption_Operation : public PK_Ops::Decryption
int m_padding = 0;
};
-class OpenSSL_RSA_Verification_Operation : public PK_Ops::Verification_with_EMSA
+class OpenSSL_RSA_Verification_Operation final : public PK_Ops::Verification_with_EMSA
{
public:
@@ -188,7 +188,7 @@ class OpenSSL_RSA_Verification_Operation : public PK_Ops::Verification_with_EMSA
std::unique_ptr<RSA, std::function<void (RSA*)>> m_openssl_rsa;
};
-class OpenSSL_RSA_Signing_Operation : public PK_Ops::Signature_with_EMSA
+class OpenSSL_RSA_Signing_Operation final : public PK_Ops::Signature_with_EMSA
{
public:
diff --git a/src/lib/prov/pkcs11/p11.h b/src/lib/prov/pkcs11/p11.h
index 520602b6d..50294d214 100644
--- a/src/lib/prov/pkcs11/p11.h
+++ b/src/lib/prov/pkcs11/p11.h
@@ -2830,7 +2830,7 @@ class PKCS11_Error : public Exception
}
};
-class PKCS11_ReturnError : public PKCS11_Error
+class PKCS11_ReturnError final : public PKCS11_Error
{
public:
explicit PKCS11_ReturnError(ReturnValue return_val) :
diff --git a/src/lib/prov/pkcs11/p11_ecdh.cpp b/src/lib/prov/pkcs11/p11_ecdh.cpp
index 5ec5c063d..d7b0fae5c 100644
--- a/src/lib/prov/pkcs11/p11_ecdh.cpp
+++ b/src/lib/prov/pkcs11/p11_ecdh.cpp
@@ -38,7 +38,7 @@ secure_vector<uint8_t> PKCS11_ECDH_PrivateKey::private_key_bits() const
}
namespace {
-class PKCS11_ECDH_KA_Operation : public PK_Ops::Key_Agreement
+class PKCS11_ECDH_KA_Operation final : public PK_Ops::Key_Agreement
{
public:
PKCS11_ECDH_KA_Operation(const PKCS11_EC_PrivateKey& key, const std::string& params)
diff --git a/src/lib/prov/pkcs11/p11_ecdh.h b/src/lib/prov/pkcs11/p11_ecdh.h
index d95966a97..203e5ea5f 100644
--- a/src/lib/prov/pkcs11/p11_ecdh.h
+++ b/src/lib/prov/pkcs11/p11_ecdh.h
@@ -24,7 +24,7 @@ namespace PKCS11 {
class Session;
/// Represents a PKCS#11 ECDH public key
-class BOTAN_PUBLIC_API(2,0) PKCS11_ECDH_PublicKey final : public PKCS11_EC_PublicKey
+class BOTAN_PUBLIC_API(2,0) PKCS11_ECDH_PublicKey : public PKCS11_EC_PublicKey
{
public:
/**
diff --git a/src/lib/prov/pkcs11/p11_ecdsa.cpp b/src/lib/prov/pkcs11/p11_ecdsa.cpp
index 5be66caaf..a93e761b1 100644
--- a/src/lib/prov/pkcs11/p11_ecdsa.cpp
+++ b/src/lib/prov/pkcs11/p11_ecdsa.cpp
@@ -54,7 +54,7 @@ secure_vector<uint8_t> PKCS11_ECDSA_PrivateKey::private_key_bits() const
namespace {
-class PKCS11_ECDSA_Signature_Operation : public PK_Ops::Signature
+class PKCS11_ECDSA_Signature_Operation final : public PK_Ops::Signature
{
public:
PKCS11_ECDSA_Signature_Operation(const PKCS11_EC_PrivateKey& key, const std::string& emsa)
@@ -109,7 +109,7 @@ class PKCS11_ECDSA_Signature_Operation : public PK_Ops::Signature
};
-class PKCS11_ECDSA_Verification_Operation : public PK_Ops::Verification
+class PKCS11_ECDSA_Verification_Operation final : public PK_Ops::Verification
{
public:
PKCS11_ECDSA_Verification_Operation(const PKCS11_EC_PublicKey& key, const std::string& emsa)
diff --git a/src/lib/prov/pkcs11/p11_mechanism.cpp b/src/lib/prov/pkcs11/p11_mechanism.cpp
index 1621317cc..01c38ded5 100644
--- a/src/lib/prov/pkcs11/p11_mechanism.cpp
+++ b/src/lib/prov/pkcs11/p11_mechanism.cpp
@@ -44,7 +44,7 @@ struct MechanismData
MechanismType type;
};
-struct RSA_SignMechanism : public MechanismData
+struct RSA_SignMechanism final : public MechanismData
{
explicit RSA_SignMechanism(MechanismType _type)
: MechanismData(_type), hash(static_cast<MechanismType>(0)), mgf(static_cast<MGF>(0)), salt_size(0)
@@ -97,7 +97,7 @@ static std::map<std::string, RSA_SignMechanism> SignMechanisms =
{ "ISO9796", RSA_SignMechanism(MechanismType::Rsa9796) }
};
-struct RSA_CryptMechanism : public MechanismData
+struct RSA_CryptMechanism final : public MechanismData
{
RSA_CryptMechanism(MechanismType _type, size_t _padding_size, MechanismType _hash, MGF _mgf)
: MechanismData(_type), hash(_hash), mgf(_mgf), padding_size(_padding_size)
diff --git a/src/lib/prov/pkcs11/p11_object.h b/src/lib/prov/pkcs11/p11_object.h
index 9f9674949..b49f8e473 100644
--- a/src/lib/prov/pkcs11/p11_object.h
+++ b/src/lib/prov/pkcs11/p11_object.h
@@ -237,7 +237,7 @@ class BOTAN_PUBLIC_API(2,0) StorageObjectProperties : public ObjectProperties
};
/// Common attributes of all data objects
-class BOTAN_PUBLIC_API(2,0) DataObjectProperties : public StorageObjectProperties
+class BOTAN_PUBLIC_API(2,0) DataObjectProperties final : public StorageObjectProperties
{
public:
DataObjectProperties();
@@ -514,7 +514,7 @@ class BOTAN_PUBLIC_API(2,0) PrivateKeyProperties : public KeyProperties
};
/// Common attributes of all secret (symmetric) keys
-class BOTAN_PUBLIC_API(2,0) SecretKeyProperties : public KeyProperties
+class BOTAN_PUBLIC_API(2,0) SecretKeyProperties final : public KeyProperties
{
public:
/// @param key_type type of key
@@ -619,7 +619,7 @@ class BOTAN_PUBLIC_API(2,0) SecretKeyProperties : public KeyProperties
};
/// Common attributes of domain parameter
-class BOTAN_PUBLIC_API(2,0) DomainParameterProperties : public StorageObjectProperties
+class BOTAN_PUBLIC_API(2,0) DomainParameterProperties final : public StorageObjectProperties
{
public:
/// @param key_type type of key the domain parameters can be used to generate
diff --git a/src/lib/prov/pkcs11/p11_rsa.cpp b/src/lib/prov/pkcs11/p11_rsa.cpp
index 8332a945f..e81bda568 100644
--- a/src/lib/prov/pkcs11/p11_rsa.cpp
+++ b/src/lib/prov/pkcs11/p11_rsa.cpp
@@ -164,7 +164,7 @@ class PKCS11_RSA_Decryption_Operation final : public PK_Ops::Decryption
// note: multiple-part encryption operations (with C_EncryptUpdate/C_EncryptFinal)
// are not supported (PK_Ops::Encryption does not provide an `update` method)
-class PKCS11_RSA_Encryption_Operation : public PK_Ops::Encryption
+class PKCS11_RSA_Encryption_Operation final : public PK_Ops::Encryption
{
public:
@@ -195,7 +195,7 @@ class PKCS11_RSA_Encryption_Operation : public PK_Ops::Encryption
};
-class PKCS11_RSA_Signature_Operation : public PK_Ops::Signature
+class PKCS11_RSA_Signature_Operation final : public PK_Ops::Signature
{
public:
@@ -250,7 +250,7 @@ class PKCS11_RSA_Signature_Operation : public PK_Ops::Signature
};
-class PKCS11_RSA_Verification_Operation : public PK_Ops::Verification
+class PKCS11_RSA_Verification_Operation final : public PK_Ops::Verification
{
public:
diff --git a/src/lib/prov/pkcs11/p11_rsa.h b/src/lib/prov/pkcs11/p11_rsa.h
index ba35db240..a4f3a04d7 100644
--- a/src/lib/prov/pkcs11/p11_rsa.h
+++ b/src/lib/prov/pkcs11/p11_rsa.h
@@ -62,7 +62,7 @@ class BOTAN_PUBLIC_API(2,0) RSA_PublicKeyImportProperties final : public PublicK
};
/// Represents a PKCS#11 RSA public key
-class BOTAN_PUBLIC_API(2,0) PKCS11_RSA_PublicKey final : public RSA_PublicKey,
+class BOTAN_PUBLIC_API(2,0) PKCS11_RSA_PublicKey : public RSA_PublicKey,
public Object
{
public:
diff --git a/src/lib/prov/tpm/tpm.cpp b/src/lib/prov/tpm/tpm.cpp
index 8e3fce968..ccc6e9958 100644
--- a/src/lib/prov/tpm/tpm.cpp
+++ b/src/lib/prov/tpm/tpm.cpp
@@ -383,7 +383,7 @@ bool TPM_PrivateKey::check_key(RandomNumberGenerator&, bool) const
namespace {
-class TPM_Signing_Operation : public PK_Ops::Signature
+class TPM_Signing_Operation final : public PK_Ops::Signature
{
public:
TPM_Signing_Operation(const TPM_PrivateKey& key,
diff --git a/src/lib/prov/tpm/tpm.h b/src/lib/prov/tpm/tpm.h
index 2e67a4a5b..fb4f027d5 100644
--- a/src/lib/prov/tpm/tpm.h
+++ b/src/lib/prov/tpm/tpm.h
@@ -14,13 +14,14 @@
#include <botan/bigint.h>
#include <botan/rng.h>
#include <botan/uuid.h>
+#include <functional>
//TODO remove this
#include <tss/tspi.h>
namespace Botan {
-class TPM_Error : public Exception
+class TPM_Error final : public Exception
{
public:
TPM_Error(const std::string& err) : Exception(err) {}
@@ -36,7 +37,7 @@ class TPM_Error : public Exception
*
* TODO: handling owner password?
*/
-class BOTAN_PUBLIC_API(2,0) TPM_Context
+class BOTAN_PUBLIC_API(2,0) TPM_Context final
{
public:
/**
@@ -72,7 +73,7 @@ class BOTAN_PUBLIC_API(2,0) TPM_Context
TSS_HTPM m_tpm;
};
-class BOTAN_PUBLIC_API(2,0) TPM_RNG : public Hardware_RNG
+class BOTAN_PUBLIC_API(2,0) TPM_RNG final : public Hardware_RNG
{
public:
TPM_RNG(TPM_Context& ctx) : m_ctx(ctx) {}
@@ -103,7 +104,7 @@ enum class TPM_Storage_Type { User, System };
* Also implements the public interface, but does not have usable
* TODO: derive from RSA_PublicKey???
*/
-class BOTAN_PUBLIC_API(2,0) TPM_PrivateKey : public Private_Key
+class BOTAN_PUBLIC_API(2,0) TPM_PrivateKey final : public Private_Key
{
public:
// TODO: key import?
diff --git a/src/lib/prov/tpm/uuid.h b/src/lib/prov/tpm/uuid.h
index 08eb454bb..2c89d45b4 100644
--- a/src/lib/prov/tpm/uuid.h
+++ b/src/lib/prov/tpm/uuid.h
@@ -15,7 +15,7 @@
namespace Botan {
// TODO: move to util?
-class UUID
+class UUID final
{
public:
// Represents an unassigned UUID object
diff --git a/src/lib/pubkey/blinding.h b/src/lib/pubkey/blinding.h
index fc7cabe7a..1c3fb1444 100644
--- a/src/lib/pubkey/blinding.h
+++ b/src/lib/pubkey/blinding.h
@@ -19,7 +19,7 @@ class RandomNumberGenerator;
/**
* Blinding Function Object.
*/
-class BOTAN_PUBLIC_API(2,0) Blinder
+class BOTAN_PUBLIC_API(2,0) Blinder final
{
public:
/**
diff --git a/src/lib/pubkey/cecpq1/cecpq1.h b/src/lib/pubkey/cecpq1/cecpq1.h
index 535cb49b7..a722899c6 100644
--- a/src/lib/pubkey/cecpq1/cecpq1.h
+++ b/src/lib/pubkey/cecpq1/cecpq1.h
@@ -13,7 +13,7 @@
namespace Botan {
-class CECPQ1_key
+class CECPQ1_key final
{
public:
secure_vector<uint8_t> m_x25519;
diff --git a/src/lib/pubkey/curve25519/curve25519.cpp b/src/lib/pubkey/curve25519/curve25519.cpp
index 7776c6550..2d07f67ab 100644
--- a/src/lib/pubkey/curve25519/curve25519.cpp
+++ b/src/lib/pubkey/curve25519/curve25519.cpp
@@ -112,7 +112,7 @@ namespace {
/**
* Curve25519 operation
*/
-class Curve25519_KA_Operation : public PK_Ops::Key_Agreement_with_KDF
+class Curve25519_KA_Operation final : public PK_Ops::Key_Agreement_with_KDF
{
public:
diff --git a/src/lib/pubkey/curve25519/curve25519.h b/src/lib/pubkey/curve25519/curve25519.h
index 9f2136a69..1e06fae67 100644
--- a/src/lib/pubkey/curve25519/curve25519.h
+++ b/src/lib/pubkey/curve25519/curve25519.h
@@ -55,7 +55,7 @@ class BOTAN_PUBLIC_API(2,0) Curve25519_PublicKey : public virtual Public_Key
std::vector<uint8_t> m_public;
};
-class BOTAN_PUBLIC_API(2,0) Curve25519_PrivateKey : public Curve25519_PublicKey,
+class BOTAN_PUBLIC_API(2,0) Curve25519_PrivateKey final : public Curve25519_PublicKey,
public virtual Private_Key,
public virtual PK_Key_Agreement_Key
{
diff --git a/src/lib/pubkey/dh/dh.cpp b/src/lib/pubkey/dh/dh.cpp
index 25c5f5cf4..2a7742738 100644
--- a/src/lib/pubkey/dh/dh.cpp
+++ b/src/lib/pubkey/dh/dh.cpp
@@ -79,7 +79,7 @@ namespace {
/**
* DH operation
*/
-class DH_KA_Operation : public PK_Ops::Key_Agreement_with_KDF
+class DH_KA_Operation final : public PK_Ops::Key_Agreement_with_KDF
{
public:
diff --git a/src/lib/pubkey/dh/dh.h b/src/lib/pubkey/dh/dh.h
index a252f7a80..e3aa0d2c5 100644
--- a/src/lib/pubkey/dh/dh.h
+++ b/src/lib/pubkey/dh/dh.h
@@ -46,7 +46,7 @@ class BOTAN_PUBLIC_API(2,0) DH_PublicKey : public virtual DL_Scheme_PublicKey
/**
* This class represents Diffie-Hellman private keys.
*/
-class BOTAN_PUBLIC_API(2,0) DH_PrivateKey : public DH_PublicKey,
+class BOTAN_PUBLIC_API(2,0) DH_PrivateKey final : public DH_PublicKey,
public PK_Key_Agreement_Key,
public virtual DL_Scheme_PrivateKey
{
diff --git a/src/lib/pubkey/dl_group/dl_group.h b/src/lib/pubkey/dl_group/dl_group.h
index 4ec9962d7..24b829bd9 100644
--- a/src/lib/pubkey/dl_group/dl_group.h
+++ b/src/lib/pubkey/dl_group/dl_group.h
@@ -16,7 +16,7 @@ namespace Botan {
* This class represents discrete logarithm groups. It holds a prime p,
* a prime q = (p-1)/2 and g = x^((p-1)/q) mod p.
*/
-class BOTAN_PUBLIC_API(2,0) DL_Group
+class BOTAN_PUBLIC_API(2,0) DL_Group final
{
public:
diff --git a/src/lib/pubkey/dlies/dlies.h b/src/lib/pubkey/dlies/dlies.h
index 471d29999..8fa673491 100644
--- a/src/lib/pubkey/dlies/dlies.h
+++ b/src/lib/pubkey/dlies/dlies.h
@@ -20,7 +20,7 @@ namespace Botan {
/**
* DLIES Encryption
*/
-class BOTAN_PUBLIC_API(2,0) DLIES_Encryptor : public PK_Encryptor
+class BOTAN_PUBLIC_API(2,0) DLIES_Encryptor final : public PK_Encryptor
{
public:
/**
@@ -93,7 +93,7 @@ class BOTAN_PUBLIC_API(2,0) DLIES_Encryptor : public PK_Encryptor
/**
* DLIES Decryption
*/
-class BOTAN_PUBLIC_API(2,0) DLIES_Decryptor : public PK_Decryptor
+class BOTAN_PUBLIC_API(2,0) DLIES_Decryptor final : public PK_Decryptor
{
public:
/**
diff --git a/src/lib/pubkey/dsa/dsa.cpp b/src/lib/pubkey/dsa/dsa.cpp
index 706722d72..532ede5d6 100644
--- a/src/lib/pubkey/dsa/dsa.cpp
+++ b/src/lib/pubkey/dsa/dsa.cpp
@@ -75,7 +75,7 @@ namespace {
/**
* Object that can create a DSA signature
*/
-class DSA_Signature_Operation : public PK_Ops::Signature_with_EMSA
+class DSA_Signature_Operation final : public PK_Ops::Signature_with_EMSA
{
public:
DSA_Signature_Operation(const DSA_PrivateKey& dsa, const std::string& emsa) :
@@ -143,7 +143,7 @@ DSA_Signature_Operation::raw_sign(const uint8_t msg[], size_t msg_len,
/**
* Object that can verify a DSA signature
*/
-class DSA_Verification_Operation : public PK_Ops::Verification_with_EMSA
+class DSA_Verification_Operation final : public PK_Ops::Verification_with_EMSA
{
public:
DSA_Verification_Operation(const DSA_PublicKey& dsa,
diff --git a/src/lib/pubkey/dsa/dsa.h b/src/lib/pubkey/dsa/dsa.h
index dc53d4801..b219a1cf3 100644
--- a/src/lib/pubkey/dsa/dsa.h
+++ b/src/lib/pubkey/dsa/dsa.h
@@ -52,7 +52,7 @@ class BOTAN_PUBLIC_API(2,0) DSA_PublicKey : public virtual DL_Scheme_PublicKey
/**
* DSA Private Key
*/
-class BOTAN_PUBLIC_API(2,0) DSA_PrivateKey : public DSA_PublicKey,
+class BOTAN_PUBLIC_API(2,0) DSA_PrivateKey final : public DSA_PublicKey,
public virtual DL_Scheme_PrivateKey
{
public:
diff --git a/src/lib/pubkey/ec_group/ec_group.h b/src/lib/pubkey/ec_group/ec_group.h
index 028ec1b32..ccd69a4dc 100644
--- a/src/lib/pubkey/ec_group/ec_group.h
+++ b/src/lib/pubkey/ec_group/ec_group.h
@@ -28,7 +28,7 @@ enum EC_Group_Encoding {
/**
* Class representing an elliptic curve
*/
-class BOTAN_PUBLIC_API(2,0) EC_Group
+class BOTAN_PUBLIC_API(2,0) EC_Group final
{
public:
diff --git a/src/lib/pubkey/ecdh/ecdh.cpp b/src/lib/pubkey/ecdh/ecdh.cpp
index 799e8aac9..c05f22d1b 100644
--- a/src/lib/pubkey/ecdh/ecdh.cpp
+++ b/src/lib/pubkey/ecdh/ecdh.cpp
@@ -22,7 +22,7 @@ namespace {
/**
* ECDH operation
*/
-class ECDH_KA_Operation : public PK_Ops::Key_Agreement_with_KDF
+class ECDH_KA_Operation final : public PK_Ops::Key_Agreement_with_KDF
{
public:
diff --git a/src/lib/pubkey/ecdh/ecdh.h b/src/lib/pubkey/ecdh/ecdh.h
index 6ae155bc4..d967c749f 100644
--- a/src/lib/pubkey/ecdh/ecdh.h
+++ b/src/lib/pubkey/ecdh/ecdh.h
@@ -63,7 +63,7 @@ class BOTAN_PUBLIC_API(2,0) ECDH_PublicKey : public virtual EC_PublicKey
/**
* This class represents ECDH Private Keys.
*/
-class BOTAN_PUBLIC_API(2,0) ECDH_PrivateKey : public ECDH_PublicKey,
+class BOTAN_PUBLIC_API(2,0) ECDH_PrivateKey final : public ECDH_PublicKey,
public EC_PrivateKey,
public PK_Key_Agreement_Key
{
diff --git a/src/lib/pubkey/ecdsa/ecdsa.cpp b/src/lib/pubkey/ecdsa/ecdsa.cpp
index 8b0248770..96bc50ec0 100644
--- a/src/lib/pubkey/ecdsa/ecdsa.cpp
+++ b/src/lib/pubkey/ecdsa/ecdsa.cpp
@@ -45,7 +45,7 @@ namespace {
/**
* ECDSA signature operation
*/
-class ECDSA_Signature_Operation : public PK_Ops::Signature_with_EMSA
+class ECDSA_Signature_Operation final : public PK_Ops::Signature_with_EMSA
{
public:
@@ -103,7 +103,7 @@ ECDSA_Signature_Operation::raw_sign(const uint8_t msg[], size_t msg_len,
/**
* ECDSA verification operation
*/
-class ECDSA_Verification_Operation : public PK_Ops::Verification_with_EMSA
+class ECDSA_Verification_Operation final : public PK_Ops::Verification_with_EMSA
{
public:
ECDSA_Verification_Operation(const ECDSA_PublicKey& ecdsa,
diff --git a/src/lib/pubkey/ecdsa/ecdsa.h b/src/lib/pubkey/ecdsa/ecdsa.h
index 09968d687..2929059c5 100644
--- a/src/lib/pubkey/ecdsa/ecdsa.h
+++ b/src/lib/pubkey/ecdsa/ecdsa.h
@@ -60,7 +60,7 @@ class BOTAN_PUBLIC_API(2,0) ECDSA_PublicKey : public virtual EC_PublicKey
/**
* This class represents ECDSA Private Keys
*/
-class BOTAN_PUBLIC_API(2,0) ECDSA_PrivateKey : public ECDSA_PublicKey,
+class BOTAN_PUBLIC_API(2,0) ECDSA_PrivateKey final : public ECDSA_PublicKey,
public EC_PrivateKey
{
public:
diff --git a/src/lib/pubkey/ecgdsa/ecgdsa.cpp b/src/lib/pubkey/ecgdsa/ecgdsa.cpp
index eb979cc1c..e5e17623f 100644
--- a/src/lib/pubkey/ecgdsa/ecgdsa.cpp
+++ b/src/lib/pubkey/ecgdsa/ecgdsa.cpp
@@ -29,7 +29,7 @@ namespace {
/**
* ECGDSA signature operation
*/
-class ECGDSA_Signature_Operation : public PK_Ops::Signature_with_EMSA
+class ECGDSA_Signature_Operation final : public PK_Ops::Signature_with_EMSA
{
public:
@@ -77,7 +77,7 @@ ECGDSA_Signature_Operation::raw_sign(const uint8_t msg[], size_t msg_len,
/**
* ECGDSA verification operation
*/
-class ECGDSA_Verification_Operation : public PK_Ops::Verification_with_EMSA
+class ECGDSA_Verification_Operation final : public PK_Ops::Verification_with_EMSA
{
public:
diff --git a/src/lib/pubkey/ecgdsa/ecgdsa.h b/src/lib/pubkey/ecgdsa/ecgdsa.h
index c34b2ce56..31d0e2be5 100644
--- a/src/lib/pubkey/ecgdsa/ecgdsa.h
+++ b/src/lib/pubkey/ecgdsa/ecgdsa.h
@@ -58,7 +58,7 @@ class BOTAN_PUBLIC_API(2,0) ECGDSA_PublicKey : public virtual EC_PublicKey
/**
* This class represents ECGDSA private keys.
*/
-class BOTAN_PUBLIC_API(2,0) ECGDSA_PrivateKey : public ECGDSA_PublicKey,
+class BOTAN_PUBLIC_API(2,0) ECGDSA_PrivateKey final : public ECGDSA_PublicKey,
public EC_PrivateKey
{
public:
diff --git a/src/lib/pubkey/ecies/ecies.cpp b/src/lib/pubkey/ecies/ecies.cpp
index e295efbef..39eb08afe 100644
--- a/src/lib/pubkey/ecies/ecies.cpp
+++ b/src/lib/pubkey/ecies/ecies.cpp
@@ -21,7 +21,7 @@ namespace {
/**
* Private key type for ECIES_ECDH_KA_Operation
*/
-class ECIES_PrivateKey : public EC_PrivateKey, public PK_Key_Agreement_Key
+class ECIES_PrivateKey final : public EC_PrivateKey, public PK_Key_Agreement_Key
{
public:
explicit ECIES_PrivateKey(const ECDH_PrivateKey& private_key) :
@@ -54,7 +54,7 @@ class ECIES_PrivateKey : public EC_PrivateKey, public PK_Key_Agreement_Key
/**
* Implements ECDH key agreement without using the cofactor mode
*/
-class ECIES_ECDH_KA_Operation : public PK_Ops::Key_Agreement_with_KDF
+class ECIES_ECDH_KA_Operation final : public PK_Ops::Key_Agreement_with_KDF
{
public:
ECIES_ECDH_KA_Operation(const ECIES_PrivateKey& private_key, RandomNumberGenerator& rng) :
diff --git a/src/lib/pubkey/ecies/ecies.h b/src/lib/pubkey/ecies/ecies.h
index 382147db2..f7d055dea 100644
--- a/src/lib/pubkey/ecies/ecies.h
+++ b/src/lib/pubkey/ecies/ecies.h
@@ -121,7 +121,7 @@ class BOTAN_PUBLIC_API(2,0) ECIES_KA_Params
};
-class BOTAN_PUBLIC_API(2,0) ECIES_System_Params : public ECIES_KA_Params
+class BOTAN_PUBLIC_API(2,0) ECIES_System_Params final : public ECIES_KA_Params
{
public:
/**
@@ -214,7 +214,7 @@ class BOTAN_PUBLIC_API(2,0) ECIES_KA_Operation
/**
* ECIES Encryption according to ISO 18033-2
*/
-class BOTAN_PUBLIC_API(2,0) ECIES_Encryptor : public PK_Encryptor
+class BOTAN_PUBLIC_API(2,0) ECIES_Encryptor final : public PK_Encryptor
{
public:
/**
@@ -271,7 +271,7 @@ class BOTAN_PUBLIC_API(2,0) ECIES_Encryptor : public PK_Encryptor
/**
* ECIES Decryption according to ISO 18033-2
*/
-class BOTAN_PUBLIC_API(2,0) ECIES_Decryptor : public PK_Decryptor
+class BOTAN_PUBLIC_API(2,0) ECIES_Decryptor final : public PK_Decryptor
{
public:
/**
diff --git a/src/lib/pubkey/eckcdsa/eckcdsa.cpp b/src/lib/pubkey/eckcdsa/eckcdsa.cpp
index 778c0f833..2a320cc5a 100644
--- a/src/lib/pubkey/eckcdsa/eckcdsa.cpp
+++ b/src/lib/pubkey/eckcdsa/eckcdsa.cpp
@@ -35,7 +35,7 @@ namespace {
/**
* ECKCDSA signature operation
*/
-class ECKCDSA_Signature_Operation : public PK_Ops::Signature_with_EMSA
+class ECKCDSA_Signature_Operation final : public PK_Ops::Signature_with_EMSA
{
public:
@@ -106,7 +106,7 @@ ECKCDSA_Signature_Operation::raw_sign(const uint8_t msg[], size_t,
/**
* ECKCDSA verification operation
*/
-class ECKCDSA_Verification_Operation : public PK_Ops::Verification_with_EMSA
+class ECKCDSA_Verification_Operation final : public PK_Ops::Verification_with_EMSA
{
public:
diff --git a/src/lib/pubkey/eckcdsa/eckcdsa.h b/src/lib/pubkey/eckcdsa/eckcdsa.h
index 3d2189b79..aa04cb146 100644
--- a/src/lib/pubkey/eckcdsa/eckcdsa.h
+++ b/src/lib/pubkey/eckcdsa/eckcdsa.h
@@ -58,7 +58,7 @@ class BOTAN_PUBLIC_API(2,0) ECKCDSA_PublicKey : public virtual EC_PublicKey
/**
* This class represents ECKCDSA private keys.
*/
-class BOTAN_PUBLIC_API(2,0) ECKCDSA_PrivateKey : public ECKCDSA_PublicKey,
+class BOTAN_PUBLIC_API(2,0) ECKCDSA_PrivateKey final : public ECKCDSA_PublicKey,
public EC_PrivateKey
{
public:
diff --git a/src/lib/pubkey/ed25519/ed25519.h b/src/lib/pubkey/ed25519/ed25519.h
index f295c1c41..f563115dd 100644
--- a/src/lib/pubkey/ed25519/ed25519.h
+++ b/src/lib/pubkey/ed25519/ed25519.h
@@ -62,7 +62,7 @@ class BOTAN_PUBLIC_API(2,2) Ed25519_PublicKey : public virtual Public_Key
std::vector<uint8_t> m_public;
};
-class BOTAN_PUBLIC_API(2,2) Ed25519_PrivateKey : public Ed25519_PublicKey,
+class BOTAN_PUBLIC_API(2,2) Ed25519_PrivateKey final : public Ed25519_PublicKey,
public virtual Private_Key
{
public:
diff --git a/src/lib/pubkey/ed25519/ed25519_key.cpp b/src/lib/pubkey/ed25519/ed25519_key.cpp
index 6089cfedf..269834a33 100644
--- a/src/lib/pubkey/ed25519/ed25519_key.cpp
+++ b/src/lib/pubkey/ed25519/ed25519_key.cpp
@@ -98,7 +98,7 @@ namespace {
/**
* Ed25519 verifying operation
*/
-class Ed25519_Pure_Verify_Operation : public PK_Ops::Verification
+class Ed25519_Pure_Verify_Operation final : public PK_Ops::Verification
{
public:
Ed25519_Pure_Verify_Operation(const Ed25519_PublicKey& key) : m_key(key)
@@ -127,7 +127,7 @@ class Ed25519_Pure_Verify_Operation : public PK_Ops::Verification
/**
* Ed25519 verifying operation with pre-hash
*/
-class Ed25519_Hashed_Verify_Operation : public PK_Ops::Verification
+class Ed25519_Hashed_Verify_Operation final : public PK_Ops::Verification
{
public:
Ed25519_Hashed_Verify_Operation(const Ed25519_PublicKey& key, const std::string& hash) : m_key(key)
@@ -157,7 +157,7 @@ class Ed25519_Hashed_Verify_Operation : public PK_Ops::Verification
/**
* Ed25519 signing operation ('pure' - signs message directly)
*/
-class Ed25519_Pure_Sign_Operation : public PK_Ops::Signature
+class Ed25519_Pure_Sign_Operation final : public PK_Ops::Signature
{
public:
Ed25519_Pure_Sign_Operation(const Ed25519_PrivateKey& key) : m_key(key)
@@ -185,7 +185,7 @@ class Ed25519_Pure_Sign_Operation : public PK_Ops::Signature
/**
* Ed25519 signing operation with pre-hash
*/
-class Ed25519_Hashed_Sign_Operation : public PK_Ops::Signature
+class Ed25519_Hashed_Sign_Operation final : public PK_Ops::Signature
{
public:
Ed25519_Hashed_Sign_Operation(const Ed25519_PrivateKey& key, const std::string& hash) : m_key(key)
diff --git a/src/lib/pubkey/elgamal/elgamal.cpp b/src/lib/pubkey/elgamal/elgamal.cpp
index 5a3f19362..a44f352f5 100644
--- a/src/lib/pubkey/elgamal/elgamal.cpp
+++ b/src/lib/pubkey/elgamal/elgamal.cpp
@@ -67,7 +67,7 @@ namespace {
/**
* ElGamal encryption operation
*/
-class ElGamal_Encryption_Operation : public PK_Ops::Encryption_with_EME
+class ElGamal_Encryption_Operation final : public PK_Ops::Encryption_with_EME
{
public:
@@ -119,7 +119,7 @@ ElGamal_Encryption_Operation::raw_encrypt(const uint8_t msg[], size_t msg_len,
/**
* ElGamal decryption operation
*/
-class ElGamal_Decryption_Operation : public PK_Ops::Decryption_with_EME
+class ElGamal_Decryption_Operation final : public PK_Ops::Decryption_with_EME
{
public:
diff --git a/src/lib/pubkey/elgamal/elgamal.h b/src/lib/pubkey/elgamal/elgamal.h
index 41fac4aae..e4d932f6a 100644
--- a/src/lib/pubkey/elgamal/elgamal.h
+++ b/src/lib/pubkey/elgamal/elgamal.h
@@ -50,7 +50,7 @@ class BOTAN_PUBLIC_API(2,0) ElGamal_PublicKey : public virtual DL_Scheme_PublicK
/**
* ElGamal Private Key
*/
-class BOTAN_PUBLIC_API(2,0) ElGamal_PrivateKey : public ElGamal_PublicKey,
+class BOTAN_PUBLIC_API(2,0) ElGamal_PrivateKey final : public ElGamal_PublicKey,
public virtual DL_Scheme_PrivateKey
{
public:
diff --git a/src/lib/pubkey/gost_3410/gost_3410.cpp b/src/lib/pubkey/gost_3410/gost_3410.cpp
index ee263bb96..324b7e985 100644
--- a/src/lib/pubkey/gost_3410/gost_3410.cpp
+++ b/src/lib/pubkey/gost_3410/gost_3410.cpp
@@ -94,7 +94,7 @@ BigInt decode_le(const uint8_t msg[], size_t msg_len)
/**
* GOST-34.10 signature operation
*/
-class GOST_3410_Signature_Operation : public PK_Ops::Signature_with_EMSA
+class GOST_3410_Signature_Operation final : public PK_Ops::Signature_with_EMSA
{
public:
GOST_3410_Signature_Operation(const GOST_3410_PrivateKey& gost_3410,
@@ -150,7 +150,7 @@ GOST_3410_Signature_Operation::raw_sign(const uint8_t msg[], size_t msg_len,
/**
* GOST-34.10 verification operation
*/
-class GOST_3410_Verification_Operation : public PK_Ops::Verification_with_EMSA
+class GOST_3410_Verification_Operation final : public PK_Ops::Verification_with_EMSA
{
public:
diff --git a/src/lib/pubkey/gost_3410/gost_3410.h b/src/lib/pubkey/gost_3410/gost_3410.h
index cd9f03dac..52b6ad758 100644
--- a/src/lib/pubkey/gost_3410/gost_3410.h
+++ b/src/lib/pubkey/gost_3410/gost_3410.h
@@ -64,7 +64,7 @@ class BOTAN_PUBLIC_API(2,0) GOST_3410_PublicKey : public virtual EC_PublicKey
/**
* GOST-34.10 Private Key
*/
-class BOTAN_PUBLIC_API(2,0) GOST_3410_PrivateKey : public GOST_3410_PublicKey,
+class BOTAN_PUBLIC_API(2,0) GOST_3410_PrivateKey final : public GOST_3410_PublicKey,
public EC_PrivateKey
{
public:
diff --git a/src/lib/pubkey/mce/mceliece.h b/src/lib/pubkey/mce/mceliece.h
index c9b2e0afc..54f043472 100644
--- a/src/lib/pubkey/mce/mceliece.h
+++ b/src/lib/pubkey/mce/mceliece.h
@@ -67,7 +67,7 @@ class BOTAN_PUBLIC_API(2,0) McEliece_PublicKey : public virtual Public_Key
uint32_t m_code_length;
};
-class BOTAN_PUBLIC_API(2,0) McEliece_PrivateKey : public virtual McEliece_PublicKey,
+class BOTAN_PUBLIC_API(2,0) McEliece_PrivateKey final : public virtual McEliece_PublicKey,
public virtual Private_Key
{
public:
diff --git a/src/lib/pubkey/mce/mceliece_key.cpp b/src/lib/pubkey/mce/mceliece_key.cpp
index 24a6420f2..5d8378e52 100644
--- a/src/lib/pubkey/mce/mceliece_key.cpp
+++ b/src/lib/pubkey/mce/mceliece_key.cpp
@@ -294,7 +294,7 @@ bool McEliece_PublicKey::operator==(const McEliece_PublicKey& other) const
namespace {
-class MCE_KEM_Encryptor : public PK_Ops::KEM_Encryption_with_KDF
+class MCE_KEM_Encryptor final : public PK_Ops::KEM_Encryption_with_KDF
{
public:
@@ -322,7 +322,7 @@ class MCE_KEM_Encryptor : public PK_Ops::KEM_Encryption_with_KDF
const McEliece_PublicKey& m_key;
};
-class MCE_KEM_Decryptor : public PK_Ops::KEM_Decryption_with_KDF
+class MCE_KEM_Decryptor final : public PK_Ops::KEM_Decryption_with_KDF
{
public:
diff --git a/src/lib/pubkey/pkcs8.h b/src/lib/pubkey/pkcs8.h
index 4982f4a89..b75a44180 100644
--- a/src/lib/pubkey/pkcs8.h
+++ b/src/lib/pubkey/pkcs8.h
@@ -17,7 +17,7 @@ namespace Botan {
/**
* PKCS #8 General Exception
*/
-struct BOTAN_PUBLIC_API(2,0) PKCS8_Exception : public Decoding_Error
+struct BOTAN_PUBLIC_API(2,0) PKCS8_Exception final : public Decoding_Error
{
explicit PKCS8_Exception(const std::string& error) :
Decoding_Error("PKCS #8: " + error) {}
diff --git a/src/lib/pubkey/rfc6979/rfc6979.h b/src/lib/pubkey/rfc6979/rfc6979.h
index 2afe9ca9a..d78effc26 100644
--- a/src/lib/pubkey/rfc6979/rfc6979.h
+++ b/src/lib/pubkey/rfc6979/rfc6979.h
@@ -16,7 +16,7 @@ namespace Botan {
class HMAC_DRBG;
-class BOTAN_PUBLIC_API(2,0) RFC6979_Nonce_Generator
+class BOTAN_PUBLIC_API(2,0) RFC6979_Nonce_Generator final
{
public:
/**
diff --git a/src/lib/pubkey/rsa/rsa.cpp b/src/lib/pubkey/rsa/rsa.cpp
index cafe6b069..bd02d1f19 100644
--- a/src/lib/pubkey/rsa/rsa.cpp
+++ b/src/lib/pubkey/rsa/rsa.cpp
@@ -239,7 +239,7 @@ class RSA_Private_Operation
Blinder m_blinder;
};
-class RSA_Signature_Operation : public PK_Ops::Signature_with_EMSA,
+class RSA_Signature_Operation final : public PK_Ops::Signature_with_EMSA,
private RSA_Private_Operation
{
public:
@@ -263,7 +263,7 @@ class RSA_Signature_Operation : public PK_Ops::Signature_with_EMSA,
}
};
-class RSA_Decryption_Operation : public PK_Ops::Decryption_with_EME,
+class RSA_Decryption_Operation final : public PK_Ops::Decryption_with_EME,
private RSA_Private_Operation
{
public:
@@ -286,7 +286,7 @@ class RSA_Decryption_Operation : public PK_Ops::Decryption_with_EME,
}
};
-class RSA_KEM_Decryption_Operation : public PK_Ops::KEM_Decryption_with_KDF,
+class RSA_KEM_Decryption_Operation final : public PK_Ops::KEM_Decryption_with_KDF,
private RSA_Private_Operation
{
public:
@@ -335,7 +335,7 @@ class RSA_Public_Operation
Fixed_Exponent_Power_Mod m_powermod_e_n;
};
-class RSA_Encryption_Operation : public PK_Ops::Encryption_with_EME,
+class RSA_Encryption_Operation final : public PK_Ops::Encryption_with_EME,
private RSA_Public_Operation
{
public:
@@ -356,7 +356,7 @@ class RSA_Encryption_Operation : public PK_Ops::Encryption_with_EME,
}
};
-class RSA_Verify_Operation : public PK_Ops::Verification_with_EMSA,
+class RSA_Verify_Operation final : public PK_Ops::Verification_with_EMSA,
private RSA_Public_Operation
{
public:
@@ -378,7 +378,7 @@ class RSA_Verify_Operation : public PK_Ops::Verification_with_EMSA,
}
};
-class RSA_KEM_Encryption_Operation : public PK_Ops::KEM_Encryption_with_KDF,
+class RSA_KEM_Encryption_Operation final : public PK_Ops::KEM_Encryption_with_KDF,
private RSA_Public_Operation
{
public:
diff --git a/src/lib/pubkey/rsa/rsa.h b/src/lib/pubkey/rsa/rsa.h
index 09c945c82..ad4fceab9 100644
--- a/src/lib/pubkey/rsa/rsa.h
+++ b/src/lib/pubkey/rsa/rsa.h
@@ -79,7 +79,7 @@ class BOTAN_PUBLIC_API(2,0) RSA_PublicKey : public virtual Public_Key
/**
* RSA Private Key
*/
-class BOTAN_PUBLIC_API(2,0) RSA_PrivateKey : public Private_Key, public RSA_PublicKey
+class BOTAN_PUBLIC_API(2,0) RSA_PrivateKey final : public Private_Key, public RSA_PublicKey
{
public:
/**
diff --git a/src/lib/pubkey/sm2/sm2.cpp b/src/lib/pubkey/sm2/sm2.cpp
index dbb22ca6d..1b20ee6fa 100644
--- a/src/lib/pubkey/sm2/sm2.cpp
+++ b/src/lib/pubkey/sm2/sm2.cpp
@@ -74,7 +74,7 @@ namespace {
/**
* SM2 signature operation
*/
-class SM2_Signature_Operation : public PK_Ops::Signature
+class SM2_Signature_Operation final : public PK_Ops::Signature
{
public:
@@ -131,7 +131,7 @@ SM2_Signature_Operation::sign(RandomNumberGenerator& rng)
/**
* SM2 verification operation
*/
-class SM2_Verification_Operation : public PK_Ops::Verification
+class SM2_Verification_Operation final : public PK_Ops::Verification
{
public:
SM2_Verification_Operation(const SM2_Signature_PublicKey& sm2,
diff --git a/src/lib/pubkey/sm2/sm2.h b/src/lib/pubkey/sm2/sm2.h
index bb88065f5..7f702e134 100644
--- a/src/lib/pubkey/sm2/sm2.h
+++ b/src/lib/pubkey/sm2/sm2.h
@@ -58,7 +58,7 @@ class BOTAN_PUBLIC_API(2,2) SM2_Signature_PublicKey : public virtual EC_PublicKe
/**
* This class represents SM2 Signature private keys
*/
-class BOTAN_PUBLIC_API(2,2) SM2_Signature_PrivateKey : public SM2_Signature_PublicKey,
+class BOTAN_PUBLIC_API(2,2) SM2_Signature_PrivateKey final : public SM2_Signature_PublicKey,
public EC_PrivateKey
{
public:
diff --git a/src/lib/pubkey/sm2/sm2_enc.cpp b/src/lib/pubkey/sm2/sm2_enc.cpp
index 2d44faacb..b697daf1e 100644
--- a/src/lib/pubkey/sm2/sm2_enc.cpp
+++ b/src/lib/pubkey/sm2/sm2_enc.cpp
@@ -42,7 +42,7 @@ SM2_Encryption_PrivateKey::SM2_Encryption_PrivateKey(RandomNumberGenerator& rng,
namespace {
-class SM2_Encryption_Operation : public PK_Ops::Encryption
+class SM2_Encryption_Operation final : public PK_Ops::Encryption
{
public:
SM2_Encryption_Operation(const SM2_Encryption_PublicKey& key, const std::string& kdf_hash) :
@@ -119,7 +119,7 @@ class SM2_Encryption_Operation : public PK_Ops::Encryption
const std::string m_kdf_hash;
};
-class SM2_Decryption_Operation : public PK_Ops::Decryption
+class SM2_Decryption_Operation final : public PK_Ops::Decryption
{
public:
SM2_Decryption_Operation(const SM2_Encryption_PrivateKey& key,
diff --git a/src/lib/pubkey/xmss/xmss_privatekey.h b/src/lib/pubkey/xmss/xmss_privatekey.h
index b5cbf9cac..5936009bd 100644
--- a/src/lib/pubkey/xmss/xmss_privatekey.h
+++ b/src/lib/pubkey/xmss/xmss_privatekey.h
@@ -36,7 +36,7 @@ namespace Botan {
* https://datatracker.ietf.org/doc/
* draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
**/
-class BOTAN_PUBLIC_API(2,0) XMSS_PrivateKey : public virtual XMSS_PublicKey,
+class BOTAN_PUBLIC_API(2,0) XMSS_PrivateKey final : public virtual XMSS_PublicKey,
public XMSS_Common_Ops,
public virtual Private_Key
{
diff --git a/src/lib/pubkey/xmss/xmss_signature_operation.h b/src/lib/pubkey/xmss/xmss_signature_operation.h
index 7a5845818..f974213e0 100644
--- a/src/lib/pubkey/xmss/xmss_signature_operation.h
+++ b/src/lib/pubkey/xmss/xmss_signature_operation.h
@@ -32,7 +32,7 @@ namespace Botan {
* https://datatracker.ietf.org/doc/
* draft-irtf-cfrg-xmss-hash-based-signatures/?include_text=1
**/
-class XMSS_Signature_Operation : public virtual PK_Ops::Signature,
+class XMSS_Signature_Operation final : public virtual PK_Ops::Signature,
public XMSS_Common_Ops
{
public:
diff --git a/src/lib/pubkey/xmss/xmss_verification_operation.h b/src/lib/pubkey/xmss/xmss_verification_operation.h
index de8816134..f5079303c 100644
--- a/src/lib/pubkey/xmss/xmss_verification_operation.h
+++ b/src/lib/pubkey/xmss/xmss_verification_operation.h
@@ -25,7 +25,7 @@ namespace Botan {
* Signatures (XMSS).
**/
class XMSS_Verification_Operation
- : public virtual PK_Ops::Verification,
+ final : public virtual PK_Ops::Verification,
public XMSS_Common_Ops
{
public:
diff --git a/src/lib/pubkey/xmss/xmss_wots_addressed_privatekey.h b/src/lib/pubkey/xmss/xmss_wots_addressed_privatekey.h
index f3031818c..227ef211c 100644
--- a/src/lib/pubkey/xmss/xmss_wots_addressed_privatekey.h
+++ b/src/lib/pubkey/xmss/xmss_wots_addressed_privatekey.h
@@ -22,7 +22,7 @@ namespace Botan {
* XMSS_WOTS_Signature_Operation() on creation.
**/
class XMSS_WOTS_Addressed_PrivateKey
- : public virtual XMSS_WOTS_Addressed_PublicKey,
+ final : public virtual XMSS_WOTS_Addressed_PublicKey,
public virtual Private_Key
{
public:
diff --git a/src/lib/pubkey/xmss/xmss_wots_privatekey.h b/src/lib/pubkey/xmss/xmss_wots_privatekey.h
index fa8a23cad..8fb4e0233 100644
--- a/src/lib/pubkey/xmss/xmss_wots_privatekey.h
+++ b/src/lib/pubkey/xmss/xmss_wots_privatekey.h
@@ -23,7 +23,7 @@ namespace Botan {
/** A Winternitz One Time Signature private key for use with Extended Hash-Based
* Signatures.
**/
-class BOTAN_PUBLIC_API(2,0) XMSS_WOTS_PrivateKey : public virtual XMSS_WOTS_PublicKey,
+class BOTAN_PUBLIC_API(2,0) XMSS_WOTS_PrivateKey final : public virtual XMSS_WOTS_PublicKey,
public virtual Private_Key
{
public:
diff --git a/src/lib/pubkey/xmss/xmss_wots_signature_operation.h b/src/lib/pubkey/xmss/xmss_wots_signature_operation.h
index 271766e87..5873c4ec4 100644
--- a/src/lib/pubkey/xmss/xmss_wots_signature_operation.h
+++ b/src/lib/pubkey/xmss/xmss_wots_signature_operation.h
@@ -24,7 +24,7 @@ namespace Botan {
* This operation is not intended for stand-alone use and thus not registered
* in the Botan algorithm registry.
***/
-class XMSS_WOTS_Signature_Operation : public virtual PK_Ops::Signature,
+class XMSS_WOTS_Signature_Operation final : public virtual PK_Ops::Signature,
public XMSS_WOTS_Common_Ops
{
public:
diff --git a/src/lib/pubkey/xmss/xmss_wots_verification_operation.h b/src/lib/pubkey/xmss/xmss_wots_verification_operation.h
index 3575e320a..863e05de7 100644
--- a/src/lib/pubkey/xmss/xmss_wots_verification_operation.h
+++ b/src/lib/pubkey/xmss/xmss_wots_verification_operation.h
@@ -25,7 +25,7 @@ namespace Botan {
* in the Botan algorithm registry.
**/
class XMSS_WOTS_Verification_Operation
- : public virtual PK_Ops::Verification,
+ final : public virtual PK_Ops::Verification,
public XMSS_WOTS_Common_Ops
{
public:
diff --git a/src/lib/rng/rdrand_rng/rdrand_rng.h b/src/lib/rng/rdrand_rng/rdrand_rng.h
index de9798e70..c4cfbdc5c 100644
--- a/src/lib/rng/rdrand_rng/rdrand_rng.h
+++ b/src/lib/rng/rdrand_rng/rdrand_rng.h
@@ -12,7 +12,7 @@
namespace Botan {
-class BOTAN_PUBLIC_API(2,0) RDRAND_RNG : public Hardware_RNG
+class BOTAN_PUBLIC_API(2,0) RDRAND_RNG final : public Hardware_RNG
{
public:
/**
diff --git a/src/lib/tls/sessions_sqlite3/tls_session_manager_sqlite.h b/src/lib/tls/sessions_sqlite3/tls_session_manager_sqlite.h
index bd092c5b0..f906ae585 100644
--- a/src/lib/tls/sessions_sqlite3/tls_session_manager_sqlite.h
+++ b/src/lib/tls/sessions_sqlite3/tls_session_manager_sqlite.h
@@ -25,7 +25,7 @@ namespace TLS {
* serious privacy risk in some situations.
*/
class BOTAN_PUBLIC_API(2,0)
-Session_Manager_SQLite : public Session_Manager_SQL
+Session_Manager_SQLite final : public Session_Manager_SQL
{
public:
/**
diff --git a/src/lib/tls/tls_alert.h b/src/lib/tls/tls_alert.h
index f76fc4af1..89530e238 100644
--- a/src/lib/tls/tls_alert.h
+++ b/src/lib/tls/tls_alert.h
@@ -18,7 +18,7 @@ namespace TLS {
/**
* SSL/TLS Alert Message
*/
-class BOTAN_PUBLIC_API(2,0) Alert
+class BOTAN_PUBLIC_API(2,0) Alert final
{
public:
/**
diff --git a/src/lib/tls/tls_blocking.h b/src/lib/tls/tls_blocking.h
index 01620c652..c40d127ca 100644
--- a/src/lib/tls/tls_blocking.h
+++ b/src/lib/tls/tls_blocking.h
@@ -19,7 +19,7 @@ namespace TLS {
* Blocking TLS Client
* Can be used directly, or subclass to get handshake and alert notifications
*/
-class BOTAN_PUBLIC_API(2,0) Blocking_Client
+class BOTAN_PUBLIC_API(2,0) Blocking_Client final
{
public:
/*
diff --git a/src/lib/tls/tls_ciphersuite.h b/src/lib/tls/tls_ciphersuite.h
index 4543d81d2..6c2836f9d 100644
--- a/src/lib/tls/tls_ciphersuite.h
+++ b/src/lib/tls/tls_ciphersuite.h
@@ -19,7 +19,7 @@ namespace TLS {
/**
* Ciphersuite Information
*/
-class BOTAN_PUBLIC_API(2,0) Ciphersuite
+class BOTAN_PUBLIC_API(2,0) Ciphersuite final
{
public:
/**
diff --git a/src/lib/tls/tls_client.cpp b/src/lib/tls/tls_client.cpp
index 53d673a5c..ce19f04c9 100644
--- a/src/lib/tls/tls_client.cpp
+++ b/src/lib/tls/tls_client.cpp
@@ -19,7 +19,7 @@ namespace TLS {
namespace {
-class Client_Handshake_State : public Handshake_State
+class Client_Handshake_State final : public Handshake_State
{
public:
// using Handshake_State::Handshake_State;
diff --git a/src/lib/tls/tls_exceptn.h b/src/lib/tls/tls_exceptn.h
index 79b1042d3..1b58e1beb 100644
--- a/src/lib/tls/tls_exceptn.h
+++ b/src/lib/tls/tls_exceptn.h
@@ -34,7 +34,7 @@ class BOTAN_PUBLIC_API(2,0) TLS_Exception : public Exception
/**
* Unexpected_Message Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Unexpected_Message : public TLS_Exception
+struct BOTAN_PUBLIC_API(2,0) Unexpected_Message final : public TLS_Exception
{
explicit Unexpected_Message(const std::string& err) :
TLS_Exception(Alert::UNEXPECTED_MESSAGE, err) {}
diff --git a/src/lib/tls/tls_extensions.h b/src/lib/tls/tls_extensions.h
index 9a92a1135..ee3310563 100644
--- a/src/lib/tls/tls_extensions.h
+++ b/src/lib/tls/tls_extensions.h
@@ -426,7 +426,7 @@ class Certificate_Status_Request final : public Extension
/**
* Represents a block of extensions in a hello message
*/
-class BOTAN_UNSTABLE_API Extensions
+class BOTAN_UNSTABLE_API Extensions final
{
public:
std::set<Handshake_Extension_Type> extension_types() const;
diff --git a/src/lib/tls/tls_handshake_hash.h b/src/lib/tls/tls_handshake_hash.h
index 1f80e2c3a..bb38015c8 100644
--- a/src/lib/tls/tls_handshake_hash.h
+++ b/src/lib/tls/tls_handshake_hash.h
@@ -18,7 +18,7 @@ namespace TLS {
/**
* TLS Handshake Hash
*/
-class Handshake_Hash
+class Handshake_Hash final
{
public:
void update(const uint8_t in[], size_t length)
diff --git a/src/lib/tls/tls_policy.cpp b/src/lib/tls/tls_policy.cpp
index 05a5b8b83..43926e314 100644
--- a/src/lib/tls/tls_policy.cpp
+++ b/src/lib/tls/tls_policy.cpp
@@ -317,7 +317,7 @@ std::vector<uint16_t> Policy::srtp_profiles() const
namespace {
-class Ciphersuite_Preference_Ordering
+class Ciphersuite_Preference_Ordering final
{
public:
Ciphersuite_Preference_Ordering(const std::vector<std::string>& ciphers,
diff --git a/src/lib/tls/tls_policy.h b/src/lib/tls/tls_policy.h
index 7e55f4eca..463f1c6d6 100644
--- a/src/lib/tls/tls_policy.h
+++ b/src/lib/tls/tls_policy.h
@@ -309,7 +309,7 @@ class BOTAN_PUBLIC_API(2,0) Policy
/**
* NSA Suite B 128-bit security level (RFC 6460)
*/
-class BOTAN_PUBLIC_API(2,0) NSA_Suite_B_128 : public Policy
+class BOTAN_PUBLIC_API(2,0) NSA_Suite_B_128 final : public Policy
{
public:
std::vector<std::string> allowed_ciphers() const override
@@ -342,7 +342,7 @@ class BOTAN_PUBLIC_API(2,0) NSA_Suite_B_128 : public Policy
/**
* BSI TR-02102-2 Policy
*/
-class BOTAN_PUBLIC_API(2,0) BSI_TR_02102_2 : public Policy
+class BOTAN_PUBLIC_API(2,0) BSI_TR_02102_2 final : public Policy
{
public:
std::vector<std::string> allowed_ciphers() const override
@@ -397,7 +397,7 @@ class BOTAN_PUBLIC_API(2,0) BSI_TR_02102_2 : public Policy
/**
* Policy for DTLS. We require DTLS v1.2 and an AEAD mode.
*/
-class BOTAN_PUBLIC_API(2,0) Datagram_Policy : public Policy
+class BOTAN_PUBLIC_API(2,0) Datagram_Policy final : public Policy
{
public:
std::vector<std::string> allowed_macs() const override
@@ -417,7 +417,7 @@ class BOTAN_PUBLIC_API(2,0) Datagram_Policy : public Policy
* to use if you control both sides of the protocol and don't have to worry
* about ancient and/or bizarre TLS implementations.
*/
-class BOTAN_PUBLIC_API(2,0) Strict_Policy : public Policy
+class BOTAN_PUBLIC_API(2,0) Strict_Policy final : public Policy
{
public:
std::vector<std::string> allowed_ciphers() const override;
diff --git a/src/lib/tls/tls_reader.h b/src/lib/tls/tls_reader.h
index e88335227..588335144 100644
--- a/src/lib/tls/tls_reader.h
+++ b/src/lib/tls/tls_reader.h
@@ -21,7 +21,7 @@ namespace TLS {
/**
* Helper class for decoding TLS protocol messages
*/
-class TLS_Data_Reader
+class TLS_Data_Reader final
{
public:
TLS_Data_Reader(const char* type, const std::vector<uint8_t>& buf_in) :
diff --git a/src/lib/tls/tls_record.h b/src/lib/tls/tls_record.h
index 63989a17e..1fe3a558b 100644
--- a/src/lib/tls/tls_record.h
+++ b/src/lib/tls/tls_record.h
@@ -28,7 +28,7 @@ class Connection_Sequence_Numbers;
/**
* TLS Cipher State
*/
-class Connection_Cipher_State
+class Connection_Cipher_State final
{
public:
/**
@@ -71,7 +71,7 @@ class Connection_Cipher_State
bool m_cbc_nonce;
};
-class Record
+class Record final
{
public:
Record(secure_vector<uint8_t>& data,
@@ -99,7 +99,7 @@ class Record
size_t m_size;
};
-class Record_Message
+class Record_Message final
{
public:
Record_Message(const uint8_t* data, size_t size)
@@ -120,7 +120,7 @@ class Record_Message
size_t m_size;
};
-class Record_Raw_Input
+class Record_Raw_Input final
{
public:
Record_Raw_Input(const uint8_t* data, size_t size, size_t& consumed,
diff --git a/src/lib/tls/tls_server.cpp b/src/lib/tls/tls_server.cpp
index 1c9ca0b86..c0e853a80 100644
--- a/src/lib/tls/tls_server.cpp
+++ b/src/lib/tls/tls_server.cpp
@@ -16,7 +16,7 @@ namespace Botan {
namespace TLS {
-class Server_Handshake_State : public Handshake_State
+class Server_Handshake_State final : public Handshake_State
{
public:
Server_Handshake_State(Handshake_IO* io, Callbacks& cb)
diff --git a/src/lib/tls/tls_server_info.h b/src/lib/tls/tls_server_info.h
index d1d66bdb6..d05af6acc 100644
--- a/src/lib/tls/tls_server_info.h
+++ b/src/lib/tls/tls_server_info.h
@@ -18,7 +18,7 @@ namespace TLS {
/**
* Represents information known about a TLS server.
*/
-class BOTAN_PUBLIC_API(2,0) Server_Information
+class BOTAN_PUBLIC_API(2,0) Server_Information final
{
public:
/**
diff --git a/src/lib/tls/tls_session.h b/src/lib/tls/tls_session.h
index 5b31e8622..62e2b2df9 100644
--- a/src/lib/tls/tls_session.h
+++ b/src/lib/tls/tls_session.h
@@ -24,7 +24,7 @@ namespace TLS {
/**
* Class representing a TLS session state
*/
-class BOTAN_PUBLIC_API(2,0) Session
+class BOTAN_PUBLIC_API(2,0) Session final
{
public:
diff --git a/src/lib/tls/tls_session_key.h b/src/lib/tls/tls_session_key.h
index ae0db88ca..2c1eac523 100644
--- a/src/lib/tls/tls_session_key.h
+++ b/src/lib/tls/tls_session_key.h
@@ -19,7 +19,7 @@ class Handshake_State;
/**
* TLS Session Keys
*/
-class Session_Keys
+class Session_Keys final
{
public:
/**
diff --git a/src/lib/tls/tls_session_manager.h b/src/lib/tls/tls_session_manager.h
index 215ad1303..e6b5a3194 100644
--- a/src/lib/tls/tls_session_manager.h
+++ b/src/lib/tls/tls_session_manager.h
@@ -83,7 +83,7 @@ class BOTAN_PUBLIC_API(2,0) Session_Manager
* An implementation of Session_Manager that does not save sessions at
* all, preventing session resumption.
*/
-class BOTAN_PUBLIC_API(2,0) Session_Manager_Noop : public Session_Manager
+class BOTAN_PUBLIC_API(2,0) Session_Manager_Noop final : public Session_Manager
{
public:
bool load_from_session_id(const std::vector<uint8_t>&, Session&) override
@@ -105,7 +105,7 @@ class BOTAN_PUBLIC_API(2,0) Session_Manager_Noop : public Session_Manager
/**
* An implementation of Session_Manager that saves values in memory.
*/
-class BOTAN_PUBLIC_API(2,0) Session_Manager_In_Memory : public Session_Manager
+class BOTAN_PUBLIC_API(2,0) Session_Manager_In_Memory final : public Session_Manager
{
public:
/**
diff --git a/src/lib/tls/tls_version.h b/src/lib/tls/tls_version.h
index a311db909..dd1d09530 100644
--- a/src/lib/tls/tls_version.h
+++ b/src/lib/tls/tls_version.h
@@ -18,7 +18,7 @@ namespace TLS {
/**
* TLS Protocol Version
*/
-class BOTAN_PUBLIC_API(2,0) Protocol_Version
+class BOTAN_PUBLIC_API(2,0) Protocol_Version final
{
public:
enum Version_Code {
diff --git a/src/lib/utils/barrier.h b/src/lib/utils/barrier.h
index 303ac5a98..9b7fdd59d 100644
--- a/src/lib/utils/barrier.h
+++ b/src/lib/utils/barrier.h
@@ -23,7 +23,7 @@ namespace Botan {
// m_syncs counter is incremented. m_syncs is a counter to ensure that wait()
// can be called after a sync() even if the previously sleeping threads have
// not awoken.)
-class Barrier
+class Barrier final
{
public:
explicit Barrier(int value = 0) : m_value(value), m_syncs(0) {}
diff --git a/src/lib/utils/cpuid/cpuid.h b/src/lib/utils/cpuid/cpuid.h
index 839b72167..f9186f918 100644
--- a/src/lib/utils/cpuid/cpuid.h
+++ b/src/lib/utils/cpuid/cpuid.h
@@ -33,7 +33,7 @@ namespace Botan {
* thread-unsafe mechanism involving executing probe functions which
* catching SIGILL signal is used.
*/
-class BOTAN_PUBLIC_API(2,1) CPUID
+class BOTAN_PUBLIC_API(2,1) CPUID final
{
public:
/**
diff --git a/src/lib/utils/data_src.h b/src/lib/utils/data_src.h
index 616556e46..346ec20f7 100644
--- a/src/lib/utils/data_src.h
+++ b/src/lib/utils/data_src.h
@@ -95,7 +95,7 @@ class BOTAN_PUBLIC_API(2,0) DataSource
/**
* This class represents a Memory-Based DataSource
*/
-class BOTAN_PUBLIC_API(2,0) DataSource_Memory : public DataSource
+class BOTAN_PUBLIC_API(2,0) DataSource_Memory final : public DataSource
{
public:
size_t read(uint8_t[], size_t) override;
@@ -140,7 +140,7 @@ class BOTAN_PUBLIC_API(2,0) DataSource_Memory : public DataSource
/**
* This class represents a Stream-Based DataSource.
*/
-class BOTAN_PUBLIC_API(2,0) DataSource_Stream : public DataSource
+class BOTAN_PUBLIC_API(2,0) DataSource_Stream final : public DataSource
{
public:
size_t read(uint8_t[], size_t) override;
diff --git a/src/lib/utils/database.h b/src/lib/utils/database.h
index cd30c64ae..eb59cc376 100644
--- a/src/lib/utils/database.h
+++ b/src/lib/utils/database.h
@@ -20,7 +20,7 @@ class BOTAN_PUBLIC_API(2,0) SQL_Database
{
public:
- class BOTAN_PUBLIC_API(2,0) SQL_DB_Error : public Exception
+ class BOTAN_PUBLIC_API(2,0) SQL_DB_Error final : public Exception
{
public:
explicit SQL_DB_Error(const std::string& what) : Exception("SQL database", what) {}
diff --git a/src/lib/utils/donna128.h b/src/lib/utils/donna128.h
index 9efc4e332..5d5b18695 100644
--- a/src/lib/utils/donna128.h
+++ b/src/lib/utils/donna128.h
@@ -12,7 +12,7 @@
namespace Botan {
-class donna128
+class donna128 final
{
public:
donna128(uint64_t ll = 0, uint64_t hh = 0) { l = ll; h = hh; }
diff --git a/src/lib/utils/dyn_load/dyn_load.h b/src/lib/utils/dyn_load/dyn_load.h
index 581eac724..3caf65f27 100644
--- a/src/lib/utils/dyn_load/dyn_load.h
+++ b/src/lib/utils/dyn_load/dyn_load.h
@@ -16,7 +16,7 @@ namespace Botan {
/**
* Represents a DLL or shared object
*/
-class BOTAN_PUBLIC_API(2,0) Dynamically_Loaded_Library
+class BOTAN_PUBLIC_API(2,0) Dynamically_Loaded_Library final
{
public:
/**
diff --git a/src/lib/utils/exceptn.h b/src/lib/utils/exceptn.h
index bb8c245f6..5242e87d9 100644
--- a/src/lib/utils/exceptn.h
+++ b/src/lib/utils/exceptn.h
@@ -49,7 +49,7 @@ class BOTAN_PUBLIC_API(2,0) Invalid_Argument : public Exception
* An argument that is invalid because it is not supported by Botan.
* It might or might not be valid in another context like a standard.
*/
-struct BOTAN_PUBLIC_API(2,0) Unsupported_Argument : public Invalid_Argument
+struct BOTAN_PUBLIC_API(2,0) Unsupported_Argument final : public Invalid_Argument
{
explicit Unsupported_Argument(const std::string& msg) : Invalid_Argument(msg) {}
};
@@ -94,7 +94,7 @@ struct BOTAN_PUBLIC_API(2,0) Internal_Error : public Exception
/**
* Invalid_Key_Length Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Invalid_Key_Length : public Invalid_Argument
+struct BOTAN_PUBLIC_API(2,0) Invalid_Key_Length final : public Invalid_Argument
{
Invalid_Key_Length(const std::string& name, size_t length) :
Invalid_Argument(name + " cannot accept a key of length " +
@@ -105,7 +105,7 @@ struct BOTAN_PUBLIC_API(2,0) Invalid_Key_Length : public Invalid_Argument
/**
* Invalid_IV_Length Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Invalid_IV_Length : public Invalid_Argument
+struct BOTAN_PUBLIC_API(2,0) Invalid_IV_Length final : public Invalid_Argument
{
Invalid_IV_Length(const std::string& mode, size_t bad_len) :
Invalid_Argument("IV length " + std::to_string(bad_len) +
@@ -116,7 +116,7 @@ struct BOTAN_PUBLIC_API(2,0) Invalid_IV_Length : public Invalid_Argument
/**
* PRNG_Unseeded Exception
*/
-struct BOTAN_PUBLIC_API(2,0) PRNG_Unseeded : public Invalid_State
+struct BOTAN_PUBLIC_API(2,0) PRNG_Unseeded final : public Invalid_State
{
explicit PRNG_Unseeded(const std::string& algo) :
Invalid_State("PRNG not seeded: " + algo)
@@ -126,7 +126,7 @@ struct BOTAN_PUBLIC_API(2,0) PRNG_Unseeded : public Invalid_State
/**
* Policy_Violation Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Policy_Violation : public Invalid_State
+struct BOTAN_PUBLIC_API(2,0) Policy_Violation final : public Invalid_State
{
explicit Policy_Violation(const std::string& err) :
Invalid_State("Policy violation: " + err)
@@ -136,7 +136,7 @@ struct BOTAN_PUBLIC_API(2,0) Policy_Violation : public Invalid_State
/**
* Algorithm_Not_Found Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Algorithm_Not_Found : public Lookup_Error
+struct BOTAN_PUBLIC_API(2,0) Algorithm_Not_Found final : public Lookup_Error
{
explicit Algorithm_Not_Found(const std::string& name) :
Lookup_Error("Could not find any algorithm named \"" + name + "\"")
@@ -146,7 +146,7 @@ struct BOTAN_PUBLIC_API(2,0) Algorithm_Not_Found : public Lookup_Error
/**
* No_Provider_Found Exception
*/
-struct BOTAN_PUBLIC_API(2,0) No_Provider_Found : public Exception
+struct BOTAN_PUBLIC_API(2,0) No_Provider_Found final : public Exception
{
explicit No_Provider_Found(const std::string& name) :
Exception("Could not find any provider for algorithm named \"" + name + "\"")
@@ -157,7 +157,7 @@ struct BOTAN_PUBLIC_API(2,0) No_Provider_Found : public Exception
* Provider_Not_Found is thrown when a specific provider was requested
* but that provider is not available.
*/
-struct BOTAN_PUBLIC_API(2,0) Provider_Not_Found : public Lookup_Error
+struct BOTAN_PUBLIC_API(2,0) Provider_Not_Found final : public Lookup_Error
{
Provider_Not_Found(const std::string& algo, const std::string& provider) :
Lookup_Error("Could not find provider '" + provider + "' for " + algo) {}
@@ -166,7 +166,7 @@ struct BOTAN_PUBLIC_API(2,0) Provider_Not_Found : public Lookup_Error
/**
* Invalid_Algorithm_Name Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Invalid_Algorithm_Name : public Invalid_Argument
+struct BOTAN_PUBLIC_API(2,0) Invalid_Algorithm_Name final : public Invalid_Argument
{
explicit Invalid_Algorithm_Name(const std::string& name):
Invalid_Argument("Invalid algorithm name: " + name)
@@ -176,7 +176,7 @@ struct BOTAN_PUBLIC_API(2,0) Invalid_Algorithm_Name : public Invalid_Argument
/**
* Encoding_Error Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Encoding_Error : public Invalid_Argument
+struct BOTAN_PUBLIC_API(2,0) Encoding_Error final : public Invalid_Argument
{
explicit Encoding_Error(const std::string& name) :
Invalid_Argument("Encoding error: " + name) {}
@@ -194,7 +194,7 @@ struct BOTAN_PUBLIC_API(2,0) Decoding_Error : public Invalid_Argument
/**
* Integrity_Failure Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Integrity_Failure : public Exception
+struct BOTAN_PUBLIC_API(2,0) Integrity_Failure final : public Exception
{
explicit Integrity_Failure(const std::string& msg) :
Exception("Integrity failure: " + msg) {}
@@ -203,7 +203,7 @@ struct BOTAN_PUBLIC_API(2,0) Integrity_Failure : public Exception
/**
* Invalid_OID Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Invalid_OID : public Decoding_Error
+struct BOTAN_PUBLIC_API(2,0) Invalid_OID final : public Decoding_Error
{
explicit Invalid_OID(const std::string& oid) :
Decoding_Error("Invalid ASN.1 OID: " + oid) {}
@@ -212,7 +212,7 @@ struct BOTAN_PUBLIC_API(2,0) Invalid_OID : public Decoding_Error
/**
* Stream_IO_Error Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Stream_IO_Error : public Exception
+struct BOTAN_PUBLIC_API(2,0) Stream_IO_Error final : public Exception
{
explicit Stream_IO_Error(const std::string& err) :
Exception("I/O error: " + err)
@@ -222,7 +222,7 @@ struct BOTAN_PUBLIC_API(2,0) Stream_IO_Error : public Exception
/**
* No_Filesystem_Access Exception
*/
-struct BOTAN_PUBLIC_API(2,0) No_Filesystem_Access : public Exception
+struct BOTAN_PUBLIC_API(2,0) No_Filesystem_Access final : public Exception
{
No_Filesystem_Access() : Exception("No filesystem access enabled.") {}
};
@@ -230,7 +230,7 @@ struct BOTAN_PUBLIC_API(2,0) No_Filesystem_Access : public Exception
/**
* Self Test Failure Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Self_Test_Failure : public Internal_Error
+struct BOTAN_PUBLIC_API(2,0) Self_Test_Failure final : public Internal_Error
{
explicit Self_Test_Failure(const std::string& err) :
Internal_Error("Self test failed: " + err)
@@ -240,7 +240,7 @@ struct BOTAN_PUBLIC_API(2,0) Self_Test_Failure : public Internal_Error
/**
* Not Implemented Exception
*/
-struct BOTAN_PUBLIC_API(2,0) Not_Implemented : public Exception
+struct BOTAN_PUBLIC_API(2,0) Not_Implemented final : public Exception
{
explicit Not_Implemented(const std::string& err) :
Exception("Not implemented", err)
diff --git a/src/lib/utils/http_util/http_util.h b/src/lib/utils/http_util/http_util.h
index acaed54d4..aa8e1cbc0 100644
--- a/src/lib/utils/http_util/http_util.h
+++ b/src/lib/utils/http_util/http_util.h
@@ -56,7 +56,7 @@ struct Response
/**
* HTTP_Error Exception
*/
-struct BOTAN_PUBLIC_API(2,0) HTTP_Error : public Exception
+struct BOTAN_PUBLIC_API(2,0) HTTP_Error final : public Exception
{
explicit HTTP_Error(const std::string& msg) :
Exception("HTTP error " + msg)
diff --git a/src/lib/utils/locking_allocator/locking_allocator.h b/src/lib/utils/locking_allocator/locking_allocator.h
index b761221d2..8e38129e2 100644
--- a/src/lib/utils/locking_allocator/locking_allocator.h
+++ b/src/lib/utils/locking_allocator/locking_allocator.h
@@ -14,7 +14,7 @@
namespace Botan {
-class BOTAN_PUBLIC_API(2,0) mlock_allocator
+class BOTAN_PUBLIC_API(2,0) mlock_allocator final
{
public:
static mlock_allocator& instance();
diff --git a/src/lib/utils/os_utils.cpp b/src/lib/utils/os_utils.cpp
index 92b555d1e..afea8bc7d 100644
--- a/src/lib/utils/os_utils.cpp
+++ b/src/lib/utils/os_utils.cpp
@@ -52,7 +52,7 @@ namespace {
#if defined(BOTAN_HAS_BOOST_ASIO)
-class Asio_Socket : public OS::Socket
+class Asio_Socket final : public OS::Socket
{
public:
Asio_Socket(const std::string& hostname, const std::string& service) :
@@ -90,7 +90,7 @@ class Asio_Socket : public OS::Socket
#elif defined(BOTAN_TARGET_OS_TYPE_IS_WINDOWS)
-class Winsock_Socket : public OS::Socket
+class Winsock_Socket final : public OS::Socket
{
public:
Winsock_Socket(const std::string& hostname, const std::string& service)
@@ -188,7 +188,7 @@ class Winsock_Socket : public OS::Socket
};
#elif defined(BOTAN_TARGET_OS_TYPE_IS_UNIX)
-class BSD_Socket : public OS::Socket
+class BSD_Socket final : public OS::Socket
{
public:
BSD_Socket(const std::string& hostname, const std::string& service)
diff --git a/src/lib/utils/safeint.h b/src/lib/utils/safeint.h
index 66632c932..86567db72 100644
--- a/src/lib/utils/safeint.h
+++ b/src/lib/utils/safeint.h
@@ -13,7 +13,7 @@
namespace Botan {
-class Integer_Overflow_Detected : public Exception
+class Integer_Overflow_Detected final : public Exception
{
public:
Integer_Overflow_Detected(const std::string& file, int line) :
diff --git a/src/lib/utils/semaphore.h b/src/lib/utils/semaphore.h
index 61db8d48f..84478a8df 100644
--- a/src/lib/utils/semaphore.h
+++ b/src/lib/utils/semaphore.h
@@ -17,7 +17,7 @@
namespace Botan {
#if defined(BOTAN_TARGET_OS_HAS_THREADS)
-class Semaphore
+class Semaphore final
{
public:
explicit Semaphore(int value = 0) : m_value(value), m_wakeups(0) {}
diff --git a/src/lib/utils/sqlite3/sqlite3.h b/src/lib/utils/sqlite3/sqlite3.h
index dff189791..3f11b60e2 100644
--- a/src/lib/utils/sqlite3/sqlite3.h
+++ b/src/lib/utils/sqlite3/sqlite3.h
@@ -15,7 +15,7 @@ class sqlite3_stmt;
namespace Botan {
-class BOTAN_PUBLIC_API(2,0) Sqlite3_Database : public SQL_Database
+class BOTAN_PUBLIC_API(2,0) Sqlite3_Database final : public SQL_Database
{
public:
Sqlite3_Database(const std::string& file);
@@ -28,7 +28,7 @@ class BOTAN_PUBLIC_API(2,0) Sqlite3_Database : public SQL_Database
std::shared_ptr<Statement> new_statement(const std::string& sql) const override;
private:
- class Sqlite3_Statement : public Statement
+ class Sqlite3_Statement final : public Statement
{
public:
void bind(int column, const std::string& val) override;
diff --git a/src/lib/x509/certstor.h b/src/lib/x509/certstor.h
index c2ce8b15b..f08e03bae 100644
--- a/src/lib/x509/certstor.h
+++ b/src/lib/x509/certstor.h
@@ -71,7 +71,7 @@ class BOTAN_PUBLIC_API(2,0) Certificate_Store
/**
* In Memory Certificate Store
*/
-class BOTAN_PUBLIC_API(2,0) Certificate_Store_In_Memory : public Certificate_Store
+class BOTAN_PUBLIC_API(2,0) Certificate_Store_In_Memory final : public Certificate_Store
{
public:
/**
diff --git a/src/lib/x509/certstor_sqlite3/certstor_sqlite.h b/src/lib/x509/certstor_sqlite3/certstor_sqlite.h
index 684ece8d7..4e53f34f4 100644
--- a/src/lib/x509/certstor_sqlite3/certstor_sqlite.h
+++ b/src/lib/x509/certstor_sqlite3/certstor_sqlite.h
@@ -15,7 +15,7 @@ namespace Botan {
/**
* Certificate and private key store backed by an sqlite (http://sqlite.org) database.
*/
-class BOTAN_PUBLIC_API(2,0) Certificate_Store_In_SQLite : public Certificate_Store_In_SQL
+class BOTAN_PUBLIC_API(2,0) Certificate_Store_In_SQLite final : public Certificate_Store_In_SQL
{
public:
/**
diff --git a/src/lib/x509/name_constraint.h b/src/lib/x509/name_constraint.h
index 108028413..34ee5dc32 100644
--- a/src/lib/x509/name_constraint.h
+++ b/src/lib/x509/name_constraint.h
@@ -25,7 +25,7 @@ class X509_Certificate;
* encoding. Allows matching GeneralNames against each other using
* the rules laid out in the RFC 5280, sec. 4.2.1.10 (Name Contraints).
*/
-class BOTAN_PUBLIC_API(2,0) GeneralName : public ASN1_Object
+class BOTAN_PUBLIC_API(2,0) GeneralName final : public ASN1_Object
{
public:
enum MatchResult : int
@@ -87,7 +87,7 @@ std::ostream& operator<<(std::ostream& os, const GeneralName& gn);
* length to a GeneralName to form a constraint. The length limits
* are currently unused.
*/
-class BOTAN_PUBLIC_API(2,0) GeneralSubtree : public ASN1_Object
+class BOTAN_PUBLIC_API(2,0) GeneralSubtree final : public ASN1_Object
{
public:
/**
@@ -144,7 +144,7 @@ std::ostream& operator<<(std::ostream& os, const GeneralSubtree& gs);
*
* Wraps the Name Constraints associated with a certificate.
*/
-class BOTAN_PUBLIC_API(2,0) NameConstraints
+class BOTAN_PUBLIC_API(2,0) NameConstraints final
{
public:
/**
diff --git a/src/lib/x509/ocsp.h b/src/lib/x509/ocsp.h
index 3ff847370..254de5038 100644
--- a/src/lib/x509/ocsp.h
+++ b/src/lib/x509/ocsp.h
@@ -20,7 +20,7 @@ namespace OCSP {
/**
* An OCSP request.
*/
-class BOTAN_PUBLIC_API(2,0) Request
+class BOTAN_PUBLIC_API(2,0) Request final
{
public:
/**
@@ -66,7 +66,7 @@ class BOTAN_PUBLIC_API(2,0) Request
*
* Note this class is only usable as an OCSP client
*/
-class BOTAN_PUBLIC_API(2,0) Response
+class BOTAN_PUBLIC_API(2,0) Response final
{
public:
/**
diff --git a/src/lib/x509/x509_ca.h b/src/lib/x509/x509_ca.h
index d10bdb338..38455923f 100644
--- a/src/lib/x509/x509_ca.h
+++ b/src/lib/x509/x509_ca.h
@@ -24,7 +24,7 @@ class PK_Signer;
/**
* This class represents X.509 Certificate Authorities (CAs).
*/
-class BOTAN_PUBLIC_API(2,0) X509_CA
+class BOTAN_PUBLIC_API(2,0) X509_CA final
{
public:
/**
diff --git a/src/lib/x509/x509_crl.h b/src/lib/x509/x509_crl.h
index 35eded502..0e70b3f2b 100644
--- a/src/lib/x509/x509_crl.h
+++ b/src/lib/x509/x509_crl.h
@@ -27,7 +27,7 @@ class BOTAN_PUBLIC_API(2,0) X509_CRL final : public X509_Object
/**
* This class represents CRL related errors.
*/
- struct BOTAN_PUBLIC_API(2,0) X509_CRL_Error : public Exception
+ struct BOTAN_PUBLIC_API(2,0) X509_CRL_Error final : public Exception
{
explicit X509_CRL_Error(const std::string& error) :
Exception("X509_CRL: " + error) {}
diff --git a/src/lib/x509/x509_ext.cpp b/src/lib/x509/x509_ext.cpp
index 203a81cb9..d71af82b7 100644
--- a/src/lib/x509/x509_ext.cpp
+++ b/src/lib/x509/x509_ext.cpp
@@ -655,7 +655,7 @@ namespace {
/*
* A policy specifier
*/
-class Policy_Information : public ASN1_Object
+class Policy_Information final : public ASN1_Object
{
public:
Policy_Information() = default;
diff --git a/src/lib/x509/x509_ext.h b/src/lib/x509/x509_ext.h
index 134c2ec3e..69647616f 100644
--- a/src/lib/x509/x509_ext.h
+++ b/src/lib/x509/x509_ext.h
@@ -84,7 +84,7 @@ class BOTAN_PUBLIC_API(2,0) Certificate_Extension
/**
* X.509 Certificate Extension List
*/
-class BOTAN_PUBLIC_API(2,0) Extensions : public ASN1_Object
+class BOTAN_PUBLIC_API(2,0) Extensions final : public ASN1_Object
{
public:
void encode_into(class DER_Encoder&) const override;
@@ -307,7 +307,7 @@ class BOTAN_PUBLIC_API(2,0) Alternative_Name : public Certificate_Extension
/**
* Subject Alternative Name Extension
*/
-class BOTAN_PUBLIC_API(2,0) Subject_Alternative_Name : public Alternative_Name
+class BOTAN_PUBLIC_API(2,0) Subject_Alternative_Name final : public Alternative_Name
{
public:
Subject_Alternative_Name* copy() const override
@@ -319,7 +319,7 @@ class BOTAN_PUBLIC_API(2,0) Subject_Alternative_Name : public Alternative_Name
/**
* Issuer Alternative Name Extension
*/
-class BOTAN_PUBLIC_API(2,0) Issuer_Alternative_Name : public Alternative_Name
+class BOTAN_PUBLIC_API(2,0) Issuer_Alternative_Name final : public Alternative_Name
{
public:
Issuer_Alternative_Name* copy() const override
@@ -357,7 +357,7 @@ class BOTAN_PUBLIC_API(2,0) Extended_Key_Usage final : public Certificate_Extens
/**
* Name Constraints
*/
-class BOTAN_PUBLIC_API(2,0) Name_Constraints : public Certificate_Extension
+class BOTAN_PUBLIC_API(2,0) Name_Constraints final : public Certificate_Extension
{
public:
Name_Constraints* copy() const override
diff --git a/src/lib/x509/x509path.h b/src/lib/x509/x509path.h
index 9a7f9542f..2bddd62b1 100644
--- a/src/lib/x509/x509path.h
+++ b/src/lib/x509/x509path.h
@@ -31,7 +31,7 @@ typedef std::vector<std::set<Certificate_Status_Code>> CertificatePathStatusCode
/**
* Specifies restrictions on the PKIX path validation
*/
-class BOTAN_PUBLIC_API(2,0) Path_Validation_Restrictions
+class BOTAN_PUBLIC_API(2,0) Path_Validation_Restrictions final
{
public:
/**
@@ -107,7 +107,7 @@ class BOTAN_PUBLIC_API(2,0) Path_Validation_Restrictions
/**
* Represents the result of a PKIX path validation
*/
-class BOTAN_PUBLIC_API(2,0) Path_Validation_Result
+class BOTAN_PUBLIC_API(2,0) Path_Validation_Result final
{
public:
typedef Certificate_Status_Code Code;
diff --git a/src/lib/x509/x509self.h b/src/lib/x509/x509self.h
index b39f8bdd1..ebbfe66f2 100644
--- a/src/lib/x509/x509self.h
+++ b/src/lib/x509/x509self.h
@@ -18,7 +18,7 @@ namespace Botan {
/**
* Options for X.509 certificates.
*/
-class BOTAN_PUBLIC_API(2,0) X509_Cert_Options
+class BOTAN_PUBLIC_API(2,0) X509_Cert_Options final
{
public:
/**