summaryrefslogtreecommitdiffstats
path: root/src/network/ssl/qsslkey_winrt.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/network/ssl/qsslkey_winrt.cpp')
-rw-r--r--src/network/ssl/qsslkey_winrt.cpp134
1 files changed, 1 insertions, 133 deletions
diff --git a/src/network/ssl/qsslkey_winrt.cpp b/src/network/ssl/qsslkey_winrt.cpp
index 1c625081a4..c1dc7890f7 100644
--- a/src/network/ssl/qsslkey_winrt.cpp
+++ b/src/network/ssl/qsslkey_winrt.cpp
@@ -59,136 +59,4 @@ using namespace ABI::Windows::Security::Cryptography::Certificates;
using namespace ABI::Windows::Security::Cryptography::Core;
using namespace ABI::Windows::Storage::Streams;
-QT_BEGIN_NAMESPACE
-
-struct SslKeyGlobal
-{
- SslKeyGlobal()
- {
- HRESULT hr;
- hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Security_Cryptography_CryptographicBuffer).Get(),
- &bufferFactory);
- Q_ASSERT_SUCCEEDED(hr);
-
- ComPtr<IAsymmetricKeyAlgorithmProviderStatics> keyProviderFactory;
- hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Security_Cryptography_Core_AsymmetricKeyAlgorithmProvider).Get(),
- &keyProviderFactory);
- Q_ASSERT_SUCCEEDED(hr);
-
- ComPtr<IAsymmetricAlgorithmNamesStatics> algorithmNames;
- hr = GetActivationFactory(HString::MakeReference(RuntimeClass_Windows_Security_Cryptography_Core_AsymmetricAlgorithmNames).Get(),
- &algorithmNames);
- Q_ASSERT_SUCCEEDED(hr);
-
- HString algorithmName;
- // The algorithm name doesn't matter for imports, so just use PKCS1
- hr = algorithmNames->get_RsaPkcs1(algorithmName.GetAddressOf());
- Q_ASSERT_SUCCEEDED(hr);
- hr = keyProviderFactory->OpenAlgorithm(algorithmName.Get(), &keyProvider);
- Q_ASSERT_SUCCEEDED(hr);
- }
-
- ComPtr<ICryptographicBufferStatics> bufferFactory;
- ComPtr<IAsymmetricKeyAlgorithmProvider> keyProvider;
-};
-Q_GLOBAL_STATIC(SslKeyGlobal, g)
-
-// Use the opaque struct for key storage
-struct EVP_PKEY {
- ComPtr<ICryptographicKey> key;
-};
-
-void QSslKeyPrivate::clear(bool deep)
-{
- isNull = true;
-
- if (opaque) {
- if (deep) {
- delete opaque;
- opaque = 0;
- } else {
- opaque->key.Reset();
- }
- }
-}
-
-void QSslKeyPrivate::decodeDer(const QByteArray &der, const QByteArray &passPhrase,
- bool deepClear)
-{
- Q_UNUSED(passPhrase);
-
- clear(deepClear);
-
- if (der.isEmpty())
- return;
-
- if (type != QSsl::PublicKey) {
- qWarning("The WinRT SSL backend does not support importing private keys.");
- return;
- }
-
- HRESULT hr;
- ComPtr<IBuffer> buffer;
- hr = g->bufferFactory->CreateFromByteArray(der.length(), (BYTE *)der.data(), &buffer);
- Q_ASSERT_SUCCEEDED(hr);
-
- if (!opaque)
- opaque = new EVP_PKEY;
-
- hr = g->keyProvider->ImportDefaultPublicKeyBlob(buffer.Get(), &opaque->key);
- RETURN_VOID_IF_FAILED("Failed to import public key");
-
- isNull = false;
-}
-
-void QSslKeyPrivate::decodePem(const QByteArray &pem, const QByteArray &passPhrase,
- bool deepClear)
-{
- decodeDer(derFromPem(pem), passPhrase, deepClear);
-}
-
-int QSslKeyPrivate::length() const
-{
- if (isNull)
- return -1;
-
- Q_ASSERT(opaque && opaque->key);
- HRESULT hr;
- UINT32 keySize;
- hr = opaque->key->get_KeySize(&keySize);
- Q_ASSERT_SUCCEEDED(hr);
- return keySize;
-}
-
-QByteArray QSslKeyPrivate::toPem(const QByteArray &passPhrase) const
-{
- Q_UNUSED(passPhrase);
- QByteArray result;
- if (isNull)
- return result;
-
- Q_ASSERT(opaque && opaque->key);
- HRESULT hr;
- ComPtr<IBuffer> buffer;
- hr = opaque->key->ExportDefaultPublicKeyBlobType(&buffer);
- RETURN_IF_FAILED("Failed to export key", return result);
-
- ComPtr<Windows::Storage::Streams::IBufferByteAccess> byteAccess;
- hr = buffer.As(&byteAccess);
- Q_ASSERT_SUCCEEDED(hr);
- char *data;
- hr = byteAccess->Buffer(reinterpret_cast<byte **>(&data));
- Q_ASSERT_SUCCEEDED(hr);
- UINT32 size;
- hr = buffer->get_Length(&size);
- Q_ASSERT_SUCCEEDED(hr);
- result = pemFromDer(QByteArray::fromRawData(data, size));
- return result;
-}
-
-Qt::HANDLE QSslKeyPrivate::handle() const
-{
- return opaque ? opaque->key.Get() : 0;
-}
-
-QT_END_NAMESPACE
+QT_USE_NAMESPACE