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

Function transform_chain_param

dpdk/lib/vhost/vhost_crypto.c:274–334  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

272}
273
274static int
275transform_chain_param(struct rte_crypto_sym_xform *xforms,
276 VhostUserCryptoSessionParam *param)
277{
278 struct rte_crypto_sym_xform *xform_cipher, *xform_auth;
279 int ret;
280
281 switch (param->chaining_dir) {
282 case VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_HASH_THEN_CIPHER:
283 xform_auth = xforms;
284 xform_cipher = xforms->next;
285 xform_cipher->cipher.op = RTE_CRYPTO_CIPHER_OP_DECRYPT;
286 xform_auth->auth.op = RTE_CRYPTO_AUTH_OP_VERIFY;
287 break;
288 case VIRTIO_CRYPTO_SYM_ALG_CHAIN_ORDER_CIPHER_THEN_HASH:
289 xform_cipher = xforms;
290 xform_auth = xforms->next;
291 xform_cipher->cipher.op = RTE_CRYPTO_CIPHER_OP_ENCRYPT;
292 xform_auth->auth.op = RTE_CRYPTO_AUTH_OP_GENERATE;
293 break;
294 default:
295 return -VIRTIO_CRYPTO_BADMSG;
296 }
297
298 /* cipher */
299 ret = cipher_algo_transform(param->cipher_algo,
300 &xform_cipher->cipher.algo);
301 if (unlikely(ret < 0))
302 return ret;
303
304 if (param->cipher_key_len > VHOST_USER_CRYPTO_MAX_CIPHER_KEY_LENGTH) {
305 VC_LOG_DBG("Invalid cipher key length");
306 return -VIRTIO_CRYPTO_BADMSG;
307 }
308
309 xform_cipher->type = RTE_CRYPTO_SYM_XFORM_CIPHER;
310 xform_cipher->cipher.key.length = param->cipher_key_len;
311 xform_cipher->cipher.key.data = param->cipher_key_buf;
312 ret = get_iv_len(xform_cipher->cipher.algo);
313 if (unlikely(ret < 0))
314 return ret;
315 xform_cipher->cipher.iv.length = (uint16_t)ret;
316 xform_cipher->cipher.iv.offset = IV_OFFSET;
317
318 /* auth */
319 xform_auth->type = RTE_CRYPTO_SYM_XFORM_AUTH;
320 ret = auth_algo_transform(param->hash_algo, &xform_auth->auth.algo);
321 if (unlikely(ret < 0))
322 return ret;
323
324 if (param->auth_key_len > VHOST_USER_CRYPTO_MAX_HMAC_KEY_LENGTH) {
325 VC_LOG_DBG("Invalid auth key length");
326 return -VIRTIO_CRYPTO_BADMSG;
327 }
328
329 xform_auth->auth.digest_length = param->digest_len;
330 xform_auth->auth.key.length = param->auth_key_len;
331 xform_auth->auth.key.data = param->auth_key_buf;

Callers 1

vhost_crypto_create_sessFunction · 0.85

Calls 3

cipher_algo_transformFunction · 0.85
get_iv_lenFunction · 0.85
auth_algo_transformFunction · 0.85

Tested by

no test coverage detected