From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id D515FA0524; Tue, 13 Apr 2021 21:48:46 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 5B15A1612A7; Tue, 13 Apr 2021 21:48:46 +0200 (CEST) Received: from NAM12-BN8-obe.outbound.protection.outlook.com (mail-bn8nam12on2082.outbound.protection.outlook.com [40.107.237.82]) by mails.dpdk.org (Postfix) with ESMTP id 34DAF1612A6 for ; Tue, 13 Apr 2021 21:48:44 +0200 (CEST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=bVbry95uLMEs384wbGXgMYuNw7wVbvLHGiP9hJKdMCpXmymPU/oQmoIv11umICed/ppiYin/JhZv+toVADkaovxHZUHPUbEQ5ufXOLZLcRfVWMtHSc5n0oNE4lshKAGpdhT3wrhXBf4yphdpTNW06b2hRoIT6nkoMb1W0YczeZI3Ygj+F72pQ1RyiO9eNdDbnwl7B/XDBYLsWgxF8SFe55Sn4iHn5aqpgqRVh0dzQto72RWjAjkRXN3KHmQZRl+kyb+n0qCBmwv2gNoQPZT1dL1Kd/Y+iJ8q1ZbArqL0S/zdAxDbM7wbWMQrxseYdTYFtQ8DaVdOwUd0312zdK1GAQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aiO66h7x7317SMaNB04NaredIjj/Ob/rdGixwJhyM7o=; b=GHUNbxR3ObDhwL5h5KCs0UluYVw/RIF7K0x2Z3zcbCAvkXOuSKtdKgl43pCwbfmNOR6xvoHMxYBy6Q2Awi47tVSTKeEI1aDK+sVHaXILbq6Ma9FnC/jCN12BclvXodlG5PdPizds4arSJzQw3N5bkgPYE9PZJxmB5TWJaWXeIdGddFhOOQdZlFEOTRH+E+XhA0Uo/JumROZ1vL3jcZMh9agQDUqhQ/WeSzW2gk8netTeXJbCJFTUdVgzN/xcKW+3h/oWMlFRBOSk4S/5e2Chj+Yg2YNDkCt1lJCycdJQM5MDjGS8+M4xHL2jaPukEAizxGPwl3aelide05jDFEHuEw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=nvidia.com; dmarc=pass action=none header.from=nvidia.com; dkim=pass header.d=nvidia.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=Nvidia.com; s=selector2; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=aiO66h7x7317SMaNB04NaredIjj/Ob/rdGixwJhyM7o=; b=VLOhlelaTKIC0j1uoCbt/d30i78NGPB5CXs0NgqDwyA+cEETDnZ9mDieJxDEI+xPLTQmBEgF7NWkYu8z+WA46gGc2/1LfrrCs6H7YogwUAut19tZy9vPZVFxW0IFhDf0alpY9VjgObhEdXjIqbslKb4QSccuH76Ouge6z7x9PIwFAmmc4eiwDkcKHdHfVssgc68wZGoQ1ker1WXrI+Dw5PfTwbm4nAyQ1cYzoNdi8RgAEGyKJs+6IYbDiMZNm6ilm37zuiBrJr3J0jUmLjcyvB240II5oLnzWZThe8mlcvs2liD+1ZaIilC6afGqA5WyqsZ/Rl2L0cG3A8Tt+TFG3Q== Received: from MW2PR12MB2492.namprd12.prod.outlook.com (2603:10b6:907:8::19) by MWHPR12MB1934.namprd12.prod.outlook.com (2603:10b6:300:109::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4020.17; Tue, 13 Apr 2021 19:48:39 +0000 Received: from MW2PR12MB2492.namprd12.prod.outlook.com ([fe80::997d:63f4:b22c:8d90]) by MW2PR12MB2492.namprd12.prod.outlook.com ([fe80::997d:63f4:b22c:8d90%7]) with mapi id 15.20.3999.032; Tue, 13 Apr 2021 19:48:39 +0000 From: Matan Azrad To: NBU-Contact-Thomas Monjalon , "dev@dpdk.org" CC: "akhil.goyal@nxp.com" , "arkadiuszx.kusztal@intel.com" , "anoobj@marvell.com" , Ray Kinsella , Neil Horman , Declan Doherty Thread-Topic: [PATCH v3] cryptodev: support multiple cipher data-units Thread-Index: AQHXMJGJxti+ljLAMEuQH/axMNetbKqy2WoA Date: Tue, 13 Apr 2021 19:48:39 +0000 Message-ID: References: <1612449252-395208-1-git-send-email-matan@nvidia.com> <20210413181907.3828454-1-thomas@monjalon.net> In-Reply-To: <20210413181907.3828454-1-thomas@monjalon.net> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: authentication-results: monjalon.net; dkim=none (message not signed) header.d=none;monjalon.net; dmarc=none action=none header.from=nvidia.com; x-originating-ip: [216.228.117.190] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 3a8f83ab-c7b0-4021-7bf7-08d8feb522bd x-ms-traffictypediagnostic: MWHPR12MB1934: x-ld-processed: 43083d15-7273-40c1-b7db-39efd9ccc17a,ExtAddr x-microsoft-antispam-prvs: x-ms-exchange-transport-forked: True x-ms-oob-tlc-oobclassifiers: OLM:3276; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: uyBxuwz6UhIAo/mb+d1Y5OY2IrqKIoKCuqPVaBK/UfNpIWFlDTbCNXjtVdfBaxw1f/6PJpcnU7uWlUYglDtiUVFJBAgBKewO7b2gu383/BXmVDik+G6Vf/fioPlynDpHrLsKlcN+reoPVnHrm9++B80ZlXtlN9ti77tRVc6NBa5uPGOhxTivP9n1I/jXyTRfx9uE8bBlopBQSZELv19fAOMake32zjv4GIkPp4yBRoVMrCc6q7tLpTwiRWpUGmb5bV5gjbpHC1hr7vMM5xJZJqxrIUbjZ4O4OvK/YVx1PHhQcdUaNs/bz0UIypw3M963DlRX6v1wTMI6FObt8s0mWc4dygx6duDpVN2aGLvUX0YboFE5+5Pg8dHQJS5NIe1YgrF6no6Zvk4x/OSFxURvrndzxZH+PyRawe7O1Zmzl2YdnAHPJxc7A62WWppGZT6E1sgi5cdw1Q0os9PN9K5kaTiDwvYbRtGDgFR+aR4eEObl8AwDHgXS0ZBdv39GnaNVbU/1b/GYVENLJUBdeHlYsNJ9q7498dOCIH+gp3nOvKnA/KeylRY/Tm7VGbED0UEcAYLIpugRu2G2kDSfZEcopPL6cVfZDCIpvv3votNn+P0= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:MW2PR12MB2492.namprd12.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(376002)(136003)(39850400004)(346002)(396003)(7696005)(5660300002)(55016002)(54906003)(8676002)(9686003)(71200400001)(8936002)(52536014)(38100700002)(86362001)(122000001)(64756008)(66946007)(66476007)(316002)(110136005)(66446008)(66556008)(33656002)(26005)(83380400001)(478600001)(2906002)(76116006)(4326008)(186003)(6506007); DIR:OUT; SFP:1101; x-ms-exchange-antispam-messagedata: =?us-ascii?Q?b8U81LesvEa5vc4+9+J2oTNXLO0cZuoeh294PVsGQlCT9mnuxp6WH4GOBukF?= =?us-ascii?Q?OsWcZQ/9LUrAGPnganGixPclKnSz9nNkcGXjxWqOFbXB2ZpYLrnq20opdGje?= =?us-ascii?Q?Zuu7xGMSGqcZugxE7C4DxNy7rV6GfkvUuRxYNd7a0WA/R9o7JjjSoE1AQMNc?= =?us-ascii?Q?bVygU8miCycXNsJveiMzFP3md8d+cgHDp0EAlrLJQU0+J5QNTFn9qoxvV0gL?= =?us-ascii?Q?HP8kEGpZzU8pBma11Ov/MPanoAYYYFlGvg7dcmK+4fLvz/huTgEYCRU/oH4y?= =?us-ascii?Q?A+bShWoKETzEeA6HD4imLGLg0JT00HtOFLhNAXfi36+Lt9MJnTm9BHLxxpXW?= =?us-ascii?Q?YireDVYes4P9BKqUneRZCfpVOoFuSW3LTiVSHXPUljPeGSyS414FTT6dRB7n?= =?us-ascii?Q?KVn7Vmh2azlEhFtkH5K6alFBHNnyP8vsbcne+SErf0JYcXvcCMQzKkIFueUL?= =?us-ascii?Q?ALphflZfTzYR6B7LDOIOHWJzra0K2Jnr3IZcuZXIciZTubj9Csm6kOqLLZzv?= =?us-ascii?Q?s41w4WMtofap3oNx2K75IbIeIMn1Ej3u+fD791/GpPL9bVjTRTlWpRJId7ro?= =?us-ascii?Q?mIAcF7j03AwQfKewRbj8WM57UeOmznf/BgPkvBvqWfHY2N1ZzbppRv6ZuCmw?= =?us-ascii?Q?sw1e01RclVM8UlUJmGJqmgqX2uz7Zi5V8UQsYBwhl3t5jT/7uTiF2W/ZHDO1?= =?us-ascii?Q?YeG2QTuE1cFmjiveMOJII74JfnmlyNZgxumMILnyxg57yxis6J28HDVKjEWe?= =?us-ascii?Q?S5lzy8RGd2BGcQSvHoGAGNRcR9a7iJSZrhkHrVfk3r+uDGu8qEtTHXw6LXSw?= =?us-ascii?Q?D3nA6N0UD4tIExh3lVWbmOPHaear4n7c+PHt8rtV6zzREniew2bNnieUZvC2?= =?us-ascii?Q?2HbHmCOEYpXdlWycTsilLl2U/gpgrJeZjPPnq+Hx7oEyhBrpo3cVdQdQKMA0?= =?us-ascii?Q?qJejOe1u3OCGAs66sbTicilmAiRA+AvMRJpnSX3lK5NdJPu7d5CXj4OkQWJy?= =?us-ascii?Q?6New83UV/S2VotA6+GNi9GBKKXjthcGU8uC00Ogx7mgmIM75jzP6jipOlTsI?= =?us-ascii?Q?mNog73izfQcLt818Vz2IEbftDgj5x+BhdZBz7qulHgwVIWwdeW9h0S/HFPeM?= =?us-ascii?Q?nkLwQtgsLeMgcz+HtgkJe9ukGySjX6r9bzv/KloOgZBLk33Ck10jSz1L3im7?= =?us-ascii?Q?7COKYP2buznmC0WF86vpgm0E8A03TACYPpzAj8u8VJrwsFHK6CvGFIx1uwUg?= =?us-ascii?Q?V4kKO4+VtTdZmXX69+uwbBhcFJYTxeGGQYiWwc1pY5TasfI5tCS+QyL+MKdI?= =?us-ascii?Q?mvrBOm7dFDGds4UHNd4wRNIu?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-OriginatorOrg: Nvidia.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW2PR12MB2492.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 3a8f83ab-c7b0-4021-7bf7-08d8feb522bd X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Apr 2021 19:48:39.7394 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 43083d15-7273-40c1-b7db-39efd9ccc17a X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Ki47WX2Y3BSbFi/CVGbOT+GMl5PHD5fBOhhwVvJKGmmPmFjLLUyqTdyDw88fmFI2Zbew6zM6j9ow7ERkxKh33A== X-MS-Exchange-Transport-CrossTenantHeadersStamped: MWHPR12MB1934 Subject: Re: [dpdk-dev] [PATCH v3] cryptodev: support multiple cipher data-units X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" Hi Small comment From: Thomas Monjalon > From: Matan Azrad >=20 > In cryptography, a block cipher is a deterministic algorithm operating on= fixed- > length groups of bits, called blocks. >=20 > A block cipher consists of two paired algorithms, one for encryption and = the > other for decryption. Both algorithms accept two inputs: > an input block of size n bits and a key of size k bits; and both yield an= n-bit > output block. The decryption algorithm is defined to be the inverse funct= ion of > the encryption. >=20 > For AES standard the block size is 16 bytes. > For AES in XTS mode, the data to be encrypted\decrypted does not have to = be > multiple of 16B size, the unit of data is called data-unit. > The data-unit size can be any size in range [16B, 2^24B], so, in this cas= e, a data > stream is divided into N amount of equal data-units and must be > encrypted\decrypted in the same data-unit resolution. >=20 > For ABI compatibility reason, the size is limited to 64K (16-bit field). > The new field dataunit_len is inserted in a struct padding hole, which is= only 2 > bytes long in 32-bit build. > It could be extended later during an ABI-breakage window. >=20 > The current cryptodev API doesn't allow the user to select a specific dat= a-unit > length supported by the devices. > In addition, there is no definition how the IV is detected per data-unit = when > single operation includes more than one data-unit. >=20 > That causes applications to use single operation per data-unit even thoug= h all > the data is continuous in memory what reduces datapath performance. >=20 > Add a new feature flag to support multiple data-unit sizes, called > RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS. > Add a new field in cipher capability, called dataunit_set, where the devi= ces can > report the range of the supported data-unit sizes. > Add a new cipher transformation field, called dataunit_len, where the use= r can > select the data-unit length for all the operations. >=20 > All the new fields do not change the size of their structures, by filling= some > struct padding holes. > They are added as exceptions in the ABI check file libabigail.abignore. >=20 > Using a bitmap to report the supported data-unit sizes capability allows = the > devices to report a range simply as same as the user to read it simply. a= lso, > thus sizes are usually common and probably will be shared among different > devices. >=20 > Signed-off-by: Matan Azrad > Signed-off-by: Thomas Monjalon > --- > v1: > - Use data-unit term instead of block. > - Update cipher length description in OP. > - Improve descriptions on xform and capability. > - Improve commit log. >=20 > v2: > - Fix typo: MULITPLE->MULTIPLE. > - Remain only planned supported sizes for data-unit capability. >=20 > v3: > - Improve some comments. > - Fix ABI breakage. >=20 > Note: the suppression rules work in libabigail for this patch, but not su= re it is > really considering the offsets defined in the file. >=20 > --- > devtools/libabigail.abignore | 12 +++++++++++- > doc/guides/cryptodevs/features/default.ini | 1 + > doc/guides/cryptodevs/overview.rst | 3 +++ > doc/guides/rel_notes/release_21_05.rst | 6 ++++++ > lib/librte_cryptodev/rte_crypto_sym.h | 18 ++++++++++++++++-- > lib/librte_cryptodev/rte_cryptodev.c | 2 ++ > lib/librte_cryptodev/rte_cryptodev.h | 16 ++++++++++++++++ > 7 files changed, 55 insertions(+), 3 deletions(-) >=20 > diff --git a/devtools/libabigail.abignore b/devtools/libabigail.abignore = index > 6c0b38984e..bce940f2df 100644 > --- a/devtools/libabigail.abignore > +++ b/devtools/libabigail.abignore > @@ -19,4 +19,14 @@ > ; Ignore fields inserted in cacheline boundary of rte_cryptodev [suppre= ss_type] > name =3D rte_cryptodev > - has_data_member_inserted_between =3D {offset_after(attached), en= d} > \ No newline at end of file > + has_data_member_inserted_between =3D {offset_after(attached), > + end} > + > +; Ignore fields inserted in union boundary of > +rte_cryptodev_symmetric_capability > +[suppress_type] > + name =3D rte_cryptodev_symmetric_capability > + has_data_member_inserted_between =3D > +{offset_after(cipher.iv_size), end} > + > +; Ignore fields inserted in middle padding of rte_crypto_cipher_xform > +[suppress_type] > + name =3D rte_crypto_cipher_xform > + has_data_member_inserted_between =3D {offset_after(key), > +offset_of(iv)} > diff --git a/doc/guides/cryptodevs/features/default.ini > b/doc/guides/cryptodevs/features/default.ini > index 17b177fc45..978bb30cc1 100644 > --- a/doc/guides/cryptodevs/features/default.ini > +++ b/doc/guides/cryptodevs/features/default.ini > @@ -31,6 +31,7 @@ CPU crypto =3D > Symmetric sessionless =3D > Non-Byte aligned data =3D > Sym raw data path API =3D > +Cipher multiple data units =3D >=20 > ; > ; Supported crypto algorithms of a default crypto driver. > diff --git a/doc/guides/cryptodevs/overview.rst > b/doc/guides/cryptodevs/overview.rst > index e2a1e08ec1..e24e3e1993 100644 > --- a/doc/guides/cryptodevs/overview.rst > +++ b/doc/guides/cryptodevs/overview.rst > @@ -46,6 +46,9 @@ Supported Feature Flags > - "Digest encrypted" feature flag means PMD support hash-cipher cases= , > where generated digest is appended to and encrypted with the data. >=20 > + - "CIPHER_MULTIPLE_DATA_UNITS" feature flag means PMD support > operations > + on multiple data-units message. > + >=20 > Supported Cipher Algorithms > --------------------------- > diff --git a/doc/guides/rel_notes/release_21_05.rst > b/doc/guides/rel_notes/release_21_05.rst > index 9a666b629d..2dc776c35e 100644 > --- a/doc/guides/rel_notes/release_21_05.rst > +++ b/doc/guides/rel_notes/release_21_05.rst > @@ -145,6 +145,12 @@ New Features >=20 > * Added support for preferred busy polling. >=20 > +* **Added support of multiple data-units in cryptodev API.** > + > + The cryptodev library has been enhanced to allow operations on > + multiple data-units for AES-XTS algorithm, the data-unit length > + should be set in the transformation. A capability for it was added too= . > + > * **Updated Mellanox RegEx PMD.** >=20 > * Added support for multi-segments mbuf. > diff --git a/lib/librte_cryptodev/rte_crypto_sym.h > b/lib/librte_cryptodev/rte_crypto_sym.h > index 9d572ec057..ec45714fc3 100644 > --- a/lib/librte_cryptodev/rte_crypto_sym.h > +++ b/lib/librte_cryptodev/rte_crypto_sym.h > @@ -222,6 +222,19 @@ struct rte_crypto_cipher_xform { > * - Each key can be either 128 bits (16 bytes) or 256 bits (32 = bytes). > * - Both keys must have the same size. > **/ > + > + uint16_t dataunit_len; > + /**< When RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS is > enabled, > + * this is the data-unit length of the algorithm, > + * otherwise or when the value is 0, use the operation length. > + * The value should be in the range defined by the dataunit_set f= ield > + * in the cipher capability. > + * > + * - For AES-XTS it is the size of data-unit, from IEEE Std 1619-= 2007. > + * For-each data-unit in the operation, the tweak (IV) value is > + * assigned consecutively starting from the operation assigned IV= . > + */ > + > struct { > uint16_t offset; > /**< Starting point for Initialisation Vector or Counter,= @@ -701,9 > +714,10 @@ struct rte_crypto_sym_op { > /**< The message length, in byte= s, of the > * source buffer on which the cr= yptographic > * operation will be computed. > + * This is also the same as the = result length. > * This must be a multiple of th= e block size > - * if a block cipher is being us= ed. This is > - * also the same as the result l= ength. > + * or a multiple of data-unit le= ngth > + * as described in xform. > * > * @note > * For SNOW 3G @ > RTE_CRYPTO_AUTH_SNOW3G_UEA2, diff --git > a/lib/librte_cryptodev/rte_cryptodev.c b/lib/librte_cryptodev/rte_cryptod= ev.c > index 40f55a3cd0..e02e001325 100644 > --- a/lib/librte_cryptodev/rte_cryptodev.c > +++ b/lib/librte_cryptodev/rte_cryptodev.c > @@ -617,6 +617,8 @@ rte_cryptodev_get_feature_name(uint64_t flag) > return "SYM_SESSIONLESS"; > case RTE_CRYPTODEV_FF_NON_BYTE_ALIGNED_DATA: > return "NON_BYTE_ALIGNED_DATA"; > + case RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS: > + return "CIPHER_MULTIPLE_DATA_UNITS"; > default: > return NULL; > } > diff --git a/lib/librte_cryptodev/rte_cryptodev.h > b/lib/librte_cryptodev/rte_cryptodev.h > index ae34f33f69..f6972a7d19 100644 > --- a/lib/librte_cryptodev/rte_cryptodev.h > +++ b/lib/librte_cryptodev/rte_cryptodev.h > @@ -95,6 +95,15 @@ struct rte_crypto_param_range { > */ > }; >=20 > +/** > + * Data-unit supported lengths of cipher algorithms. > + * A bit can represent any set of data-unit sizes > + * (single size, multiple size, range, etc). > + */ > +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_512_BYTES (1 << 0) > +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_4096_BYTES (1 << 1) > +#define RTE_CRYPTO_CIPHER_DATA_UNIT_LEN_1M_BYTES (1 << 2) 1M is irrelevant since datauinit_len is only 16 bits now. > + > /** > * Symmetric Crypto Capability > */ > @@ -127,6 +136,11 @@ struct rte_cryptodev_symmetric_capability { > /**< cipher key size range */ > struct rte_crypto_param_range iv_size; > /**< Initialisation vector data size range */ > + uint32_t dataunit_set; > + /**< > + * A bitmap for a set of the supported data-unit = lengths. > + * 0 for any length defined in the algorithm stan= dard. > + */ > } cipher; > /**< Symmetric Cipher transform capabilities */ > struct { > @@ -461,6 +475,8 @@ rte_cryptodev_asym_get_xform_enum(enum > rte_crypto_asym_xform_type *xform_enum, /**< Support operations on data > which is not byte aligned */ > #define RTE_CRYPTODEV_FF_SYM_RAW_DP (1ULL << 24) > /**< Support accelerator specific symmetric raw data-path APIs */ > +#define RTE_CRYPTODEV_FF_CIPHER_MULTIPLE_DATA_UNITS (1ULL << 25) > +/**< Support operations on multiple data-units message */ >=20 > /** > * Get the name of a crypto device feature flag > -- > 2.31.1