File indexing completed on 2024-06-23 05:14:17

0001 /* -*- mode: c++; c-basic-offset:4 -*-
0002     utils/keyparameters.h
0003 
0004     This file is part of Kleopatra, the KDE keymanager
0005     SPDX-FileCopyrightText: 2020, 2022 g10 Code GmbH
0006     SPDX-FileContributor: Ingo Klöcker <dev@ingo-kloecker.de>
0007 
0008     SPDX-License-Identifier: GPL-2.0-or-later
0009 */
0010 
0011 #pragma once
0012 
0013 #include <gpgme++/key.h>
0014 
0015 #include <memory>
0016 
0017 class QDate;
0018 class QString;
0019 
0020 namespace Kleo
0021 {
0022 class KeyUsage;
0023 
0024 class KeyParameters
0025 {
0026 public:
0027     enum Protocol {
0028         NoProtocol,
0029         OpenPGP,
0030         CMS,
0031     };
0032 
0033     KeyParameters();
0034     explicit KeyParameters(Protocol protocol);
0035     ~KeyParameters();
0036 
0037     KeyParameters(const KeyParameters &other);
0038     KeyParameters &operator=(const KeyParameters &other);
0039 
0040     KeyParameters(KeyParameters &&other);
0041     KeyParameters &operator=(KeyParameters &&other);
0042 
0043     Protocol protocol() const;
0044 
0045     void setKeyType(GpgME::Subkey::PubkeyAlgo type);
0046     GpgME::Subkey::PubkeyAlgo keyType() const;
0047     void setCardKeyRef(const QString &cardKeyRef);
0048     QString cardKeyRef() const;
0049     void setKeyLength(unsigned int length);
0050     unsigned int keyLength() const;
0051     void setKeyCurve(const QString &curve);
0052     QString keyCurve() const;
0053     void setKeyUsage(const KeyUsage &usage);
0054     KeyUsage keyUsage() const;
0055 
0056     void setSubkeyType(GpgME::Subkey::PubkeyAlgo type);
0057     GpgME::Subkey::PubkeyAlgo subkeyType() const;
0058     void setSubkeyLength(unsigned int length);
0059     unsigned int subkeyLength() const;
0060     void setSubkeyCurve(const QString &curve);
0061     QString subkeyCurve() const;
0062     void setSubkeyUsage(const KeyUsage &usage);
0063     KeyUsage subkeyUsage() const;
0064 
0065     void setExpirationDate(const QDate &date);
0066     QDate expirationDate() const;
0067 
0068     void setName(const QString &name);
0069     QString name() const;
0070     void setComment(const QString &comment);
0071     QString comment() const;
0072     void setDN(const QString &dn);
0073     QString dn() const;
0074     void setEmail(const QString &email);
0075     void addEmail(const QString &email);
0076     std::vector<QString> emails() const;
0077     void addDomainName(const QString &domain);
0078     std::vector<QString> domainNames() const;
0079     void addURI(const QString &uri);
0080     std::vector<QString> uris() const;
0081 
0082     void addDesignatedRevoker(const QString &fpr);
0083     std::vector<QString> designatedRevokers() const;
0084 
0085     QString toString() const;
0086 
0087 private:
0088     class Private;
0089     std::unique_ptr<Private> d;
0090 };
0091 
0092 }