aboutsummaryrefslogtreecommitdiffstats
path: root/src/lib/stream/stream_cipher.cpp
blob: 91b68b38a4b61dc89bffeea2c02a6c11400ce73b (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
/*
* Stream Ciphers
* (C) 2015 Jack Lloyd
*
* Botan is released under the Simplified BSD License (see license.txt)
*/

#include <botan/stream_cipher.h>
#include <botan/internal/algo_registry.h>

#if defined(BOTAN_HAS_CHACHA)
#include <botan/chacha.h>
#endif

#if defined(BOTAN_HAS_SALSA20)
#include <botan/salsa20.h>
#endif

#if defined(BOTAN_HAS_CTR_BE)
#include <botan/ctr.h>
#endif

#if defined(BOTAN_HAS_OFB)
#include <botan/ofb.h>
#endif

#if defined(BOTAN_HAS_RC4)
#include <botan/rc4.h>
#endif

namespace Botan {

std::unique_ptr<StreamCipher> StreamCipher::create(const std::string& algo_spec,
                                                   const std::string& provider)
   {
   return std::unique_ptr<StreamCipher>(make_a<StreamCipher>(algo_spec, provider));
   }

std::vector<std::string> StreamCipher::providers(const std::string& algo_spec)
   {
   return providers_of<StreamCipher>(StreamCipher::Spec(algo_spec));
   }

StreamCipher::StreamCipher() {}
StreamCipher::~StreamCipher() {}

void StreamCipher::set_iv(const byte[], size_t iv_len)
   {
   if(!valid_iv_length(iv_len))
      throw Invalid_IV_Length(name(), iv_len);
   }

#if defined(BOTAN_HAS_CHACHA)
BOTAN_REGISTER_T_NOARGS(StreamCipher, ChaCha);
#endif

#if defined(BOTAN_HAS_SALSA20)
BOTAN_REGISTER_T_NOARGS(StreamCipher, Salsa20);
#endif

#if defined(BOTAN_HAS_CTR_BE)
BOTAN_REGISTER_NAMED_T(StreamCipher, "CTR-BE", CTR_BE, CTR_BE::make);
#endif

#if defined(BOTAN_HAS_OFB)
BOTAN_REGISTER_NAMED_T(StreamCipher, "OFB", OFB, OFB::make);
#endif

#if defined(BOTAN_HAS_RC4)
BOTAN_REGISTER_NAMED_T(StreamCipher, "RC4", RC4, RC4::make);
#endif

}