inline void DecContent(std::string& dec, const std::string& data, const CipherParam& param, const std::string& key, const std::string& salt) { const size_t blockSize = 4096; dec.reserve(data.size()); const size_t n = (data.size() + blockSize - 1) / blockSize; for (size_t i = 0; i < n; i++) { const size_t len = (i < n - 1) ? blockSize : (data.size() % blockSize); std::string blockKey(4, 0); cybozu::Set32bitAsLE(&blockKey[0], static_cast<uint32_t>(i)); const std::string iv = generateKey(param, salt, blockKey); dec.append(cipher(param.cipherName, data.c_str() + i * blockSize, len, key, iv, cybozu::crypto::Cipher::Decoding)); } }
std::string decContent(const std::string& data, const std::string& key, const std::string& salt) { std::string dec; dec.reserve(data.size()); const size_t n = (data.size() + 4095) / 4096; for (size_t i = 0; i < n; i++) { const size_t len = (i < n - 1) ? 4096 : (data.size() % 4096); std::string blockKey(4, 0); cybozu::Set32bitAsLE(&blockKey[0], i); const std::string iv = generateKey(salt, blockKey); dec.append(cipher(data.c_str() + i * 4096, len, key, iv)); } return dec; }
inline void EncContent(std::string& encryptedPackage, const std::string& org, const CipherParam& param, const std::string& key, const std::string& salt) { uint64_t orgSize = org.size(); const size_t blockSize = 4096; std::string data = org; data.resize(RoundUp(data.size(), size_t(16))); #ifdef SAME_KEY data[data.size() - 2] = 0x4b; // QQQ remove this data[data.size() - 1] = 0x6a; #endif encryptedPackage.reserve(data.size() + 8); encryptedPackage.resize(8); cybozu::Set64bitAsLE(&encryptedPackage[0], orgSize); const size_t n = (data.size() + blockSize - 1) / blockSize; for (size_t i = 0; i < n; i++) { const size_t len = (i < n - 1) ? blockSize : (data.size() % blockSize); std::string blockKey(4, 0); cybozu::Set32bitAsLE(&blockKey[0], static_cast<uint32_t>(i)); const std::string iv = generateKey(param, salt, blockKey); encryptedPackage.append(cipher(param.cipherName, data.c_str() + i * blockSize, len, key, iv, cybozu::crypto::Cipher::Encoding)); } }
void Key<keyHandlerClass>::keyPressed(void) { blockKey(); (pKeyHandlerInstance->*pKeyHandlerFunction)(); }