Coverage Report

Created: 2020-05-23 13:54

/src/botan/build/include/botan/blowfish.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
* Blowfish
3
* (C) 1999-2011 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#ifndef BOTAN_BLOWFISH_H_
9
#define BOTAN_BLOWFISH_H_
10
11
#include <botan/block_cipher.h>
12
13
BOTAN_FUTURE_INTERNAL_HEADER(blowfish.h)
14
15
namespace Botan {
16
17
/**
18
* Blowfish
19
*/
20
class BOTAN_PUBLIC_API(2,0) Blowfish final : public Block_Cipher_Fixed_Params<8, 1, 56>
21
   {
22
   public:
23
      void encrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
24
      void decrypt_n(const uint8_t in[], uint8_t out[], size_t blocks) const override;
25
26
      /**
27
      * Modified EKSBlowfish key schedule, used for bcrypt password hashing
28
      */
29
      void salted_set_key(const uint8_t key[], size_t key_length,
30
                          const uint8_t salt[], size_t salt_length,
31
                          const size_t workfactor, bool salt_first = false);
32
33
      BOTAN_DEPRECATED("Use Blowfish::salted_set_key taking salt length")
34
      void eks_key_schedule(const uint8_t key[], size_t key_length,
35
                            const uint8_t salt[16], size_t workfactor)
36
0
         {
37
0
         salted_set_key(key, key_length, salt, 16, workfactor);
38
0
         }
39
40
      void clear() override;
41
0
      std::string name() const override { return "Blowfish"; }
42
0
      BlockCipher* clone() const override { return new Blowfish; }
43
   private:
44
      void key_schedule(const uint8_t key[], size_t length) override;
45
46
      void key_expansion(const uint8_t key[],
47
                         size_t key_length,
48
                         const uint8_t salt[],
49
                         size_t salt_length);
50
51
      void generate_sbox(secure_vector<uint32_t>& box,
52
                         uint32_t& L, uint32_t& R,
53
                         const uint8_t salt[],
54
                         size_t salt_length,
55
                         size_t salt_off) const;
56
57
      secure_vector<uint32_t> m_S, m_P;
58
   };
59
60
}
61
62
#endif