# Sign and verify using HMAC key This sample app demonstrates how to generate a HMAC key, sign given data using this key and verify data using this key. 1. Include headers files pertaining to security APIs #include #include #include Copy to clipboard 2. Get a SecurityFactory instance auto &secFact = telux::sec::SecurityFactory::getInstance(); Copy to clipboard 3. Get a CryptoManager instance std::shared_ptr cryptMgr; cryptMgr = secFact.getCryptoManager(ec); if (!cryptMgr) { std::cout << "Can't allocate CryptoManager, err: " << static_cast(ec) << std::endl; return -1; } Copy to clipboard 4. Define parameters using CryptoParamBuilder for the key std::shared_ptr cp; cp = telux::sec::CryptoParamBuilder() .setAlgorithm(telux::sec::Algorithm::ALGORITHM_HMAC) .setCryptoOperation(telux::sec::CryptoOperation::CRYPTO_OP_SIGN | telux::sec::CryptoOperation::CRYPTO_OP_VERIFY) .setKeySize(128) .setDigest(telux::sec::Digest::DIGEST_SHA_2_256) .setMinimumMacLength(64) .build(); Copy to clipboard 5. Generate HMAC key using generateKey() API std::vector kb; telux::common::ErrorCode ec; ec = cryptMgr->generateKey(cp, kb); if (ec != telux::common::ErrorCode::SUCCESS) { std::cout << "Can't generate HMAC key, err: " << static_cast(ec) << std::endl; return -1; } Copy to clipboard 6. Define data to be signed std::vector pt {'h', 'e', 'l', 'l', 'o'}; Copy to clipboard 7. Define parameters using CryptoParamBuilder for signing/verifying data cp = telux::sec::CryptoParamBuilder() .setAlgorithm(telux::sec::Algorithm::ALGORITHM_HMAC) .setDigest(telux::sec::Digest::DIGEST_SHA_2_256) .build(); Copy to clipboard 8. Sign the required data using signData() API std::vector sg; ec = cryptMgr->signData(cp, kb, pt, sg); if (ec != telux::common::ErrorCode::SUCCESS) { std::cout << "Can't sign data, err: " << static_cast(ec) << std::endl; return -1; } Copy to clipboard 9. Verify authenticity of data using verifyData() API ec = cryptMgr->verifyData(cp, kb, pt, sg); if (ec != telux::common::ErrorCode::SUCCESS) { if (ec == telux::common::ErrorCode::VERIFICATION_FAILED) std::cout << "Invalid signature for given data!" << std::endl; else std::cout << "Can't verify data, err: " << static_cast(ec) << std::endl; return -1; } Copy to clipboard Last Published: Jun 24, 2026 [Previous Topic Crypto](https://docs.qualcomm.com/bundle/publicresource/80-PF458-1/topics/crypto.md) [Next Topic Sign and verify using EC key](https://docs.qualcomm.com/bundle/publicresource/80-PF458-1/topics/ECAsymKeySignVerifyApp.md)