summaryrefslogtreecommitdiffstats
path: root/src/opcua/x509/qopcuakeypair.cpp
blob: 90e60fe16d614c1be014456768b2b9b71045af17 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
/****************************************************************************
**
** Copyright (C) 2019 The Qt Company Ltd.
** Contact: http://www.qt.io/licensing/
**
** This file is part of the Qt OPC UA module.
**
** $QT_BEGIN_LICENSE:LGPL3$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see http://www.qt.io/terms-conditions. For further
** information use the contact form at http://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPLv3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or later as published by the Free
** Software Foundation and appearing in the file LICENSE.GPL included in
** the packaging of this file. Please review the following information to
** ensure the GNU General Public License version 2.0 requirements will be
** met: http://www.gnu.org/licenses/gpl-2.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

#include "qopcuakeypair.h"
#include "qopcuakeypair_p.h"

QT_BEGIN_NAMESPACE

/*!
    \class QOpcUaKeyPair
    \inmodule QtOpcUa
    \since 5.14

    \brief QOpcUaKeyPair handles private and public key pairs

    This class is currently available as a Technology Preview, and therefore the API
    and functionality provided by the class may be subject to change at any time without
    prior notice.

    It can generate, load and store keys for asymmetric encryption.
    Instances of this class have to be passed to functions which need a key.
*/

/*!
    \enum QOpcUaKeyPair::RsaKeyStrength

    This enum type specifies the strength of a RSA key.

    \value Bits1024
           A key strength of 1024 bits.
    \value Bits2048
           A key strength of 2048 bits.
    \value Bits4096
           A key strength of 4096 bits.
*/

/*!
    \enum QOpcUaKeyPair::KeyType

    This enum type specifies the type of a key.

    \value Rsa
           An RSA key
    \value Empty
           No key is available.
    \value Unknown
           The type of key is not handled.
*/

/*!
    \enum QOpcUaKeyPair::Cipher

    Ciphers for encryption of private keys.

    \value Aes128Cbc
           Encrypting AES128 with CBC
    \value Unencrypted
           The Key will not be encrypted.
*/

/*!
    \fn QOpcUaKeyPair::passphaseNeeded()

    This signal is emitted when a private key needs a passphrase for en- or decryption.

    Place the passphrase in \a passphrase.
    \a writeOperation is \c true when the passphrase is needed for exporting a key, and
    is \c false when the passphrase is needed for importing a key.

    \a maximumPassphraseSize specifies the maximum length in bytes for the passphrase.
    All characters in \a passphrase exceeding this limit will be ignored.

    In case you have use this signal crossing thread boundaries you have to connect it
    with \c Qt::BlockingQueuedConnection.
*/

/*!
    Creates a new empty key pair.
*/
QOpcUaKeyPair::QOpcUaKeyPair(QObject *parent)
    : QObject(*(new QOpcUaKeyPairPrivate()), parent)
{
}
/*!
    Destroys the key pair.
*/
QOpcUaKeyPair::~QOpcUaKeyPair()
{
}

/*!
    Loads a key from PEM encoded data in \a data.
    Returns \c true on success and \c false otherwise.

    It detects from the PEM header if the data contains a private or
    public key. Loading encrypted keys is possible by connecting a
    function to the signal \c passphraseNeeded for provision of the
    passphrase.
*/
bool QOpcUaKeyPair::loadFromPemData(const QByteArray &data)
{
    Q_D(QOpcUaKeyPair);
    return d->loadFromPemData(data);
}

/*!
    Loads a key from PEM encoded data in \a data.
    Returns \c true on success and \c false otherwise.

    It detects from the PEM header if the data contains a private or
    public key. Loading encrypted keys is possible by connecting a
    function to the signal \c passphraseNeeded for provision of the
    passphrase.
*/
QByteArray QOpcUaKeyPair::publicKeyToByteArray() const
{
    Q_D(const QOpcUaKeyPair);
    return d->publicKeyToByteArray();
}

/*!
    Returns the type of the current key.
*/
QOpcUaKeyPair::KeyType QOpcUaKeyPair::type() const
{
    Q_D(const QOpcUaKeyPair);
    return d->keyType();
}

/*!
    Returns \c true if the current key contains a private key, otherwise \c false.
*/
bool QOpcUaKeyPair::hasPrivateKey() const
{
    Q_D(const QOpcUaKeyPair);
    return d->hasPrivateKey();
}

/*!
    Returns the PEM encoded private key.
    In case there is no private key, an empty byte array is returned.

    The encryption of the key has to be specified using the parameters
    \a cipher and \a password. In order to store the key unencrypted
    the cipher \c Cipher::Unencrypted has to be used.
*/
QByteArray QOpcUaKeyPair::privateKeyToByteArray(Cipher cipher, const QString &password) const
{
    Q_D(const QOpcUaKeyPair);
    return d->privateKeyToByteArray(cipher, password);
}


/*!
    Generates a new asymmetric RSA key pair.

    The length of the key can be specified by the \c strength parameter.
*/
void QOpcUaKeyPair::generateRsaKey(QOpcUaKeyPair::RsaKeyStrength strength)
{
    Q_D(QOpcUaKeyPair);
    d->generateRsaKey(strength);
}

QT_END_NAMESPACE