• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

randombit / botan / 5395967798

28 Jun 2023 12:28AM UTC coverage: 91.737% (+0.01%) from 91.726%
5395967798

push

github

randombit
Merge GH #3606 Add example of custom entropy source

78190 of 85233 relevant lines covered (91.74%)

12513919.75 hits per line

Source File
Press 'n' to go to next uncovered line, 'b' for previous

87.72
/src/lib/filters/comp_filter.cpp
1
/*
2
* Filter interface for compression
3
* (C) 2014,2015,2016 Jack Lloyd
4
* (C) 2015 Matej Kenda
5
*
6
* Botan is released under the Simplified BSD License (see license.txt)
7
*/
8

9
#include <botan/filters.h>
10

11
#include <botan/exceptn.h>
12
#include <botan/internal/fmt.h>
13

14
#if defined(BOTAN_HAS_COMPRESSION)
15
   #include <botan/compression.h>
16
#endif
17

18
namespace Botan {
19

20
#if defined(BOTAN_HAS_COMPRESSION)
21

22
Compression_Filter::Compression_Filter(std::string_view type, size_t level, size_t bs) :
2✔
23
      m_comp(Compression_Algorithm::create(type)), m_buffersize(std::max<size_t>(bs, 256)), m_level(level) {
2✔
24
   if(!m_comp) {
2✔
25
      throw Invalid_Argument(fmt("Compression type '{}' not found", type));
×
26
   }
27
}
2✔
28

29
Compression_Filter::~Compression_Filter() = default;
8✔
30

31
std::string Compression_Filter::name() const {
2✔
32
   return m_comp->name();
2✔
33
}
34

35
void Compression_Filter::start_msg() {
2✔
36
   m_comp->start(m_level);
2✔
37
}
2✔
38

39
void Compression_Filter::write(const uint8_t input[], size_t input_length) {
2✔
40
   while(input_length) {
4✔
41
      const size_t take = std::min(m_buffersize, input_length);
2✔
42
      BOTAN_ASSERT(take > 0, "Consumed something");
2✔
43

44
      m_buffer.assign(input, input + take);
2✔
45
      m_comp->update(m_buffer);
2✔
46

47
      send(m_buffer);
2✔
48

49
      input += take;
2✔
50
      input_length -= take;
2✔
51
   }
52
}
2✔
53

54
void Compression_Filter::flush() {
×
55
   m_buffer.clear();
×
56
   m_comp->update(m_buffer, 0, true);
×
57
   send(m_buffer);
×
58
}
×
59

60
void Compression_Filter::end_msg() {
2✔
61
   m_buffer.clear();
2✔
62
   m_comp->finish(m_buffer);
2✔
63
   send(m_buffer);
2✔
64
}
2✔
65

66
Decompression_Filter::Decompression_Filter(std::string_view type, size_t bs) :
2✔
67
      m_comp(Decompression_Algorithm::create(type)), m_buffersize(std::max<size_t>(bs, 256)) {
2✔
68
   if(!m_comp) {
2✔
69
      throw Invalid_Argument(fmt("Compression type '{}' not found", type));
×
70
   }
71
}
2✔
72

73
Decompression_Filter::~Decompression_Filter() = default;
8✔
74

75
std::string Decompression_Filter::name() const {
2✔
76
   return m_comp->name();
2✔
77
}
78

79
void Decompression_Filter::start_msg() {
2✔
80
   m_comp->start();
2✔
81
}
2✔
82

83
void Decompression_Filter::write(const uint8_t input[], size_t input_length) {
2✔
84
   while(input_length) {
4✔
85
      const size_t take = std::min(m_buffersize, input_length);
2✔
86
      BOTAN_ASSERT(take > 0, "Consumed something");
2✔
87

88
      m_buffer.assign(input, input + take);
2✔
89
      m_comp->update(m_buffer);
2✔
90

91
      send(m_buffer);
2✔
92

93
      input += take;
2✔
94
      input_length -= take;
2✔
95
   }
96
}
2✔
97

98
void Decompression_Filter::end_msg() {
2✔
99
   m_buffer.clear();
2✔
100
   m_comp->finish(m_buffer);
2✔
101
   send(m_buffer);
2✔
102
}
2✔
103

104
#endif
105

106
}  // namespace Botan
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc