本文整理汇总了C++中OTData::Randomize方法的典型用法代码示例。如果您正苦于以下问题:C++ OTData::Randomize方法的具体用法?C++ OTData::Randomize怎么用?C++ OTData::Randomize使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类OTData
的用法示例。
在下文中一共展示了OTData::Randomize方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Encrypt
bool OTEnvelope::Encrypt(const String& theInput, OTSymmetricKey& theKey,
const OTPassword& thePassword)
{
OT_ASSERT(
(thePassword.isPassword() && (thePassword.getPasswordSize() > 0)) ||
(thePassword.isMemory() && (thePassword.getMemorySize() > 0)));
OT_ASSERT(theInput.Exists());
// Generate a random initialization vector.
//
OTData theIV;
if (!theIV.Randomize(OTCryptoConfig::SymmetricIvSize())) {
otErr << __FUNCTION__ << ": Failed trying to randomly generate IV.\n";
return false;
}
// If the symmetric key hasn't already been generated, we'll just do that
// now...
// (The passphrase is used to derive another key that is used to encrypt the
// actual symmetric key, and to access it later.)
//
if ((false == theKey.IsGenerated()) &&
(false == theKey.GenerateKey(thePassword))) {
otErr << __FUNCTION__
<< ": Failed trying to generate symmetric key using password.\n";
return false;
}
if (!theKey.HasHashCheck()) {
if (!theKey.GenerateHashCheck(thePassword)) {
otErr << __FUNCTION__
<< ": Failed trying to generate hash check using password.\n";
return false;
}
}
OT_ASSERT(theKey.HasHashCheck());
OTPassword theRawSymmetricKey;
if (false ==
theKey.GetRawKeyFromPassphrase(thePassword, theRawSymmetricKey)) {
otErr << __FUNCTION__ << ": Failed trying to retrieve raw symmetric "
"key using password.\n";
return false;
}
OTData theCipherText;
const bool bEncrypted = OTCrypto::It()->Encrypt(
theRawSymmetricKey, // The symmetric key, in clear form.
theInput.Get(), // This is the Plaintext.
theInput.GetLength() + 1, // for null terminator
theIV, // Initialization vector.
theCipherText); // OUTPUT. (Ciphertext.)
//
// Success?
//
if (!bEncrypted) {
otErr << __FUNCTION__ << ": (static) call failed to encrypt. Wrong "
"key? (Returning false.)\n";
return false;
}
// This is where the envelope final contents will be placed,
// including the envelope type, the size of the IV, the IV
// itself, and the ciphertext.
//
m_dataContents.Release();
// Write the ENVELOPE TYPE (network order version.)
//
// 0 == Error
// 1 == Asymmetric Key (other functions -- Seal / Open.)
// 2 == Symmetric Key (this function -- Encrypt / Decrypt.)
// Anything else: error.
// Calculate "network-order" version of envelope type 2.
uint16_t env_type_n = htons(static_cast<uint16_t>(2));
m_dataContents.Concatenate(reinterpret_cast<void*>(&env_type_n),
// (uint32_t here is the 2nd parameter to
// Concatenate, and has nothing to do with
// env_type_n being uint16_t)
static_cast<uint32_t>(sizeof(env_type_n)));
// Write IV size (in network-order)
//
uint32_t ivlen =
OTCryptoConfig::SymmetricIvSize(); // Length of IV for this cipher...
OT_ASSERT(ivlen >= theIV.GetSize());
uint32_t ivlen_n = htonl(
theIV.GetSize()); // Calculate "network-order" version of iv length.
m_dataContents.Concatenate(reinterpret_cast<void*>(&ivlen_n),
static_cast<uint32_t>(sizeof(ivlen_n)));
// Write the IV itself.
//.........这里部分代码省略.........