Botan
1.11.15
|
00001 /* 00002 * Public Key Algos Utility Header 00003 * (C) 2015 Jack Lloyd 00004 * 00005 * Botan is released under the Simplified BSD License (see license.txt) 00006 */ 00007 00008 #ifndef BOTAN_PK_UTILS_H__ 00009 #define BOTAN_PK_UTILS_H__ 00010 00011 #include <botan/internal/algo_registry.h> 00012 #include <botan/pk_ops.h> 00013 #include <botan/numthry.h> 00014 #include <algorithm> 00015 00016 namespace Botan { 00017 00018 template<typename OP, typename T> 00019 OP* make_pk_op(const typename T::Spec& spec) 00020 { 00021 if(auto* key = dynamic_cast<const typename T::Key_Type*>(&spec.key())) 00022 return new T(*key, spec.padding()); 00023 return nullptr; 00024 } 00025 00026 #define BOTAN_REGISTER_PK_OP(T, NAME, TYPE) BOTAN_REGISTER_NAMED_T(T, NAME, TYPE, (make_pk_op<T, TYPE>)) 00027 00028 #define BOTAN_REGISTER_PK_ENCRYPTION_OP(NAME, TYPE) BOTAN_REGISTER_PK_OP(PK_Ops::Encryption, NAME, TYPE) 00029 #define BOTAN_REGISTER_PK_DECRYPTION_OP(NAME, TYPE) BOTAN_REGISTER_PK_OP(PK_Ops::Decryption, NAME, TYPE) 00030 #define BOTAN_REGISTER_PK_SIGNATURE_OP(NAME, TYPE) BOTAN_REGISTER_PK_OP(PK_Ops::Signature, NAME, TYPE) 00031 #define BOTAN_REGISTER_PK_VERIFY_OP(NAME, TYPE) BOTAN_REGISTER_PK_OP(PK_Ops::Verification, NAME, TYPE) 00032 #define BOTAN_REGISTER_PK_KEY_AGREE_OP(NAME, TYPE) BOTAN_REGISTER_PK_OP(PK_Ops::Key_Agreement, NAME, TYPE) 00033 00034 } 00035 00036 #endif