int UtlCryptoKeyRsa::importFromFile(const char* pFilename) { // Make sure we don't leave any previous keys hanging around clearKey(); FILE *pFile = fopen(pFilename, "rt"); if (!pFile) return -1; // First try to read a public key mpRsa = PEM_read_RSA_PUBKEY(pFile, 0, 0, 0); if (mpRsa) setKeyType(KEY_PUBLIC); else { // If that failed, try to read a private key fseek(pFile, 0, SEEK_SET); mpRsa = PEM_read_RSAPrivateKey(pFile, 0, 0, 0); if (mpRsa) setKeyType(KEY_PRIVATE); } fclose(pFile); if (isValid()) return setLastError(0); else return -1; }
int UtlCryptoKeyRsa::generateKey() { // Make sure we don't leave any previous keys hanging around clearKey(); int numKeyBits = 2048; unsigned long keyExponent = 65537; mpRsa = RSA_generate_key(numKeyBits, keyExponent, NULL, 0); if (mpRsa) { setKeyType(KEY_PRIVATE); return setLastError(0); } else { return setLastError(ERR_get_error()); } }
void KeysSyncer::storePrivateDataKey(const Protocol::SymmetricKeys &symmKeys) { // decrypt Crypto::SymmetricCryptor cryptor; auto privateDataKey = cryptor.decrypt( symmKeys.privateDataKey, Crypto::SymmetricKeyLoader::fromMasterKey(*credentials_.masterKey), cryptor.RANDOM_IV_BYTES); // save auto dao = Dao::SymmetricKeyDao::load(Dao::SymmetricKeyDao::PRIVATE_DATA_KEY, session_); if (!dao) { dao.reset(new Dao::SymmetricKeyDao(session_)); dao->setKeyType(Dao::SymmetricKeyDao::PRIVATE_DATA_KEY); } dao->setKey(privateDataKey); dao->save(); }
void KeysSyncer::storeAsymmKeyPairs(const std::vector<Protocol::KeyPair> &keyPairs) { for (const Protocol::KeyPair &keyPair : keyPairs) { auto type = Crypto::AsymmetricKeyType::Invalid; FWD_NESTED(type = Crypto::keyTypeFromString(keyPair.type), InvalidArgument, Codec::InvalidContentFormat("unknown keyPair.type")); // don't store keys when there's no private key, since we couldn't use // them for signing if (keyPair.privkey.empty()) continue; auto dao = Dao::AsymmetricKeyPairDao::load(type, keyPair.id, session_); if (!dao) { dao.reset(new Dao::AsymmetricKeyPairDao(session_)); dao->setId(keyPair.id); dao->setKeyType(type); auto privateDataKey = Dao::SymmetricKeyDao::loadKey( Dao::SymmetricKeyDao::PRIVATE_DATA_KEY, session_); Crypto::SymmetricCryptor cryptor; auto privkey = cryptor.decrypt( keyPair.privkey, privateDataKey, cryptor.RANDOM_IV_BYTES); dao->setPubkey(keyPair.pubkey); dao->setPrivkey(privkey); dao->setValidFrom(keyPair.validFrom.toString()); dao->setValidUntil(keyPair.validUntil.toString()); } dao->setRevocation(keyPair.revocation); dao->save(); } }
void EventsDemo::showEscapePressed() { setKeyType("escapePressed"); }
void EventsDemo::showEnterPressed() { setKeyType("enterPressed"); }
void EventsDemo::showKeyPressed(const WKeyEvent &e) { setKeyType("keyPressed", &e); }
void EventsDemo::showKeyWentDown(const WKeyEvent &e) { setKeyType("keyWentDown", &e); }
void EventsDemo::showKeyWentUp(const WKeyEvent &e) { setKeyType("keyWentUp", &e); }