Botan 1.10.17
engine.h
Go to the documentation of this file.
1/*
2* Engine
3* (C) 1999-2007 Jack Lloyd
4*
5* Distributed under the terms of the Botan license
6*/
7
8#ifndef BOTAN_ENGINE_H__
9#define BOTAN_ENGINE_H__
10
11#include <botan/scan_name.h>
12#include <botan/block_cipher.h>
13#include <botan/stream_cipher.h>
14#include <botan/hash.h>
15#include <botan/mac.h>
16#include <botan/pbkdf.h>
17#include <botan/pow_mod.h>
18#include <botan/pk_keys.h>
19#include <botan/pk_ops.h>
20
21namespace Botan {
22
24class Keyed_Filter;
25
26/**
27* Base class for all engines. All non-pure virtual functions simply
28* return NULL, indicating the algorithm in question is not
29* supported. Subclasses can reimplement whichever function(s)
30* they want to hook in a particular type.
31*/
32class BOTAN_DLL Engine
33 {
34 public:
35 virtual ~Engine() {}
36
37 /**
38 * @return name of this engine
39 */
40 virtual std::string provider_name() const = 0;
41
42 /**
43 * @param algo_spec the algorithm name/specification
44 * @param af an algorithm factory object
45 * @return newly allocated object, or NULL
46 */
47 virtual BlockCipher*
48 find_block_cipher(const SCAN_Name& algo_spec,
49 Algorithm_Factory& af) const;
50
51 /**
52 * @param algo_spec the algorithm name/specification
53 * @param af an algorithm factory object
54 * @return newly allocated object, or NULL
55 */
56 virtual StreamCipher*
57 find_stream_cipher(const SCAN_Name& algo_spec,
58 Algorithm_Factory& af) const;
59
60 /**
61 * @param algo_spec the algorithm name/specification
62 * @param af an algorithm factory object
63 * @return newly allocated object, or NULL
64 */
65 virtual HashFunction*
66 find_hash(const SCAN_Name& algo_spec,
67 Algorithm_Factory& af) const;
68
69 /**
70 * @param algo_spec the algorithm name/specification
71 * @param af an algorithm factory object
72 * @return newly allocated object, or NULL
73 */
75 find_mac(const SCAN_Name& algo_spec,
76 Algorithm_Factory& af) const;
77
78 /**
79 * @param algo_spec the algorithm name/specification
80 * @param af an algorithm factory object
81 * @return newly allocated object, or NULL
82 */
83 virtual PBKDF* find_pbkdf(const SCAN_Name& algo_spec,
84 Algorithm_Factory& af) const;
85
86 /**
87 * @param n the modulus
88 * @param hints any use hints
89 * @return newly allocated object, or NULL
90 */
92 mod_exp(const BigInt& n,
93 Power_Mod::Usage_Hints hints) const;
94
95 /**
96 * Return a new cipher object
97 * @param algo_spec the algorithm name/specification
98 * @param dir specifies if encryption or decryption is desired
99 * @param af an algorithm factory object
100 * @return newly allocated object, or NULL
101 */
102 virtual Keyed_Filter* get_cipher(const std::string& algo_spec,
103 Cipher_Dir dir,
105
106 /**
107 * Return a new operator object for this key, if possible
108 * @param key the key we want an operator for
109 * @return newly allocated operator object, or NULL
110 */
111 virtual PK_Ops::Key_Agreement*
112 get_key_agreement_op(const Private_Key& key) const;
113
114 /**
115 * Return a new operator object for this key, if possible
116 * @param key the key we want an operator for
117 * @return newly allocated operator object, or NULL
118 */
119 virtual PK_Ops::Signature*
120 get_signature_op(const Private_Key& key) const;
121
122 /**
123 * Return a new operator object for this key, if possible
124 * @param key the key we want an operator for
125 * @return newly allocated operator object, or NULL
126 */
127 virtual PK_Ops::Verification*
128 get_verify_op(const Public_Key& key) const;
129
130 /**
131 * Return a new operator object for this key, if possible
132 * @param key the key we want an operator for
133 * @return newly allocated operator object, or NULL
134 */
135 virtual PK_Ops::Encryption*
136 get_encryption_op(const Public_Key& key) const;
137
138 /**
139 * Return a new operator object for this key, if possible
140 * @param key the key we want an operator for
141 * @return newly allocated operator object, or NULL
142 */
143 virtual PK_Ops::Decryption*
144 get_decryption_op(const Private_Key& key) const;
145 };
146
147}
148
149#endif
virtual MessageAuthenticationCode * find_mac(const SCAN_Name &algo_spec, Algorithm_Factory &af) const
Definition engine.cpp:34
virtual PK_Ops::Signature * get_signature_op(const Private_Key &key) const
Definition engine.cpp:68
virtual Modular_Exponentiator * mod_exp(const BigInt &n, Power_Mod::Usage_Hints hints) const
Definition engine.cpp:48
virtual PK_Ops::Decryption * get_decryption_op(const Private_Key &key) const
Definition engine.cpp:86
virtual std::string provider_name() const =0
virtual PK_Ops::Verification * get_verify_op(const Public_Key &key) const
Definition engine.cpp:74
virtual PK_Ops::Encryption * get_encryption_op(const Public_Key &key) const
Definition engine.cpp:80
virtual Keyed_Filter * get_cipher(const std::string &algo_spec, Cipher_Dir dir, Algorithm_Factory &af)
Definition engine.cpp:54
virtual ~Engine()
Definition engine.h:35
virtual HashFunction * find_hash(const SCAN_Name &algo_spec, Algorithm_Factory &af) const
Definition engine.cpp:27
virtual PBKDF * find_pbkdf(const SCAN_Name &algo_spec, Algorithm_Factory &af) const
Definition engine.cpp:41
virtual PK_Ops::Key_Agreement * get_key_agreement_op(const Private_Key &key) const
Definition engine.cpp:62
virtual StreamCipher * find_stream_cipher(const SCAN_Name &algo_spec, Algorithm_Factory &af) const
Definition engine.cpp:20
virtual BlockCipher * find_block_cipher(const SCAN_Name &algo_spec, Algorithm_Factory &af) const
Definition engine.cpp:13
Cipher_Dir
Definition sym_algo.h:87