CryptoKeyDataRSAComponents.h [plain text]
#ifndef CryptoKeyDataRSAComponents_h
#define CryptoKeyDataRSAComponents_h
#include "CryptoKeyData.h"
#include <wtf/Vector.h>
#if ENABLE(SUBTLE_CRYPTO)
namespace WebCore {
class CryptoKeyDataRSAComponents final : public CryptoKeyData {
public:
enum class Type {
Public,
Private
};
struct PrimeInfo {
Vector<uint8_t> primeFactor;
Vector<uint8_t> factorCRTExponent;
Vector<uint8_t> factorCRTCoefficient;
};
static std::unique_ptr<CryptoKeyDataRSAComponents> createPublic(const Vector<uint8_t>& modulus, const Vector<uint8_t>& exponent)
{
return std::unique_ptr<CryptoKeyDataRSAComponents>(new CryptoKeyDataRSAComponents(modulus, exponent));
}
static std::unique_ptr<CryptoKeyDataRSAComponents> createPrivate(const Vector<uint8_t>& modulus, const Vector<uint8_t>& exponent, const Vector<uint8_t>& privateExponent)
{
return std::unique_ptr<CryptoKeyDataRSAComponents>(new CryptoKeyDataRSAComponents(modulus, exponent, privateExponent));
}
static std::unique_ptr<CryptoKeyDataRSAComponents> createPrivateWithAdditionalData(const Vector<uint8_t>& modulus, const Vector<uint8_t>& exponent, const Vector<uint8_t>& privateExponent, const PrimeInfo& firstPrimeInfo, const PrimeInfo& secondPrimeInfo, const Vector<PrimeInfo>& otherPrimeInfos)
{
return std::unique_ptr<CryptoKeyDataRSAComponents>(new CryptoKeyDataRSAComponents(modulus, exponent, privateExponent, firstPrimeInfo, secondPrimeInfo, otherPrimeInfos));
}
virtual ~CryptoKeyDataRSAComponents();
Type type() const { return m_type; }
const Vector<uint8_t>& modulus() const { return m_modulus; }
const Vector<uint8_t>& exponent() const { return m_exponent; }
const Vector<uint8_t>& privateExponent() const { return m_privateExponent; }
bool hasAdditionalPrivateKeyParameters() const { return m_hasAdditionalPrivateKeyParameters; }
const PrimeInfo& firstPrimeInfo() const { return m_firstPrimeInfo; }
const PrimeInfo& secondPrimeInfo() const { return m_secondPrimeInfo; }
const Vector<PrimeInfo>& otherPrimeInfos() const { return m_otherPrimeInfos; }
private:
CryptoKeyDataRSAComponents(const Vector<uint8_t>& modulus, const Vector<uint8_t>& exponent);
CryptoKeyDataRSAComponents(const Vector<uint8_t>& modulus, const Vector<uint8_t>& exponent, const Vector<uint8_t>& privateExponent);
CryptoKeyDataRSAComponents(const Vector<uint8_t>& modulus, const Vector<uint8_t>& exponent, const Vector<uint8_t>& privateExponent, const PrimeInfo& firstPrimeInfo, const PrimeInfo& secondPrimeInfo, const Vector<PrimeInfo>& otherPrimeInfos);
Type m_type;
Vector<uint8_t> m_modulus;
Vector<uint8_t> m_exponent;
Vector<uint8_t> m_privateExponent;
bool m_hasAdditionalPrivateKeyParameters;
PrimeInfo m_firstPrimeInfo;
PrimeInfo m_secondPrimeInfo;
Vector<PrimeInfo> m_otherPrimeInfos; };
}
SPECIALIZE_TYPE_TRAITS_CRYPTO_KEY_DATA(CryptoKeyDataRSAComponents, CryptoKeyData::Format::RSAComponents)
#endif // ENABLE(SUBTLE_CRYPTO)
#endif // CryptoKeyDataRSAComponents_h