void O2Profile:: SetRSAKey(const byte *priv, size_t privlen, const byte *pub, size_t publen) { bool valid = false; if (priv && privlen && pub && publen) { if (privlen == RSA_PRIVKEY_SIZE && publen == RSA_PUBKEY_SIZE) { PrivKey.assign(priv, privlen); PubKey.assign(pub, publen); valid = true; } } if (!valid) { CryptoPP::RandomPool randpool; #ifdef _WIN32 /** windows */ GUID guid; CoCreateGuid(&guid); randpool.Put((byte*)&guid, sizeof(GUID)); #else /** unix */ boost::uuids::random_generator gen; boost::uuids::uuid uuid = gen(); randpool.Put((byte*)&uuid, sizeof(boost::uuids::uuid)); #endif byte tmpPriv[RSA_PRIVKEY_SIZE]; CryptoPP::RSAES_OAEP_SHA_Decryptor priv(randpool, RSA_KEYLENGTH); CryptoPP::ArraySink privArray(tmpPriv, RSA_PRIVKEY_SIZE); priv.DEREncode(privArray); privArray.MessageEnd(); PrivKey.assign(tmpPriv, RSA_PRIVKEY_SIZE); byte tmpPub[RSA_PUBKEY_SIZE]; CryptoPP::RSAES_OAEP_SHA_Encryptor pub(priv); CryptoPP::ArraySink pubArray(tmpPub, RSA_PUBKEY_SIZE); pub.DEREncode(pubArray); pubArray.MessageEnd(); PubKey.assign(tmpPub, RSA_PUBKEY_SIZE); } }
void O2Profile:: SetRSAKey(const byte *priv, size_t privlen, const byte *pub, size_t publen) { bool valid = false; if (priv && privlen && pub && publen) { if (privlen == RSA_PRIVKEY_SIZE && publen == RSA_PUBKEY_SIZE) { PrivKey.assign(priv, privlen); PubKey.assign(pub, publen); valid = true; } } if (!valid) { GUID guid; CoCreateGuid(&guid); CryptoPP::RandomPool randpool; randpool.Put((byte*)&guid, sizeof(GUID)); byte tmpPriv[RSA_PRIVKEY_SIZE]; CryptoPP::RSAES_OAEP_SHA_Decryptor priv(randpool, RSA_KEYLENGTH); CryptoPP::ArraySink privArray(tmpPriv, RSA_PRIVKEY_SIZE); priv.DEREncode(privArray); privArray.MessageEnd(); PrivKey.assign(tmpPriv, RSA_PRIVKEY_SIZE); byte tmpPub[RSA_PUBKEY_SIZE]; CryptoPP::RSAES_OAEP_SHA_Encryptor pub(priv); CryptoPP::ArraySink pubArray(tmpPub, RSA_PUBKEY_SIZE); pub.DEREncode(pubArray); pubArray.MessageEnd(); PubKey.assign(tmpPub, RSA_PUBKEY_SIZE); } }