MCPcopy Create free account
hub / github.com/F-Stack/f-stack / generate_cmac_subkeys

Function generate_cmac_subkeys

dpdk/drivers/crypto/ccp/ccp_crypto.c:600–660  ·  view source on GitHub ↗

subkeys K1 and K2 generation for CMAC */

Source from the content-addressed store, hash-verified

598
599/* subkeys K1 and K2 generation for CMAC */
600static int
601generate_cmac_subkeys(struct ccp_session *sess)
602{
603 const EVP_CIPHER *algo;
604 EVP_CIPHER_CTX *ctx;
605 unsigned char *ccp_ctx;
606 size_t i;
607 int dstlen, totlen;
608 unsigned char zero_iv[AES_BLOCK_SIZE] = {0};
609 unsigned char dst[2 * AES_BLOCK_SIZE] = {0};
610 unsigned char k1[AES_BLOCK_SIZE] = {0};
611 unsigned char k2[AES_BLOCK_SIZE] = {0};
612
613 if (sess->auth.ut.aes_type == CCP_AES_TYPE_128)
614 algo = EVP_aes_128_cbc();
615 else if (sess->auth.ut.aes_type == CCP_AES_TYPE_192)
616 algo = EVP_aes_192_cbc();
617 else if (sess->auth.ut.aes_type == CCP_AES_TYPE_256)
618 algo = EVP_aes_256_cbc();
619 else {
620 CCP_LOG_ERR("Invalid CMAC type length");
621 return -1;
622 }
623
624 ctx = EVP_CIPHER_CTX_new();
625 if (!ctx) {
626 CCP_LOG_ERR("ctx creation failed");
627 return -1;
628 }
629 if (EVP_EncryptInit(ctx, algo, (unsigned char *)sess->auth.key,
630 (unsigned char *)zero_iv) <= 0)
631 goto key_generate_err;
632 if (EVP_CIPHER_CTX_set_padding(ctx, 0) <= 0)
633 goto key_generate_err;
634 if (EVP_EncryptUpdate(ctx, dst, &dstlen, zero_iv,
635 AES_BLOCK_SIZE) <= 0)
636 goto key_generate_err;
637 if (EVP_EncryptFinal_ex(ctx, dst + dstlen, &totlen) <= 0)
638 goto key_generate_err;
639
640 memset(sess->auth.pre_compute, 0, CCP_SB_BYTES * 2);
641
642 ccp_ctx = (unsigned char *)(sess->auth.pre_compute + CCP_SB_BYTES - 1);
643 prepare_key(k1, dst, AES_BLOCK_SIZE);
644 for (i = 0; i < AES_BLOCK_SIZE; i++, ccp_ctx--)
645 *ccp_ctx = k1[i];
646
647 ccp_ctx = (unsigned char *)(sess->auth.pre_compute +
648 (2 * CCP_SB_BYTES) - 1);
649 prepare_key(k2, k1, AES_BLOCK_SIZE);
650 for (i = 0; i < AES_BLOCK_SIZE; i++, ccp_ctx--)
651 *ccp_ctx = k2[i];
652
653 EVP_CIPHER_CTX_free(ctx);
654
655 return 0;
656
657key_generate_err:

Callers 1

Calls 2

memsetFunction · 0.85
prepare_keyFunction · 0.85

Tested by

no test coverage detected