1 /*
2   tofuinfo.h - wraps gpgme tofu info
3   Copyright (C) 2016 by Bundesamt für Sicherheit in der Informationstechnik
4   Software engineering by Intevation GmbH
5 
6   This file is part of GPGME++.
7 
8   GPGME++ is free software; you can redistribute it and/or
9   modify it under the terms of the GNU Library General Public
10   License as published by the Free Software Foundation; either
11   version 2 of the License, or (at your option) any later version.
12 
13   GPGME++ is distributed in the hope that it will be useful,
14   but WITHOUT ANY WARRANTY; without even the implied warranty of
15   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
16   GNU Library General Public License for more details.
17 
18   You should have received a copy of the GNU Library General Public License
19   along with GPGME++; see the file COPYING.LIB.  If not, write to the
20   Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
21   Boston, MA 02110-1301, USA.
22 */
23 
24 #ifndef __GPGMEPP_TOFUINFO_H__
25 #define __GPGMEPP_TOFUINFO_H__
26 
27 #include "gpgmepp_export.h"
28 
29 #include "global.h"
30 
31 #include <memory>
32 
33 namespace GpgME
34 {
35 
36 class GPGMEPP_EXPORT TofuInfo
37 {
38 public:
39     TofuInfo();
40     explicit TofuInfo(gpgme_tofu_info_t info);
41 
42     const TofuInfo &operator=(TofuInfo other)
43     {
44         swap(other);
45         return *this;
46     }
47 
swap(TofuInfo & other)48     void swap(TofuInfo &other)
49     {
50         using std::swap;
51         swap(this->d, other.d);
52     }
53 
54     bool isNull() const;
55 
56     /* @enum Validity
57      * @brief The TOFU Validity. */
58     enum Validity : unsigned int {
59         /*! Unknown (uninitialized).*/
60         ValidityUnknown,
61         /*! TOFU Conflict.*/
62         Conflict,
63         /*! Key without history.*/
64         NoHistory,
65         /*! Key with too little history.*/
66         LittleHistory,
67         /*! Key with enough history for basic trust.*/
68         BasicHistory,
69         /*! Key with a lot of history.*/
70         LargeHistory,
71     };
72     Validity validity() const;
73 
74     /* @enum Policy
75      * @brief The TOFU Validity. */
76     enum Policy : unsigned int {
77         /*! GPGME_TOFU_POLICY_NONE */
78         PolicyNone,
79         /*! GPGME_TOFU_POLICY_AUTO */
80         PolicyAuto,
81         /*! GPGME_TOFU_POLICY_GOOD */
82         PolicyGood,
83         /*! GPGME_TOFU_POLICY_UNKNOWN */
84         PolicyUnknown,
85         /*! GPGME_TOFU_POLICY_BAD */
86         PolicyBad,
87         /*! GPGME_TOFU_POLICY_ASK */
88         PolicyAsk,
89     };
90     Policy policy() const;
91 
92     /* Number of signatures seen for this binding.  Capped at USHRT_MAX.  */
93     unsigned short signCount() const;
94 
95     /* Number of encryption done to this binding.  Capped at USHRT_MAX.  */
96     unsigned short encrCount() const;
97 
98     /** Number of seconds since epoch when the first message was verified */
99     unsigned long signFirst() const;
100 
101     /** Number of seconds since epoch when the last message was verified */
102     unsigned long signLast() const;
103 
104     /** Number of seconds since epoch when the first message was encrypted */
105     unsigned long encrFirst() const;
106 
107     /** Number of seconds since epoch when the last message was encrypted */
108     unsigned long encrLast() const;
109 
110     /* If non-NULL a human readable string summarizing the TOFU data. */
111     const char *description() const;
112 
113 private:
114     class Private;
115     std::shared_ptr<Private> d;
116 };
117 
118 GPGMEPP_EXPORT std::ostream &operator<<(std::ostream &os, const TofuInfo &info);
119 
120 } // namespace GpgME
121 
122 GPGMEPP_MAKE_STD_SWAP_SPECIALIZATION(TofuInfo)
123 #endif // __GPGMEPP_TOFUINFO_H__
124