/*! * \brief Utility class that provides access to the "secure storage" of the application, which contains * the certificates for preverification and update checks. * * \copyright Copyright (c) 2014-2018 Governikus GmbH & Co. KG, Germany */ #pragma once #include "TlsConfiguration.h" #include #include #include #include #include #include #include #include #include class test_SecureStorage; namespace governikus { using SignatureAlgorithmPair = QPair; class SecureStorage { friend class ::test_SecureStorage; private: QDateTime mLoadedTime; QByteArrayList mCvcas; QByteArrayList mCvcasTest; QVector mUpdateCertificates; QUrl mSelfAuthenticationUrl; QUrl mSelfAuthenticationTestUrl; QUrl mUpdateServerBaseUrl; QUrl mAppcastUpdateUrl; QUrl mAppcastBetaUpdateUrl; TlsConfiguration mTlsConfig, mTlsConfigPsk, mTlsConfigRemote, mTlsConfigRemotePsk; QMap mMinStaticKeySizes; QMap mMinEphemeralKeySizes; bool readJsonArray(QJsonArray& pArray, const QJsonObject& pConfig, const QLatin1String pName); QString readGroup(const QJsonObject& pConfig, const QLatin1String pGroup, const QLatin1String pName); QMap readKeySizes(const QJsonObject& pConfig, const QLatin1String pKey); void readByteArrayList(QByteArrayList& pArray, const QJsonObject& pConfig, const QLatin1String pName); void load(); protected: SecureStorage(); virtual ~SecureStorage(); public: static SecureStorage& getInstance(); enum class TlsSuite { DEFAULT, PSK, }; const QByteArrayList& getCVRootCertificates(bool pProductive) const; const QVector& getUpdateCertificates() const; const QUrl& getSelfAuthenticationUrl(bool pTest = false) const; const QUrl& getUpdateServerBaseUrl() const; const QUrl& getAppcastUpdateUrl() const; const QUrl& getAppcastBetaUpdateUrl() const; const TlsConfiguration& getTlsConfig(TlsSuite pTlsSuite = TlsSuite::DEFAULT) const; const TlsConfiguration& getTlsConfigRemote(TlsSuite pTlsSuite = TlsSuite::DEFAULT) const; int getMinimumStaticKeySize(QSsl::KeyAlgorithm pKeyAlgorithm) const; int getMinimumEphemeralKeySize(QSsl::KeyAlgorithm pKeyAlgorithm) const; }; } // namespace governikus