Lines Matching +full:hardware +full:- +full:accelerated
2 * Copyright 2017-2023 The OpenSSL Project Authors. All Rights Reserved.
51 * saner... why re-open /dev/crypto for every session?
53 static int cfd = -1;
67 DEVCRYPTO_STATUS_FAILURE = -3, /* unusable for other reason */
68 DEVCRYPTO_STATUS_NO_CIOCCPHASH = -2, /* hash state copy not supported */
69 DEVCRYPTO_STATUS_NO_CIOCGSESSION = -1, /* session open failed */
75 DEVCRYPTO_NOT_ACCELERATED = -1, /* software implemented */
77 DEVCRYPTO_ACCELERATED = 1 /* hardware accelerated */
78 } accelerated; member
88 if (ioctl(cfd, CIOCFSESSION, &sess->ses) < 0) { in clean_devcrypto_session()
176 return (size_t)-1; in find_cipher_data_index()
183 if (i != (size_t)-1) in get_cipher_data_index()
192 return -1; in get_cipher_data_index()
215 if (cipher_ctx->sess.ses != 0 && in cipher_init()
216 clean_devcrypto_session(&cipher_ctx->sess) == 0) in cipher_init()
219 cipher_ctx->sess.cipher = cipher_d->devcryptoid; in cipher_init()
220 cipher_ctx->sess.keylen = cipher_d->keylen; in cipher_init()
221 cipher_ctx->sess.key = (void *)key; in cipher_init()
222 cipher_ctx->op = enc ? COP_ENCRYPT : COP_DECRYPT; in cipher_init()
223 cipher_ctx->mode = cipher_d->flags & EVP_CIPH_MODE; in cipher_init()
224 cipher_ctx->blocksize = cipher_d->blocksize; in cipher_init()
226 cipher_ctx->sess.crid = (use_softdrivers == DEVCRYPTO_USE_SOFTWARE) ? in cipher_init()
229 ret = ioctl(cfd, CIOCGSESSION2, &cipher_ctx->sess); in cipher_init()
231 ret = ioctl(cfd, CIOCGSESSION, &cipher_ctx->sess); in cipher_init()
255 cryp.ses = cipher_ctx->sess.ses; in cipher_do_cipher()
260 cryp.op = cipher_ctx->op; in cipher_do_cipher()
266 switch (cipher_ctx->mode) { in cipher_do_cipher()
270 ivptr = in + inl - ivlen; in cipher_do_cipher()
292 switch (cipher_ctx->mode) { in cipher_do_cipher()
296 ivptr = out + inl - ivlen; in cipher_do_cipher()
304 nblocks = (inl + cipher_ctx->blocksize - 1) in cipher_do_cipher()
305 / cipher_ctx->blocksize; in cipher_do_cipher()
307 ivlen--; in cipher_do_cipher()
330 while (cipher_ctx->num && inl) { in ctr_do_cipher()
331 (*out++) = *(in++) ^ cipher_ctx->partial[cipher_ctx->num]; in ctr_do_cipher()
332 --inl; in ctr_do_cipher()
333 cipher_ctx->num = (cipher_ctx->num + 1) % cipher_ctx->blocksize; in ctr_do_cipher()
337 if (inl > cipher_ctx->blocksize) { in ctr_do_cipher()
338 nblocks = inl/cipher_ctx->blocksize; in ctr_do_cipher()
339 len = nblocks * cipher_ctx->blocksize; in ctr_do_cipher()
342 inl -= len; in ctr_do_cipher()
349 memset(cipher_ctx->partial, 0, cipher_ctx->blocksize); in ctr_do_cipher()
350 if (cipher_do_cipher(ctx, cipher_ctx->partial, cipher_ctx->partial, in ctr_do_cipher()
351 cipher_ctx->blocksize) < 1) in ctr_do_cipher()
353 while (inl--) { in ctr_do_cipher()
354 out[cipher_ctx->num] = in[cipher_ctx->num] in ctr_do_cipher()
355 ^ cipher_ctx->partial[cipher_ctx->num]; in ctr_do_cipher()
356 cipher_ctx->num++; in ctr_do_cipher()
378 memset(&to_cipher_ctx->sess, 0, sizeof(to_cipher_ctx->sess)); in cipher_ctrl()
379 return cipher_init(to_ctx, (void *)cipher_ctx->sess.key, EVP_CIPHER_CTX_iv(ctx), in cipher_ctrl()
380 (cipher_ctx->op == COP_ENCRYPT)); in cipher_ctrl()
383 memset(&cipher_ctx->sess, 0, sizeof(cipher_ctx->sess)); in cipher_ctrl()
390 return -1; in cipher_ctrl()
398 return clean_devcrypto_session(&cipher_ctx->sess); in cipher_cleanup()
408 static int known_cipher_nids_amount = -1; /* -1 indicates not yet initialised */
418 && (cipher_driver_info[cipher_data_index].accelerated in devcrypto_test_cipher()
421 || (cipher_driver_info[cipher_data_index].accelerated in devcrypto_test_cipher()
433 enum devcrypto_accelerated_t accelerated; in prepare_cipher_methods() local
454 * When using CIOCGSESSION2, first try to allocate a hardware in prepare_cipher_methods()
455 * ("accelerated") session. If that fails, fall back to in prepare_cipher_methods()
460 accelerated = DEVCRYPTO_ACCELERATED; in prepare_cipher_methods()
467 accelerated = DEVCRYPTO_NOT_ACCELERATED; in prepare_cipher_methods()
506 cipher_driver_info[i].accelerated = accelerated; in prepare_cipher_methods()
515 cipher_driver_info[i].accelerated = DEVCRYPTO_ACCELERATION_UNKNOWN; in prepare_cipher_methods()
521 cipher_driver_info[i].accelerated = DEVCRYPTO_NOT_ACCELERATED; in prepare_cipher_methods()
523 cipher_driver_info[i].accelerated = DEVCRYPTO_ACCELERATED; in prepare_cipher_methods()
551 if (i == (size_t)-1) in get_cipher_method()
614 else if ((i = find_cipher_data_index(EVP_CIPHER_get_nid(EVP))) != (size_t)-1) in cryptodev_select_cipher_cb()
643 if (cipher_driver_info[i].accelerated == DEVCRYPTO_ACCELERATED) in dump_cipher_info()
644 fprintf(stderr, "(hw accelerated)"); in dump_cipher_info()
645 else if (cipher_driver_info[i].accelerated == DEVCRYPTO_NOT_ACCELERATED) in dump_cipher_info()
718 return (size_t)-1; in find_digest_data_index()
725 if (i != (size_t)-1) in get_digest_data_index()
734 return -1; in get_digest_data_index()
754 digest_ctx->init_called = 1; in digest_init()
756 memset(&digest_ctx->sess, 0, sizeof(digest_ctx->sess)); in digest_init()
757 digest_ctx->sess.mac = digest_d->devcryptoid; in digest_init()
758 if (ioctl(cfd, CIOCGSESSION, &digest_ctx->sess) < 0) { in digest_init()
771 cryp.ses = ctx->sess.ses; in digest_op()
792 if (digest_op(digest_ctx, data, count, digest_ctx->digest_res, 0) >= 0) in digest_update()
811 memcpy(md, digest_ctx->digest_res, EVP_MD_CTX_get_size(ctx)); in digest_final()
828 if (digest_from == NULL || digest_from->init_called != 1) in digest_copy()
836 cphash.src_ses = digest_from->sess.ses; in digest_copy()
837 cphash.dst_ses = digest_to->sess.ses; in digest_copy()
853 return clean_devcrypto_session(&digest_ctx->sess); in digest_cleanup()
863 static int known_digest_nids_amount = -1; /* -1 indicates not yet initialised */
872 && (digest_driver_info[digest_data_index].accelerated in devcrypto_test_digest()
875 || (digest_driver_info[digest_data_index].accelerated in devcrypto_test_digest()
922 /* gather hardware acceleration info from the driver */ in prepare_digest_methods()
925 digest_driver_info[i].accelerated = DEVCRYPTO_ACCELERATION_UNKNOWN; in prepare_digest_methods()
931 digest_driver_info[i].accelerated = DEVCRYPTO_ACCELERATED; in prepare_digest_methods()
933 digest_driver_info[i].accelerated = DEVCRYPTO_NOT_ACCELERATED; in prepare_digest_methods()
981 if (i == (size_t)-1) in get_digest_method()
1044 else if ((i = find_digest_data_index(EVP_MD_get_type(EVP))) != (size_t)-1) in cryptodev_select_digest_cb()
1073 if (digest_driver_info[i].accelerated == DEVCRYPTO_ACCELERATED) in dump_digest_info()
1074 fprintf(stderr, " (hw accelerated)"); in dump_digest_info()
1075 else if (digest_driver_info[i].accelerated == DEVCRYPTO_NOT_ACCELERATED) in dump_digest_info()
1106 "specifies whether to use software (not accelerated) drivers ("
1107 OPENSSL_MSTR(DEVCRYPTO_REQUIRE_ACCELERATED) "=use only accelerated drivers, "
1117 "either ALL, NONE, or a comma-separated list of ciphers to enable [default=ALL]",
1123 "either ALL, NONE, or a comma-separated list of digests to enable [default=ALL]",
1129 "dump info about each algorithm to stderr; use 'openssl engine -pre DUMP_INFO devcrypto'",
1241 cfd = -1; in open_devcrypto()
1259 cfd = -1; in close_devcrypto()
1307 * It doesn't look much better with cryptodev-linux. They have the crypt_kop in bind_devcrypto()
1315 * /Richard Levitte, 2017-05-11 in bind_devcrypto()
1355 * release our just-created reference. in engine_load_devcrypto_int()