Coverage Report

Created: 2021-02-21 07:20

/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 <vector>
14
15
namespace Botan {
16
17
/**
18
A class encapsulating a SCAN name (similar to JCE conventions)
19
http://www.users.zetnet.co.uk/hopwood/crypto/scan/
20
*/
21
class BOTAN_PUBLIC_API(2,0) SCAN_Name final
22
   {
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 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
231k
      const std::string& algo_name() const { return m_alg_name; }
45
46
      /**
47
      * @return number of arguments
48
      */
49
115k
      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
      bool arg_count_between(size_t lower, size_t upper) const
57
90
         { return ((arg_count() >= lower) && (arg_count() <= upper)); }
58
59
      /**
60
      * @param i which argument
61
      * @return ith argument
62
      */
63
      std::string arg(size_t i) const;
64
65
      /**
66
      * @param i which argument
67
      * @param def_value the default value
68
      * @return ith argument or the default value
69
      */
70
      std::string arg(size_t i, const std::string& def_value) const;
71
72
      /**
73
      * @param i which argument
74
      * @param def_value the default value
75
      * @return ith argument as an integer, or the default value
76
      */
77
      size_t arg_as_integer(size_t i, size_t def_value) const;
78
79
      /**
80
      * @param i which argument
81
      * @return ith argument as an integer
82
      */
83
      size_t arg_as_integer(size_t i) const;
84
85
      /**
86
      * @return cipher mode (if any)
87
      */
88
      std::string cipher_mode() const
89
0
         { return (m_mode_info.size() >= 1) ? m_mode_info[0] : ""; }
90
91
      /**
92
      * @return cipher mode padding (if any)
93
      */
94
      std::string cipher_mode_pad() const
95
0
         { return (m_mode_info.size() >= 2) ? m_mode_info[1] : ""; }
96
97
   private:
98
      std::string m_orig_algo_spec;
99
      std::string m_alg_name;
100
      std::vector<std::string> m_args;
101
      std::vector<std::string> m_mode_info;
102
   };
103
104
// This is unrelated but it is convenient to stash it here
105
template<typename T>
106
std::vector<std::string> probe_providers_of(const std::string& algo_spec,
107
                                            const std::vector<std::string>& possible)
108
426
   {
109
426
   std::vector<std::string> providers;
110
426
   for(auto&& prov : possible)
111
1.27k
      {
112
1.27k
      std::unique_ptr<T> o(T::create(algo_spec, prov));
113
1.27k
      if(o)
114
426
         {
115
426
         providers.push_back(prov); // available
116
426
         }
117
1.27k
      }
118
426
   return providers;
119
426
   }
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<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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&)
Line
Count
Source
108
250
   {
109
250
   std::vector<std::string> providers;
110
250
   for(auto&& prov : possible)
111
750
      {
112
750
      std::unique_ptr<T> o(T::create(algo_spec, prov));
113
750
      if(o)
114
250
         {
115
250
         providers.push_back(prov); // available
116
250
         }
117
750
      }
118
250
   return providers;
119
250
   }
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<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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&)
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<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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&)
Line
Count
Source
108
176
   {
109
176
   std::vector<std::string> providers;
110
176
   for(auto&& prov : possible)
111
528
      {
112
528
      std::unique_ptr<T> o(T::create(algo_spec, prov));
113
528
      if(o)
114
176
         {
115
176
         providers.push_back(prov); // available
116
176
         }
117
528
      }
118
176
   return providers;
119
176
   }
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<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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::PBKDF>(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, 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&)
120
121
}
122
123
#endif