예제 #1
0
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;
}
예제 #2
0
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());
   }
}
예제 #3
0
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();
}
예제 #4
0
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();
    }
}
예제 #5
0
파일: EventsDemo.C 프로젝트: 913862627/wt
void EventsDemo::showEscapePressed()
{
  setKeyType("escapePressed");
}
예제 #6
0
파일: EventsDemo.C 프로젝트: 913862627/wt
void EventsDemo::showEnterPressed()
{
  setKeyType("enterPressed");
}
예제 #7
0
파일: EventsDemo.C 프로젝트: 913862627/wt
void EventsDemo::showKeyPressed(const WKeyEvent &e)
{
  setKeyType("keyPressed", &e);
}
예제 #8
0
파일: EventsDemo.C 프로젝트: 913862627/wt
void EventsDemo::showKeyWentDown(const WKeyEvent &e)
{
  setKeyType("keyWentDown", &e);
}
예제 #9
0
파일: EventsDemo.C 프로젝트: 913862627/wt
void EventsDemo::showKeyWentUp(const WKeyEvent &e)
{
  setKeyType("keyWentUp", &e);
}