Пример #1
0
ByteArray HKDF::expand(const ByteArray &prk, const ByteArray &info, int outputSize) const
{
    int iterations = std::ceil((float)outputSize / HKDF::HASH_OUTPUT_SIZE);
    ByteArray mixin;
    ByteArray results;
    int remainingBytes = outputSize;

    for (int i = iterationStartOffset; i < (iterations + iterationStartOffset); i++) {

        ByteArray message(mixin);
        if (!info.empty()) {
            message += info;
        }

        message += ByteArray(1, (char)(i % 256));

		unsigned char out[32];
		HMAC_SHA256((unsigned char*)message.c_str(), message.size(), (unsigned char*)prk.c_str(), prk.size(), out);
        ByteArray stepResult((const char*)out, 32);

        int stepSize = std::min((int)remainingBytes, (int)stepResult.size());
        results += stepResult.substr(0, stepSize);
        mixin = stepResult;
        remainingBytes -= stepSize;
    }
    return results;
}
Пример #2
0
void OpenPGPCryptoHashHMAC::reset(void) {

	std::string key(m_keyBuf.rawBuffer(), m_keyLen);

	switch (m_hashType) {

	case (XSECCryptoHash::HASH_SHA1) :
	
		mp_md.reset(HMAC_SHA1(key));
		break;

	case (XSECCryptoHash::HASH_MD5) :
	
		mp_md.reset(HMAC_MD5(key));
		break;

	case (XSECCryptoHash::HASH_SHA224) :
	
		mp_md.reset(HMAC_SHA224(key));
		break;

	case (XSECCryptoHash::HASH_SHA256) :
	
		mp_md.reset(HMAC_SHA256(key));
		break;

	case (XSECCryptoHash::HASH_SHA384) :
	
		mp_md.reset(HMAC_SHA384(key));
		break;

	case (XSECCryptoHash::HASH_SHA512) :
	
		mp_md.reset(HMAC_SHA512(key));
		break;

	default :

		mp_md.reset();

	}

	if(!mp_md) {

		throw XSECCryptoException(XSECCryptoException::MDError,
			"OpenPGP:HashHMAC - Error loading Message Digest"); 
	}

}
Пример #3
0
ByteArray HKDF::extract(const ByteArray &salt, const ByteArray &inputKeyMaterial) const
{
    unsigned char out[32];
	HMAC_SHA256((unsigned char*)inputKeyMaterial.c_str(), inputKeyMaterial.size(), (unsigned char*)salt.c_str(), salt.size(), out);
    return ByteArray((const char*)out, 32);
}
ByteArray SenderChainKey::getDerivative(const ByteArray &seed, const ByteArray &key) const
{
    unsigned char out[32];
	HMAC_SHA256((unsigned char*)seed.c_str(), seed.size(), (unsigned char*)key.c_str(), key.size(), out);
    return ByteArray((const char*)out, 32);
}