Coverage Report

Created: 2023-12-08 07:00

/src/botan/build/include/botan/internal/scan_name.h
Line
Count
Source (jump to first uncovered line)
1
/*
2
* SCAN Name Abstraction
3
* (C) 2008,2015 Jack Lloyd
4
*
5
* Botan is released under the Simplified BSD License (see license.txt)
6
*/
7
8
#ifndef BOTAN_SCAN_NAME_H_
9
#define BOTAN_SCAN_NAME_H_
10
11
#include <botan/types.h>
12
#include <string>
13
#include <string_view>
14
#include <vector>
15
16
namespace Botan {
17
18
/**
19
A class encapsulating a SCAN name (similar to JCE conventions)
20
http://www.users.zetnet.co.uk/hopwood/crypto/scan/
21
*/
22
class SCAN_Name final {
23
   public:
24
      /**
25
      * Create a SCAN_Name
26
      * @param algo_spec A SCAN-format name
27
      */
28
      explicit SCAN_Name(const char* algo_spec);
29
30
      /**
31
      * Create a SCAN_Name
32
      * @param algo_spec A SCAN-format name
33
      */
34
      explicit SCAN_Name(std::string_view algo_spec);
35
36
      /**
37
      * @return original input string
38
      */
39
0
      const std::string& to_string() const { return m_orig_algo_spec; }
40
41
      /**
42
      * @return algorithm name
43
      */
44
1.33k
      const std::string& algo_name() const { return m_alg_name; }
45
46
      /**
47
      * @return number of arguments
48
      */
49
1.06k
      size_t arg_count() const { return m_args.size(); }
50
51
      /**
52
      * @param lower is the lower bound
53
      * @param upper is the upper bound
54
      * @return if the number of arguments is between lower and upper
55
      */
56
0
      bool arg_count_between(size_t lower, size_t upper) const {
57
0
         return ((arg_count() >= lower) && (arg_count() <= upper));
58
0
      }
59
60
      /**
61
      * @param i which argument
62
      * @return ith argument
63
      */
64
      std::string arg(size_t i) const;
65
66
      /**
67
      * @param i which argument
68
      * @param def_value the default value
69
      * @return ith argument or the default value
70
      */
71
      std::string arg(size_t i, std::string_view def_value) const;
72
73
      /**
74
      * @param i which argument
75
      * @param def_value the default value
76
      * @return ith argument as an integer, or the default value
77
      */
78
      size_t arg_as_integer(size_t i, size_t def_value) const;
79
80
      /**
81
      * @param i which argument
82
      * @return ith argument as an integer
83
      */
84
      size_t arg_as_integer(size_t i) const;
85
86
      /**
87
      * @return cipher mode (if any)
88
      */
89
0
      std::string cipher_mode() const { return (!m_mode_info.empty()) ? m_mode_info[0] : ""; }
90
91
      /**
92
      * @return cipher mode padding (if any)
93
      */
94
0
      std::string cipher_mode_pad() const { return (m_mode_info.size() >= 2) ? m_mode_info[1] : ""; }
95
96
   private:
97
      std::string m_orig_algo_spec;
98
      std::string m_alg_name;
99
      std::vector<std::string> m_args;
100
      std::vector<std::string> m_mode_info;
101
};
102
103
// This is unrelated but it is convenient to stash it here
104
template <typename T>
105
std::vector<std::string> probe_providers_of(std::string_view algo_spec,
106
0
                                            const std::vector<std::string>& possible = {"base"}) {
107
0
   std::vector<std::string> providers;
108
0
   for(auto&& prov : possible) {
109
0
      auto o = T::create(algo_spec, prov);
110
0
      if(o) {
111
0
         providers.push_back(prov);  // available
112
0
      }
113
0
   }
114
0
   return providers;
115
0
}
Unexecuted instantiation: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > Botan::probe_providers_of<Botan::HashFunction>(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
Unexecuted instantiation: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > Botan::probe_providers_of<Botan::KDF>(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
Unexecuted instantiation: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > Botan::probe_providers_of<Botan::MessageAuthenticationCode>(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
Unexecuted instantiation: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > Botan::probe_providers_of<Botan::PasswordHashFamily>(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
Unexecuted instantiation: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > Botan::probe_providers_of<Botan::StreamCipher>(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
Unexecuted instantiation: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > Botan::probe_providers_of<Botan::XOF>(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
Unexecuted instantiation: std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > Botan::probe_providers_of<Botan::BlockCipher>(std::__1::basic_string_view<char, std::__1::char_traits<char> >, std::__1::vector<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> >, std::__1::allocator<std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > > > const&)
116
117
}  // namespace Botan
118
119
#endif