diff options
Diffstat (limited to 'src/opcua/x509/qopcuakeypair.cpp')
-rw-r--r-- | src/opcua/x509/qopcuakeypair.cpp | 198 |
1 files changed, 198 insertions, 0 deletions
diff --git a/src/opcua/x509/qopcuakeypair.cpp b/src/opcua/x509/qopcuakeypair.cpp new file mode 100644 index 0000000..90e60fe --- /dev/null +++ b/src/opcua/x509/qopcuakeypair.cpp @@ -0,0 +1,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 |