Coverage Report

Created: 2024-11-29 06:10

/src/botan/build/include/internal/botan/internal/aes_crystals_xof.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
 * XOF based on AES-256/CTR for CRYSTALS Kyber/Dilithium 90s-modes
3
 * (C) 2023 Jack Lloyd
4
 *     2023 René Meusel - Rohde & Schwarz Cybersecurity
5
 *
6
 * Botan is released under the Simplified BSD License (see license.txt)
7
 */
8
9
#ifndef BOTAN_AES_CRYSTALS_XOF_H_
10
#define BOTAN_AES_CRYSTALS_XOF_H_
11
12
#include <botan/secmem.h>
13
#include <botan/xof.h>
14
15
namespace Botan {
16
17
class StreamCipher;
18
19
/**
20
 * XOF implementation for Kyber/Dilithium 90s-modes based on
21
 * AES-256 in counter mode.
22
 *
23
 * This is an internal class that is not meant for consumption
24
 * by library users. It is therefore not registered in XOF::create().
25
 */
26
class BOTAN_TEST_API AES_256_CTR_XOF final : public XOF {
27
   public:
28
      AES_256_CTR_XOF();
29
      ~AES_256_CTR_XOF() override;
30
31
      void reset() override;
32
33
0
      std::string name() const override { return "CTR-BE(AES-256)"; }
34
35
      /**
36
       * Checks that the given @p iv_length is compatible with this XOF
37
       */
38
      bool valid_salt_length(size_t iv_length) const override;
39
      Key_Length_Specification key_spec() const override;
40
41
0
      size_t block_size() const override { return 16; }
42
43
      std::unique_ptr<XOF> copy_state() const override;
44
45
0
      std::unique_ptr<XOF> new_object() const override { return std::make_unique<AES_256_CTR_XOF>(); }
46
47
0
      bool accepts_input() const override { return false; }
48
49
   private:
50
      /**
51
       * Sets the @p IV and @p key of the underlying AES-256/CTR object.
52
       * Do not call AES_256_CTR_XOF::update(), on this object!
53
       */
54
      void start_msg(std::span<const uint8_t> iv = {}, std::span<const uint8_t> key = {}) override;
55
56
      /**
57
       * @throws Not_Implemented, use XOF::start() instead of XOF::update()
58
       */
59
      void add_data(std::span<const uint8_t>) override;
60
61
      void generate_bytes(std::span<uint8_t> output) override;
62
63
   private:
64
      std::unique_ptr<StreamCipher> m_stream_cipher;
65
};
66
67
}  // namespace Botan
68
69
#endif