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 13E9DA0C47; Thu, 7 Oct 2021 17:08:32 +0200 (CEST) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 7D8B541188; Thu, 7 Oct 2021 17:08:31 +0200 (CEST) Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by mails.dpdk.org (Postfix) with ESMTP id DA49C41155 for ; Thu, 7 Oct 2021 17:08:27 +0200 (CEST) X-IronPort-AV: E=McAfee;i="6200,9189,10130"; a="249592195" X-IronPort-AV: E=Sophos;i="5.85,355,1624345200"; d="scan'208";a="249592195" Received: from orsmga005.jf.intel.com ([10.7.209.41]) by fmsmga101.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 07 Oct 2021 08:07:44 -0700 X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.85,355,1624345200"; d="scan'208";a="657417437" Received: from fmsmsx604.amr.corp.intel.com ([10.18.126.84]) by orsmga005.jf.intel.com with ESMTP; 07 Oct 2021 08:07:42 -0700 Received: from fmsmsx602.amr.corp.intel.com (10.18.126.82) by fmsmsx604.amr.corp.intel.com (10.18.126.84) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12; Thu, 7 Oct 2021 08:07:41 -0700 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx602.amr.corp.intel.com (10.18.126.82) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2242.12 via Frontend Transport; Thu, 7 Oct 2021 08:07:41 -0700 Received: from NAM02-SN1-obe.outbound.protection.outlook.com (104.47.57.46) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2242.12; Thu, 7 Oct 2021 08:07:41 -0700 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=UMv/Ohn/gw3PUSIAaJ5OdqVb93lVKajTMeR+1veS29Eet7hK8M9esKOXA1DO7uaIwDYRrO2Jb6be/unV0IBD5TrKKcbfwymnHLEJNxCveOkq2b7E57Enct4H1lZFbQKCh5+QHegGT8JWsen52dszgnToD+oaR6bPaF5JCiU6le8hqPEwdMvyTiN9+0m1yFkI29yaXSzZscx02sRwV0MKTF8a5bwt94pMYoD0XeV0eMGuezMqJCiWT3HaDiCTV/QQTpeGRzjhlMTBk5wrbGILqou1VDZI3bQlspQRRYu6Tf2SuEPEpCpUBNyoQIEYS2TInnRdeoxJuPbrZ7v8+uBDPQ== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=sieBqK2EOs7h/JYHzpdVq81cu8JCYxJ5zleT6WkDvGE=; b=HzxswMfyzCd2k28ZcEjE+2DmYZDm3jTjKQ5hszf3NXxhVkc71IXYvWGzDr4F4MtNUQn7qEcl1JSn39MS9q/cX4sP3qmn+r6O/Y6xOfCs0DegdtalCZ0Ssyx+r5/9XVn+gEwA1n12aSWkD/r9bGQ5nmVIMeFYeWgYM8YhVJiw8+n623kHkvOkr3gGr2/JtwN5baWz+JwdMM6FwY8KBzkpnkyv2/0OGqAN1P3wWifTyLFysjdEk1pYSzBoq1+9Zn4Fyu/jkavxdUlilwxh7/xIlBVx5NNnJD1oilYLxtNxJbitEJlotZ4Qu8eOiI52O3+4+p8MfIs2jq4gdCzAR62ckg== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=sieBqK2EOs7h/JYHzpdVq81cu8JCYxJ5zleT6WkDvGE=; b=clNjPVUEGzySNT3lYRRXPa9UGd1q3AenviCEcWZLtFRjtlpIWQTbc6ztVnypGD8cbbY8Vg0jgVo0V3BEoCauaHhOn5gJI0wulc7ghb9OgKAGt8vpl38RLuLvvEPGltM4miRu2fm5LXFaxkyHa2SG84YFeN6OIz512/gxJJbI7N0= Received: from SN6PR11MB3408.namprd11.prod.outlook.com (2603:10b6:805:bc::22) by SN6PR11MB2653.namprd11.prod.outlook.com (2603:10b6:805:63::20) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4587.18; Thu, 7 Oct 2021 15:07:39 +0000 Received: from SN6PR11MB3408.namprd11.prod.outlook.com ([fe80::bce9:d2c0:7c06:ff95]) by SN6PR11MB3408.namprd11.prod.outlook.com ([fe80::bce9:d2c0:7c06:ff95%4]) with mapi id 15.20.4587.020; Thu, 7 Oct 2021 15:07:39 +0000 From: "Ji, Kai" To: Akhil Goyal , "Power, Ciara" , "dev@dpdk.org" CC: "Zhang, Roy Fan" , "Bronowski, PiotrX" , "Doherty, Declan" , "De Lara Guarch, Pablo" Thread-Topic: [EXT] [PATCH v3 09/10] crypto/ipsec_mb: add chacha20-poly1305 PMD to framework Thread-Index: AQHXtU9sY9edqPpfpEWvP0s3OXSRP6vGF9UAgAGUTrA= Date: Thu, 7 Oct 2021 15:07:39 +0000 Message-ID: References: <20210727083832.291687-1-roy.fan.zhang@intel.com> <20210929163035.608387-1-ciara.power@intel.com> <20210929163035.608387-10-ciara.power@intel.com> In-Reply-To: Accept-Language: en-IE, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-reaction: no-action dlp-version: 11.6.200.16 dlp-product: dlpe-windows authentication-results: marvell.com; dkim=none (message not signed) header.d=none;marvell.com; dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: 9a8cf1c8-bf62-4077-3346-08d989a43493 x-ms-traffictypediagnostic: SN6PR11MB2653: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:800; x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: S+FNBfquJXfDWsT9cyaJ+CcdQ+zLOpLllFnMrZrvXXSl58djDRO4mLN3BRrH1ZorDnxyP4SSJVFcA7fuTsHIOUv3RHTNyuMCuaaNHUVYti85pKzS3vrYz28JpKB9Zpn1UegAUpCbMsnwLt8wUnL7qixw2o5hC/10cVLPTmaGhJVVObajceeCi8SZOtoWV1FYm5C9o1/8gn8jtizh/zWG9MYAENqc682tLeNwFWxclSbRkQVy7uTPzVCgdDEcqjmEz7VSfz5c0BL+Bd01xOd95YGE0PVEFcI5MzBXVKuOhjurgVp0yOorgfpx8TCCxp8LL88/VGh2DfJdpQJDQZBMiOrT+LV5FAiKPSMH/cJwgObrr2fdYN8/l5VdlLUYYBur1m+w9sNt/aDfeEMwF5J+zxWikZTdARQiBcq/RGLBvuermPFEqMglYGoTifg5WkK1Pe/BPukRqesWIIa0hfoRd/XDAWXDLWLKAY+WqwPQmfDqMHan0cTZDlMd6g3VOnWE3RJlkMOWNk35/BCLNHd+1NZbC35qUOxnpZziNVwAyklZ6Cvp+RKI+aMdpPuNxlnDo52zk5sQFa7rsawj+0cQSgcGdXX4CWo/oyehBrjLFQ6QRxwQ5gM0V4ZqBo4kMiWdAeZwxqPN1ptdX+SDETk1aZoBtrwKc8p1bwbNdhygre1DmlGM/uwM078oTiANwG3TFnZOIR13t1kL2p9mOs+Ai+P1JauctySDtOmGyXmu4C3ncQ54OIxT1QpAemKARHZ1bRpn/x4jPy5rytSlXr5tkcPPv3eV7J+JuYYxBXJbZG4= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:SN6PR11MB3408.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(9686003)(76116006)(316002)(55016002)(86362001)(186003)(33656002)(110136005)(54906003)(66946007)(508600001)(7696005)(8936002)(8676002)(122000001)(107886003)(38070700005)(52536014)(66446008)(66556008)(83380400001)(64756008)(71200400001)(66476007)(2906002)(38100700002)(26005)(5660300002)(4326008)(30864003)(6506007)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?us-ascii?Q?IlK0hdFJ8FSyXkXQhXnt0ebx57n2VIQrgJSh9bO9wXSOY+gg5IK4i9jyaeL3?= =?us-ascii?Q?vKBGHU4ojV6yo7B5TauL2aCm/Tc//FJnGjf2ysgKRLJ/HJVaNKPct2PSNnFm?= =?us-ascii?Q?3sitAGdvY0FEZym8NxgrWY7yTJ9w4kmLmwFX8CHvep7eGlEwKGvAFDVIEcXK?= =?us-ascii?Q?55/zA3sl+xbPA7GReAMasSmWxTashoahgYwXIC6d41oEjcX1Hrv0XeQMJesl?= =?us-ascii?Q?wvu2cYJ8S6AGGTuYNgmdZDfcpUkgd9nWnJcJBYgh0XMBR2avZzPgAZhqOkwN?= =?us-ascii?Q?6l4G0Y+mb4JRTB7ssSSOLww3kz1feMvCiA36V7y9UILtJGXtqDjucpR/lH8b?= =?us-ascii?Q?DR5uoz4llMLZtB6rbQSQrHop1aFfOSGDY+oi8VWz0K3QcGQOda9IkyyTY8NA?= =?us-ascii?Q?XcTCZNoHIiY7ulY26yVvi+dZlDYXTF6mXIfl/jwimW8Q8YwZ3UIZ3suARWn+?= =?us-ascii?Q?yq8NLvb478JcgQzGcO2A3FbvapqZPX0z9/16xOXVD3CUwvCVf9a5wX3aomDq?= =?us-ascii?Q?rCxq+V/NddOUPAbSKQ8XEon30be5Igjw9ziCLoMykuJx1u3KDklfMfEicooo?= =?us-ascii?Q?0aJqX2fCnX33qeSsbS7P70XLe/Kf2ykDjtBAIu5wnBsbFawjo0xYbET/77zX?= =?us-ascii?Q?06Bp2GepfuMGt+I90sy+whSKN0Og0Ff2XByMK5UJTYw9WXJm2xOuUn7AZIcO?= =?us-ascii?Q?XMdI+R/cFuNm0wrhc/mHeCEXPMQwJV00AgmHoOS/TDtLqHRZzOwDhZl+hQVb?= =?us-ascii?Q?vNv7m8sWOZSvrfAzMYrerT5Yo4unNPQMMAy1DoupOmspinFrB3fnsAIsYpuo?= =?us-ascii?Q?vQkUCQXPj+lSMb2zKks4bjkTV7pk9AUikfMLaH9my/agBM6pv/HNo1jjSRIx?= =?us-ascii?Q?FsLkgbli26juJws6yvLk25Qw9pi/NcQIbVwWYEFKWPq+amLKiwVKU4nt/r4+?= =?us-ascii?Q?wmenxuyFh0wjfp/zwNp7GWd9E8lCfJ/x4pKa74EzSXJmaih21Di/4twV0fqc?= =?us-ascii?Q?VJQ2gi9DY74k1YGYlPvr5coKz7mxODNpIoyU2m8F1lzKZPBKiE7lHV5pGX+Y?= =?us-ascii?Q?NixANl7VAA0xPLVnN5Qteaous9RE1Cqn10a7AVHJX3xcslJsiBNzbOTA/hVI?= =?us-ascii?Q?3+yMHSgNQ50WWFhLn5uU20Esf/37Ekck96qqnPXhUUxBsxkmlV4AVUkI49JB?= =?us-ascii?Q?y64qANdFvjkW6nSRvluWZVXArsjeQviUKvuh5nwsmXmCO52DppwG8uEGAGMm?= =?us-ascii?Q?7BR67xNhdrKAhch1it3gaM+sHQ0Fibqfc3tjdu9SIk6xq3NRhQDDj1kl84FM?= =?us-ascii?Q?oVof3U9doPfP9dygfrRNWOi8?= Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: quoted-printable MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: SN6PR11MB3408.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 9a8cf1c8-bf62-4077-3346-08d989a43493 X-MS-Exchange-CrossTenant-originalarrivaltime: 07 Oct 2021 15:07:39.7740 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: CtHt0h+YJTVFGQTLDLXnmSe2Yd6Y2MWlajFVcFMDOf0KUYsGhVBksZRVdY7xHSiLB7wYcIWidYdxxPZZHeE+YA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: SN6PR11MB2653 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [EXT] [PATCH v3 09/10] crypto/ipsec_mb: add chacha20-poly1305 PMD to framework 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 Ahkill, The addition chacha20-poly test was added for a more robust test case to co= ver oop sgl test scenario. Regards Kai=20 >=20 > Any specific reason to add new vectors for chacha poly? > Are the ones already present not enough? >=20 > > +static uint8_t chacha_aad_2[] =3D { > > + 0xf3, 0x33, 0x88, 0x86, 0x00, 0x00, 0x00, 0x00, > > + 0x00, 0x00, 0x4e, 0x91 > > +}; > > + > > +static const struct aead_test_data chacha20_poly1305_case_2 =3D { > > + .algo =3D RTE_CRYPTO_AEAD_CHACHA20_POLY1305, > > + .key =3D { > > + .data =3D { > > + 0x1c, 0x92, 0x40, 0xa5, 0xeb, 0x55, 0xd3, > > 0x8a, > > + 0xf3, 0x33, 0x88, 0x86, 0x04, 0xf6, 0xb5, 0xf0, > > + 0x47, 0x39, 0x17, 0xc1, 0x40, 0x2b, 0x80, > > 0x09, > > + 0x9d, 0xca, 0x5c, 0xbc, 0x20, 0x70, 0x75, 0xc0 > > + }, > > + .len =3D 32 > > + }, > > + .iv =3D { > > + .data =3D { > > + 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x03, > > 0x04, > > + 0x05, 0x06, 0x07, 0x08 > > + }, > > + .len =3D 12 > > + }, > > + .aad =3D { > > + .data =3D chacha_aad_2, > > + .len =3D 12 > > + }, > > + .plaintext =3D { > > + .data =3D { > > + 0x49, 0x6e, 0x74, 0x65, 0x72, 0x6e, 0x65, > > 0x74, > > + 0x2d, 0x44, 0x72, 0x61, 0x66, 0x74, 0x73, > > 0x20, > > + 0x61, 0x72, 0x65, 0x20, 0x64, 0x72, 0x61, > > 0x66, > > + 0x74, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, > > 0x65, > > + 0x6e, 0x74, 0x73, 0x20, 0x76, 0x61, 0x6c, > > 0x69, > > + 0x64, 0x20, 0x66, 0x6f, 0x72, 0x20, 0x61, > > 0x20, > > + 0x6d, 0x61, 0x78, 0x69, 0x6d, 0x75, 0x6d, > > 0x20, > > + 0x6f, 0x66, 0x20, 0x73, 0x69, 0x78, 0x20, > > 0x6d, > > + 0x6f, 0x6e, 0x74, 0x68, 0x73, 0x20, 0x61, > > 0x6e, > > + 0x64, 0x20, 0x6d, 0x61, 0x79, 0x20, 0x62, > > 0x65, > > + 0x20, 0x75, 0x70, 0x64, 0x61, 0x74, 0x65, > > 0x64, > > + 0x2c, 0x20, 0x72, 0x65, 0x70, 0x6c, 0x61, > > 0x63, > > + 0x65, 0x64, 0x2c, 0x20, 0x6f, 0x72, 0x20, 0x6f, > > + 0x62, 0x73, 0x6f, 0x6c, 0x65, 0x74, 0x65, > > 0x64, > > + 0x20, 0x62, 0x79, 0x20, 0x6f, 0x74, 0x68, > > 0x65, > > + 0x72, 0x20, 0x64, 0x6f, 0x63, 0x75, 0x6d, > > 0x65, > > + 0x6e, 0x74, 0x73, 0x20, 0x61, 0x74, 0x20, > > 0x61, > > + 0x6e, 0x79, 0x20, 0x74, 0x69, 0x6d, 0x65, > > 0x2e, > > + 0x20, 0x49, 0x74, 0x20, 0x69, 0x73, 0x20, > > 0x69, > > + 0x6e, 0x61, 0x70, 0x70, 0x72, 0x6f, 0x70, > > 0x72, > > + 0x69, 0x61, 0x74, 0x65, 0x20, 0x74, 0x6f, > > 0x20, > > + 0x75, 0x73, 0x65, 0x20, 0x49, 0x6e, 0x74, > > 0x65, > > + 0x72, 0x6e, 0x65, 0x74, 0x2d, 0x44, 0x72, > > 0x61, > > + 0x66, 0x74, 0x73, 0x20, 0x61, 0x73, 0x20, > > 0x72, > > + 0x65, 0x66, 0x65, 0x72, 0x65, 0x6e, 0x63, > > 0x65, > > + 0x20, 0x6d, 0x61, 0x74, 0x65, 0x72, 0x69, > > 0x61, > > + 0x6c, 0x20, 0x6f, 0x72, 0x20, 0x74, 0x6f, 0x20, > > + 0x63, 0x69, 0x74, 0x65, 0x20, 0x74, 0x68, > > 0x65, > > + 0x6d, 0x20, 0x6f, 0x74, 0x68, 0x65, 0x72, > > 0x20, > > + 0x74, 0x68, 0x61, 0x6e, 0x20, 0x61, 0x73, > > 0x20, > > + 0x2f, 0xe2, 0x80, 0x9c, 0x77, 0x6f, 0x72, > > 0x6b, > > + 0x20, 0x69, 0x6e, 0x20, 0x70, 0x72, 0x6f, > > 0x67, > > + 0x72, 0x65, 0x73, 0x73, 0x2e, 0x2f, 0xe2, > > 0x80, > > + 0x9d > > + }, > > + .len =3D 265 > > + }, > > + .ciphertext =3D { > > + .data =3D { > > + 0x64, 0xa0, 0x86, 0x15, 0x75, 0x86, 0x1a, > > 0xf4, > > + 0x60, 0xf0, 0x62, 0xc7, 0x9b, 0xe6, 0x43, > > 0xbd, > > + 0x5e, 0x80, 0x5c, 0xfd, 0x34, 0x5c, 0xf3, 0x89, > > + 0xf1, 0x08, 0x67, 0x0a, 0xc7, 0x6c, 0x8c, > > 0xb2, > > + 0x4c, 0x6c, 0xfc, 0x18, 0x75, 0x5d, 0x43, > > 0xee, > > + 0xa0, 0x9e, 0xe9, 0x4e, 0x38, 0x2d, 0x26, > > 0xb0, > > + 0xbd, 0xb7, 0xb7, 0x3c, 0x32, 0x1b, 0x01, > > 0x00, > > + 0xd4, 0xf0, 0x3b, 0x7f, 0x35, 0x58, 0x94, 0xcf, > > + 0x33, 0x2f, 0x83, 0x0e, 0x71, 0x0b, 0x97, > > 0xce, > > + 0x98, 0xc8, 0xa8, 0x4a, 0xbd, 0x0b, 0x94, > > 0x81, > > + 0x14, 0xad, 0x17, 0x6e, 0x00, 0x8d, 0x33, > > 0xbd, > > + 0x60, 0xf9, 0x82, 0xb1, 0xff, 0x37, 0xc8, 0x55, > > + 0x97, 0x97, 0xa0, 0x6e, 0xf4, 0xf0, 0xef, 0x61, > > + 0xc1, 0x86, 0x32, 0x4e, 0x2b, 0x35, 0x06, > > 0x38, > > + 0x36, 0x06, 0x90, 0x7b, 0x6a, 0x7c, 0x02, > > 0xb0, > > + 0xf9, 0xf6, 0x15, 0x7b, 0x53, 0xc8, 0x67, > > 0xe4, > > + 0xb9, 0x16, 0x6c, 0x76, 0x7b, 0x80, 0x4d, > > 0x46, > > + 0xa5, 0x9b, 0x52, 0x16, 0xcd, 0xe7, 0xa4, > > 0xe9, > > + 0x90, 0x40, 0xc5, 0xa4, 0x04, 0x33, 0x22, > > 0x5e, > > + 0xe2, 0x82, 0xa1, 0xb0, 0xa0, 0x6c, 0x52, > > 0x3e, > > + 0xaf, 0x45, 0x34, 0xd7, 0xf8, 0x3f, 0xa1, 0x15, > > + 0x5b, 0x00, 0x47, 0x71, 0x8c, 0xbc, 0x54, > > 0x6a, > > + 0x0d, 0x07, 0x2b, 0x04, 0xb3, 0x56, 0x4e, > > 0xea, > > + 0x1b, 0x42, 0x22, 0x73, 0xf5, 0x48, 0x27, > > 0x1a, > > + 0x0b, 0xb2, 0x31, 0x60, 0x53, 0xfa, 0x76, > > 0x99, > > + 0x19, 0x55, 0xeb, 0xd6, 0x31, 0x59, 0x43, > > 0x4e, > > + 0xce, 0xbb, 0x4e, 0x46, 0x6d, 0xae, 0x5a, > > 0x10, > > + 0x73, 0xa6, 0x72, 0x76, 0x27, 0x09, 0x7a, > > 0x10, > > + 0x49, 0xe6, 0x17, 0xd9, 0x1d, 0x36, 0x10, > > 0x94, > > + 0xfa, 0x68, 0xf0, 0xff, 0x77, 0x98, 0x71, 0x30, > > + 0x30, 0x5b, 0xea, 0xba, 0x2e, 0xda, 0x04, > > 0xdf, > > + 0x99, 0x7b, 0x71, 0x4d, 0x6c, 0x6f, 0x2c, > > 0x29, > > + 0xa6, 0xad, 0x5c, 0xb4, 0x02, 0x2b, 0x02, > > 0x70, > > + 0x9b > > + }, > > + .len =3D 265 > > + }, > > + .auth_tag =3D { > > + .data =3D { > > + 0xee, 0xad, 0x9d, 0x67, 0x89, 0x0c, 0xbb, > > 0x22, > > + 0x39, 0x23, 0x36, 0xfe, 0xa1, 0x85, 0x1f, 0x38 > > + }, > > + .len =3D 16 > > + } > > +}; > > #endif /* TEST_CRYPTODEV_AEAD_TEST_VECTORS_H_ */ diff --git > > a/doc/guides/cryptodevs/chacha20_poly1305.rst > > b/doc/guides/cryptodevs/chacha20_poly1305.rst > > new file mode 100644 > > index 0000000000..e5f7368d6d > > --- /dev/null > > +++ b/doc/guides/cryptodevs/chacha20_poly1305.rst > > @@ -0,0 +1,99 @@ > > +.. SPDX-License-Identifier: BSD-3-Clause > > + Copyright(c) 2016-2019 Intel Corporation. > > + > > +Chacha20-poly1305 Crypto Poll Mode Driver > > +=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > + > > +The Chacha20-poly1305 PMD provides poll mode crypto driver support > > +for utilizing `Intel IPSec Multi-buffer library > > > 3A__github.com_01org_intel-2Dipsec- > > > 2Dmb&d=3DDwIDAg&c=3DnKjWec2b6R0mOyPaz7xtfQ&r=3DDnL7Si2wl_PRwpZ9TW > e > > > y3eu68gBzn7DkPwuqhd6WNyo&m=3DcJBMpjPsWqfEmtw2rODDkdR7x3SsmW4 > > - > > > 54dwxIGI6os&s=3DFrXg2cbYTOa7noqANBGmUQgdAVNCP8wTOBeCtjNkUH8&e > =3D > > >`_. > > + > > +Features > > +-------- > > + > > +Chacha20-poly1305 PMD has support for: > > + > > +AEAD algorithms: > > + > > +* RTE_CRYPTO_AEAD_CHACHA20_POLY1305 > > + > > + > > +Installation > > +------------ > > + > > +To build DPDK with the Chacha20-poly1305 PMD the user is required to > > download > > +the multi-buffer library from `here > > > 3A__github.com_01org_intel-2Dipsec- > > > 2Dmb&d=3DDwIDAg&c=3DnKjWec2b6R0mOyPaz7xtfQ&r=3DDnL7Si2wl_PRwpZ9TW > e > > > y3eu68gBzn7DkPwuqhd6WNyo&m=3DcJBMpjPsWqfEmtw2rODDkdR7x3SsmW4 > > - > > > 54dwxIGI6os&s=3DFrXg2cbYTOa7noqANBGmUQgdAVNCP8wTOBeCtjNkUH8&e > =3D > > >`_ > > +and compile it on their user system before building DPDK. > > +The latest version of the library supported by this PMD is v1.0, > > +which can be downloaded from > > ` > 3A__github.com_01org_intel-2Dipsec- > > > 2Dmb_archive_v1.0.zip&d=3DDwIDAg&c=3DnKjWec2b6R0mOyPaz7xtfQ&r=3DDnL7S > i > > > 2wl_PRwpZ9TWey3eu68gBzn7DkPwuqhd6WNyo&m=3DcJBMpjPsWqfEmtw2rO > > DDkdR7x3SsmW4-54dwxIGI6os&s=3DEZeDlYo123VyTtXBBs_5FB5hrTLQTD5- > > OfGMKFbqRXs&e=3D >`_. > > + > > +After downloading the library, the user needs to unpack and compile > > +it on their system before building DPDK: > > + > > +.. code-block:: console > > + > > + make > > + make install > > + > > +The library requires NASM to be built. Depending on the library > > +version, it > > might > > +require a minimum NASM version (e.g. v0.54 requires at least NASM 2.14= ). > > + > > +NASM is packaged for different OS. However, on some OS the version is > > +too > > old, > > +so a manual installation is required. In that case, NASM can be > > +downloaded > > from > > +`NASM website > 3A__www.nasm.us_pub_nasm_releasebuilds_-3FC-3DM-3BO- > > > 3DD&d=3DDwIDAg&c=3DnKjWec2b6R0mOyPaz7xtfQ&r=3DDnL7Si2wl_PRwpZ9TWey > > > 3eu68gBzn7DkPwuqhd6WNyo&m=3DcJBMpjPsWqfEmtw2rODDkdR7x3SsmW4- > > > 54dwxIGI6os&s=3D3BB7_2sRCgmORUOvnzI3Lc9AG4lq07D6K1OndgbWQVc&e=3D > > >`_. > > +Once it is downloaded, extract it and follow these steps: > > + > > +.. code-block:: console > > + > > + ./configure > > + make > > + make install > > + > > +.. note:: > > + > > + Compilation of the Multi-Buffer library is broken when GCC < 5.0, > > + if library > > <=3D v0.53. > > + If a lower GCC version than 5.0, the workaround proposed by the > > following link > > + should be used: > > + ` > 3A__github.com_intel_intel-2Dipsec- > > > 2Dmb_issues_40&d=3DDwIDAg&c=3DnKjWec2b6R0mOyPaz7xtfQ&r=3DDnL7Si2wl_P > > > RwpZ9TWey3eu68gBzn7DkPwuqhd6WNyo&m=3DcJBMpjPsWqfEmtw2rODDkd > R > > 7x3SsmW4- > > 54dwxIGI6os&s=3D3vpATFyHRB05ndE_OFBm4s0K6Z_tx8qsAiyQGSZOhOk&e=3D > > >`_. > > + > > +As a reference, the following table shows a mapping between the past > > DPDK versions > > +and the external crypto libraries supported by them: > > + > > +.. _table_zuc_versions: >=20 > ZUC ???? >=20 > > + > > +.. table:: DPDK and external crypto library version compatibility > > + > > + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > + DPDK version Crypto library version > > + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > + 21.11+ Multi-buffer library 1.0* > > + =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D =3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D > > + > > +\* Multi-buffer library 1.0 or newer only works for Meson but not > > +Make > > build system. > > + > > +Initialization > > +-------------- > > + > > +In order to enable this virtual crypto PMD, user must: > > + > > +* Build the multi buffer library (explained in Installation section). > > + > > +To use the PMD in an application, user must: > > + > > +* Call rte_vdev_init("crypto_chacha20_poly1305") within the applicatio= n. > > + > > +* Use --vdev=3D"crypto_chacha20_poly1305" in the EAL options, which > > +will > > call > > + rte_vdev_init() internally. > > + > > +The following parameters (all optional) can be provided in the > > +previous two > > calls: > > + > > +* socket_id: Specify the socket where the memory for the device is > > +going to > > be allocated > > + (by default, socket_id will be the socket where the core that is > > + creating the > > PMD is running on). > > + > > +* max_nb_queue_pairs: Specify the maximum number of queue pairs in > > +the > > device (8 by default). > > + > > +* max_nb_sessions: Specify the maximum number of sessions that can > be > > created (2048 by default). > > + > > +Example: > > + > > +.. code-block:: console > > + > > + -- > vdev=3D"crypto_chacha20_poly1305,socket_id=3D0,max_nb_sessions=3D128" > > diff --git a/doc/guides/cryptodevs/features/chacha20_poly1305.ini > > b/doc/guides/cryptodevs/features/chacha20_poly1305.ini > > new file mode 100644 > > index 0000000000..3353e031c9 > > --- /dev/null > > +++ b/doc/guides/cryptodevs/features/chacha20_poly1305.ini > > @@ -0,0 +1,35 @@ > > +; > > +; Supported features of the 'chacha20_poly1305' crypto driver. > > +; > > +; Refer to default.ini for the full list of available PMD features. > > +; > > +[Features] > > +Symmetric crypto =3D Y > > +Sym operation chaining =3D Y > > +Symmetric sessionless =3D Y > > +Non-Byte aligned data =3D Y > > +In Place SGL =3D Y > > +OOP SGL In LB Out =3D Y > > +OOP LB In LB Out =3D Y > > +CPU crypto =3D Y > > + > > +; > > +; Supported crypto algorithms of the 'chacha20_poly1305' crypto driver= . > > +; > > +[Cipher] > > + > > +; > > +; Supported authentication algorithms of the 'chacha20_poly1305' > > +crypto > > driver. > > +; > > +[Auth] > > + > > +; > > +; Supported AEAD algorithms of the 'chacha20_poly1305' crypto driver. > > +; > > +[AEAD] > > +CHACHA20-POLY1305 =3D Y > > + > > +; > > +; Supported Asymmetric algorithms of the 'chacha20_poly1305' crypto > > driver. > > +; > > +[Asymmetric] > > diff --git a/doc/guides/cryptodevs/index.rst > > b/doc/guides/cryptodevs/index.rst index 0f981c77b5..3dcc2ecd2e 100644 > > --- a/doc/guides/cryptodevs/index.rst > > +++ b/doc/guides/cryptodevs/index.rst > > @@ -16,6 +16,7 @@ Crypto Device Drivers > > bcmfs > > caam_jr > > ccp > > + chacha20_poly1305 > > cnxk > > dpaa2_sec > > dpaa_sec > > diff --git a/doc/guides/rel_notes/release_21_11.rst > > b/doc/guides/rel_notes/release_21_11.rst > > index 696541dab7..3beecb2392 100644 > > --- a/doc/guides/rel_notes/release_21_11.rst > > +++ b/doc/guides/rel_notes/release_21_11.rst > > @@ -76,6 +76,11 @@ New Features > > * Added support for partially encrypted digest when using auth-ciphe= r > > operations. > > > > +* **Added Chacha20-poly1305 Crypto PMD.** > > + > > + * Added PMD to support chacha20-poly1305 algorithms to IPSec_MB > PMD > > framework. >=20 > A sub-bullet may be sufficient in the ipsec-mb update. >=20 > > + * Test vector added for chacha20-poly1305 SGL test. > > + > > * **Updated Marvell cnxk crypto PMD.** > > > > * Added AES-CBC SHA1-HMAC support in lookaside protocol (IPsec) for > > CN10K. > > diff --git a/drivers/crypto/ipsec_mb/meson.build > > b/drivers/crypto/ipsec_mb/meson.build > > index a1619c78ac..6e0a5f8004 100644 > > --- a/drivers/crypto/ipsec_mb/meson.build > > +++ b/drivers/crypto/ipsec_mb/meson.build > > @@ -25,6 +25,7 @@ sources =3D files('rte_ipsec_mb_pmd.c', > > 'rte_ipsec_mb_pmd_ops.c', > > 'pmd_aesni_mb.c', > > 'pmd_aesni_gcm.c', > > + 'pmd_chacha_poly.c', > > 'pmd_kasumi.c', > > 'pmd_snow3g.c', > > 'pmd_zuc.c' > > diff --git a/drivers/crypto/ipsec_mb/pmd_chacha_poly.c > > b/drivers/crypto/ipsec_mb/pmd_chacha_poly.c > > new file mode 100644 > > index 0000000000..814bc0761c > > --- /dev/null > > +++ b/drivers/crypto/ipsec_mb/pmd_chacha_poly.c > > @@ -0,0 +1,482 @@ > > +/* SPDX-License-Identifier: BSD-3-Clause > > + * Copyright(c) 2015-2021 Intel Corporation */ > > + > > +#include > > + > > +#if defined(RTE_LIB_SECURITY) > > +#define AESNI_MB_DOCSIS_SEC_ENABLED 1 #include > #include > > + #include #endif > > + > > +#include "rte_ipsec_mb_pmd_private.h" > > + > > +#define CHACHA20_POLY1305_IV_LENGTH 12 #define > > +CHACHA20_POLY1305_DIGEST_LENGTH 16 #define > CHACHA20_POLY1305_KEY_SIZE > > +32 > > + > > +static const > > +struct rte_cryptodev_capabilities chacha20_poly1305_capabilities[] =3D= { > > + {/* CHACHA20-POLY1305 */ > > + .op =3D RTE_CRYPTO_OP_TYPE_SYMMETRIC, > > + {.sym =3D { > > + .xform_type =3D RTE_CRYPTO_SYM_XFORM_AEAD, > > + {.aead =3D { > > + .algo =3D > > RTE_CRYPTO_AEAD_CHACHA20_POLY1305, > > + .block_size =3D 64, > > + .key_size =3D { > > + .min =3D 32, > > + .max =3D 32, > > + .increment =3D 0}, > > + .digest_size =3D { > > + .min =3D 16, > > + .max =3D 16, > > + .increment =3D 0}, > > + .aad_size =3D { > > + .min =3D 0, > > + .max =3D 240, > > + .increment =3D 1}, > > + .iv_size =3D { > > + .min =3D 12, > > + .max =3D 12, > > + .increment =3D 0}, > > + }, > > + } > > + },} > > + }, > > + RTE_CRYPTODEV_END_OF_CAPABILITIES_LIST() > > +}; > > + > > +uint8_t pmd_driver_id_chacha20_poly1305; > > + > > +/** CHACHA20 POLY1305 private session structure */ struct > > +chacha20_poly1305_session { > > + struct { > > + uint16_t length; > > + uint16_t offset; > > + } iv; > > + /**< IV parameters */ > > + uint16_t aad_length; > > + /**< AAD length */ > > + uint16_t req_digest_length; > > + /**< Requested digest length */ > > + uint16_t gen_digest_length; > > + /**< Generated digest length */ > > + uint8_t key[CHACHA20_POLY1305_KEY_SIZE]; > > + enum ipsec_mb_operation op; > > +} __rte_cache_aligned; > > + > > +struct chacha20_poly1305_qp_data { > > + struct chacha20_poly1305_context_data > > chacha20_poly1305_ctx_data; > > + uint8_t temp_digest[CHACHA20_POLY1305_DIGEST_LENGTH]; > > + /**< Buffer used to store the digest generated > > + * by the driver when verifying a digest provided > > + * by the user (using authentication verify operation) > > + */ > > +}; > > + > > +/** Parse crypto xform chain and set private session parameters. */ > > +static int chacha20_poly1305_session_configure(IMB_MGR * mb_mgr > > +__rte_unused, > > + void *priv_sess, const struct rte_crypto_sym_xform *xform) > { > > + struct chacha20_poly1305_session *sess =3D priv_sess; > > + const struct rte_crypto_sym_xform *auth_xform; > > + const struct rte_crypto_sym_xform *cipher_xform; > > + const struct rte_crypto_sym_xform *aead_xform; > > + > > + uint8_t key_length; > > + const uint8_t *key; > > + enum ipsec_mb_operation mode; > > + int ret =3D 0; > > + > > + ret =3D ipsec_mb_parse_xform(xform, &mode, &auth_xform, > > + &cipher_xform, &aead_xform); > > + if (ret) > > + return ret; > > + > > + sess->op =3D mode; > > + > > + switch (sess->op) { > > + case IPSEC_MB_OP_AEAD_AUTHENTICATED_ENCRYPT: > > + case IPSEC_MB_OP_AEAD_AUTHENTICATED_DECRYPT: > > + if (aead_xform->aead.algo !=3D > > + RTE_CRYPTO_AEAD_CHACHA20_POLY1305) { > > + IPSEC_MB_LOG(ERR, > > + "The only combined operation supported is > > CHACHA20 POLY1305"); > > + ret =3D -ENOTSUP; > > + goto error_exit; > > + } > > + /* Set IV parameters */ > > + sess->iv.offset =3D aead_xform->aead.iv.offset; > > + sess->iv.length =3D aead_xform->aead.iv.length; > > + key_length =3D aead_xform->aead.key.length; > > + key =3D aead_xform->aead.key.data; > > + sess->aad_length =3D aead_xform->aead.aad_length; > > + sess->req_digest_length =3D aead_xform->aead.digest_length; > > + break; > > + default: > > + IPSEC_MB_LOG( > > + ERR, "Wrong xform type, has to be AEAD or > > authentication"); > > + ret =3D -ENOTSUP; > > + goto error_exit; > > + } > > + > > + /* IV check */ > > + if (sess->iv.length !=3D CHACHA20_POLY1305_IV_LENGTH && > > + sess->iv.length !=3D 0) { > > + IPSEC_MB_LOG(ERR, "Wrong IV length"); > > + ret =3D -EINVAL; > > + goto error_exit; > > + } > > + > > + /* Check key length */ > > + if (key_length !=3D CHACHA20_POLY1305_KEY_SIZE) { > > + IPSEC_MB_LOG(ERR, "Invalid key length"); > > + ret =3D -EINVAL; > > + goto error_exit; > > + } else { > > + memcpy(sess->key, key, CHACHA20_POLY1305_KEY_SIZE); > > + } > > + > > + /* Digest check */ > > + if (sess->req_digest_length !=3D > > CHACHA20_POLY1305_DIGEST_LENGTH) { > > + IPSEC_MB_LOG(ERR, "Invalid digest length"); > > + ret =3D -EINVAL; > > + goto error_exit; > > + } else { > > + sess->gen_digest_length =3D > > CHACHA20_POLY1305_DIGEST_LENGTH; > > + } > > + > > +error_exit: > > + return ret; > > +} > > + > > +/** > > + * Process a crypto operation, calling > > + * the direct chacha poly API from the multi buffer library. > > + * > > + * @param qp queue pair > > + * @param op symmetric crypto operation > > + * @param session chacha poly session > > + * > > + * @return > > + * - Return 0 if success > > + */ > > +static int > > +chacha20_poly1305_crypto_op(struct ipsec_mb_qp *qp, struct > > rte_crypto_op *op, > > + struct chacha20_poly1305_session *session) { > > + struct chacha20_poly1305_qp_data *qp_data =3D > > + ipsec_mb_get_qp_private_data(qp); > > + uint8_t *src, *dst; > > + uint8_t *iv_ptr; > > + struct rte_crypto_sym_op *sym_op =3D op->sym; > > + struct rte_mbuf *m_src =3D sym_op->m_src; > > + uint32_t offset, data_offset, data_length; > > + uint32_t part_len, data_len; > > + int total_len; > > + uint8_t *tag; > > + unsigned int oop =3D 0; > > + > > + offset =3D sym_op->aead.data.offset; > > + data_offset =3D offset; > > + data_length =3D sym_op->aead.data.length; > > + RTE_ASSERT(m_src !=3D NULL); > > + > > + while (offset >=3D m_src->data_len && data_length !=3D 0) { > > + offset -=3D m_src->data_len; > > + m_src =3D m_src->next; > > + > > + RTE_ASSERT(m_src !=3D NULL); > > + } > > + > > + src =3D rte_pktmbuf_mtod_offset(m_src, uint8_t *, offset); > > + > > + data_len =3D m_src->data_len - offset; > > + part_len =3D (data_len < data_length) ? data_len : > > + data_length; > > + > > + /* In-place */ > > + if (sym_op->m_dst =3D=3D NULL || (sym_op->m_dst =3D=3D sym_op- > >m_src)) > > + dst =3D src; > > + /* Out-of-place */ > > + else { > > + oop =3D 1; > > + /* Segmented destination buffer is not supported > > + * if operation is Out-of-place > > + */ > > + RTE_ASSERT(rte_pktmbuf_is_contiguous(sym_op->m_dst)); > > + dst =3D rte_pktmbuf_mtod_offset(sym_op->m_dst, uint8_t *, > > + data_offset); > > + } > > + > > + iv_ptr =3D rte_crypto_op_ctod_offset(op, uint8_t *, > > + session->iv.offset); > > + > > + IMB_CHACHA20_POLY1305_INIT(qp->mb_mgr, session->key, > > + &qp_data->chacha20_poly1305_ctx_data, > > + iv_ptr, sym_op->aead.aad.data, > > + (uint64_t)session->aad_length); > > + > > + if (session->op =3D=3D IPSEC_MB_OP_AEAD_AUTHENTICATED_ENCRYPT) > > { > > + IMB_CHACHA20_POLY1305_ENC_UPDATE(qp->mb_mgr, > > + session->key, > > + &qp_data->chacha20_poly1305_ctx_data, > > + dst, src, (uint64_t)part_len); > > + total_len =3D data_length - part_len; > > + > > + while (total_len) { > > + m_src =3D m_src->next; > > + RTE_ASSERT(m_src !=3D NULL); > > + > > + src =3D rte_pktmbuf_mtod(m_src, uint8_t *); > > + if (oop) > > + dst +=3D part_len; > > + else > > + dst =3D src; > > + part_len =3D (m_src->data_len < total_len) ? > > + m_src->data_len : total_len; > > + > > + if (dst =3D=3D NULL || src =3D=3D NULL) { > > + IPSEC_MB_LOG(ERR, "Invalid src or dst > > input"); > > + return -EINVAL; > > + } > > + IMB_CHACHA20_POLY1305_ENC_UPDATE(qp- > > >mb_mgr, > > + session->key, > > + &qp_data- > > >chacha20_poly1305_ctx_data, > > + dst, src, (uint64_t)part_len); > > + total_len -=3D part_len; > > + if (total_len < 0) { > > + IPSEC_MB_LOG(ERR, "Invalid part len"); > > + return -EINVAL; > > + } > > + } > > + > > + tag =3D sym_op->aead.digest.data; > > + IMB_CHACHA20_POLY1305_ENC_FINALIZE(qp->mb_mgr, > > + &qp_data- > > >chacha20_poly1305_ctx_data, > > + tag, session->gen_digest_length); > > + > > + } else { > > + IMB_CHACHA20_POLY1305_DEC_UPDATE(qp->mb_mgr, > > + session->key, > > + &qp_data- > > >chacha20_poly1305_ctx_data, > > + dst, src, (uint64_t)part_len); > > + > > + total_len =3D data_length - part_len; > > + > > + while (total_len) { > > + m_src =3D m_src->next; > > + > > + RTE_ASSERT(m_src !=3D NULL); > > + > > + src =3D rte_pktmbuf_mtod(m_src, uint8_t *); > > + if (oop) > > + dst +=3D part_len; > > + else > > + dst =3D src; > > + part_len =3D (m_src->data_len < total_len) ? > > + m_src->data_len : total_len; > > + > > + if (dst =3D=3D NULL || src =3D=3D NULL) { > > + IPSEC_MB_LOG(ERR, "Invalid src or dst > > input"); > > + return -EINVAL; > > + } > > + IMB_CHACHA20_POLY1305_DEC_UPDATE(qp- > > >mb_mgr, > > + session->key, > > + &qp_data- > > >chacha20_poly1305_ctx_data, > > + dst, src, (uint64_t)part_len); > > + total_len -=3D part_len; > > + if (total_len < 0) { > > + IPSEC_MB_LOG(ERR, "Invalid part len"); > > + return -EINVAL; > > + } > > + } > > + > > + tag =3D qp_data->temp_digest; > > + IMB_CHACHA20_POLY1305_DEC_FINALIZE(qp->mb_mgr, > > + &qp_data- > > >chacha20_poly1305_ctx_data, > > + tag, session->gen_digest_length); > > + } > > + > > + return 0; > > +} > > + > > +/** > > + * Process a completed chacha poly op > > + * > > + * @param qp Queue Pair to process > > + * @param op Crypto operation > > + * @param sess Crypto session > > + * > > + * @return > > + * - void > > + */ > > +static void > > +post_process_chacha20_poly1305_crypto_op(struct ipsec_mb_qp *qp, > > + struct rte_crypto_op *op, > > + struct chacha20_poly1305_session *session) { > > + struct chacha20_poly1305_qp_data *qp_data =3D > > + ipsec_mb_get_qp_private_data(qp); > > + > > + op->status =3D RTE_CRYPTO_OP_STATUS_SUCCESS; > > + /* Verify digest if required */ > > + if (session->op =3D=3D IPSEC_MB_OP_AEAD_AUTHENTICATED_DECRYPT > > || > > + session->op =3D=3D IPSEC_MB_OP_HASH_VERIFY_ONLY) > { > > + uint8_t *digest =3D op->sym->aead.digest.data; > > + uint8_t *tag =3D qp_data->temp_digest; > > + > > +#ifdef RTE_LIBRTE_PMD_CHACHA20_POLY1305_DEBUG > > + rte_hexdump(stdout, "auth tag (orig):", > > + digest, session->req_digest_length); > > + rte_hexdump(stdout, "auth tag (calc):", > > + tag, session->req_digest_length); #endif > > + if (memcmp(tag, digest, session->req_digest_length) > > !=3D 0) > > + op->status =3D > > RTE_CRYPTO_OP_STATUS_AUTH_FAILED; > > + > > + } > > + > > +} > > + > > +/** > > + * Process a completed Chacha20_poly1305 request > > + * > > + * @param qp Queue Pair to process > > + * @param op Crypto operation > > + * @param sess Crypto session > > + * > > + * @return > > + * - void > > + */ > > +static void > > +handle_completed_chacha20_poly1305_crypto_op(struct ipsec_mb_qp > > *qp, > > + struct rte_crypto_op *op, > > + struct chacha20_poly1305_session *sess) { > > + post_process_chacha20_poly1305_crypto_op(qp, op, sess); > > + > > + /* Free session if a session-less crypto op */ > > + if (op->sess_type =3D=3D RTE_CRYPTO_OP_SESSIONLESS) { > > + memset(sess, 0, sizeof(struct chacha20_poly1305_session)); > > + memset(op->sym->session, 0, > > + > > rte_cryptodev_sym_get_existing_header_session_size( > > + op->sym->session)); > > + rte_mempool_put(qp->sess_mp_priv, sess); > > + rte_mempool_put(qp->sess_mp, op->sym->session); > > + op->sym->session =3D NULL; > > + } > > +} > > + > > +static uint16_t > > +chacha20_poly1305_pmd_dequeue_burst(void *queue_pair, > > + struct rte_crypto_op **ops, uint16_t nb_ops) { > > + struct chacha20_poly1305_session *sess; > > + struct ipsec_mb_qp *qp =3D queue_pair; > > + > > + int retval =3D 0; > > + unsigned int i =3D 0, nb_dequeued; > > + > > + nb_dequeued =3D rte_ring_dequeue_burst(qp->ingress_queue, > > + (void **)ops, nb_ops, NULL); > > + > > + for (i =3D 0; i < nb_dequeued; i++) { > > + > > + sess =3D ipsec_mb_get_session_private(qp, ops[i]); > > + if (unlikely(sess =3D=3D NULL)) { > > + ops[i]->status =3D > > RTE_CRYPTO_OP_STATUS_INVALID_ARGS; > > + qp->stats.dequeue_err_count++; > > + break; > > + } > > + > > + retval =3D chacha20_poly1305_crypto_op(qp, ops[i], sess); > > + if (retval < 0) { > > + ops[i]->status =3D > > RTE_CRYPTO_OP_STATUS_INVALID_ARGS; > > + qp->stats.dequeue_err_count++; > > + break; > > + } > > + > > + handle_completed_chacha20_poly1305_crypto_op(qp, > > ops[i], sess); > > + } > > + > > + qp->stats.dequeued_count +=3D i; > > + > > + return i; > > +} > > + > > +struct rte_cryptodev_ops chacha20_poly1305_pmd_ops =3D { > > + .dev_configure =3D ipsec_mb_pmd_config, > > + .dev_start =3D ipsec_mb_pmd_start, > > + .dev_stop =3D ipsec_mb_pmd_stop, > > + .dev_close =3D ipsec_mb_pmd_close, > > + > > + .stats_get =3D ipsec_mb_pmd_stats_get, > > + .stats_reset =3D ipsec_mb_pmd_stats_reset, > > + > > + .dev_infos_get =3D ipsec_mb_pmd_info_get, > > + > > + .queue_pair_setup =3D ipsec_mb_pmd_qp_setup, > > + .queue_pair_release =3D ipsec_mb_pmd_qp_release, > > + > > + .sym_session_get_size =3D ipsec_mb_pmd_sym_session_get_size, > > + .sym_session_configure =3D ipsec_mb_pmd_sym_session_configure, > > + .sym_session_clear =3D ipsec_mb_pmd_sym_session_clear }; > > + > > +struct rte_cryptodev_ops *rte_chacha20_poly1305_pmd_ops =3D > > + > > &chacha20_poly1305_pmd_ops; > > + > > +static int > > +cryptodev_chacha20_poly1305_probe(struct rte_vdev_device *vdev) { > > + return cryptodev_ipsec_mb_create(vdev, > > + IPSEC_MB_PMD_TYPE_CHACHA20_POLY1305); > > +} > > + > > +static struct rte_vdev_driver cryptodev_chacha20_poly1305_pmd_drv =3D = { > > + .probe =3D cryptodev_chacha20_poly1305_probe, > > + .remove =3D cryptodev_ipsec_mb_remove > > +}; > > + > > +static struct cryptodev_driver chacha20_poly1305_crypto_drv; > > + > > > +RTE_PMD_REGISTER_VDEV(CRYPTODEV_NAME_CHACHA20_POLY1305_P > M > > D, > > + > > cryptodev_chacha20_poly1305_pmd_drv); > > > +RTE_PMD_REGISTER_ALIAS(CRYPTODEV_NAME_CHACHA20_POLY1305_P > M > > D, > > + > > cryptodev_chacha20_poly1305_pmd); > > > +RTE_PMD_REGISTER_PARAM_STRING(CRYPTODEV_NAME_CHACHA20_PO > L > > Y1305_PMD, > > + "max_nb_queue_pairs=3D socket_id=3D"); > > +RTE_PMD_REGISTER_CRYPTO_DRIVER(chacha20_poly1305_crypto_drv, > > + > > cryptodev_chacha20_poly1305_pmd_drv.driver, > > + pmd_driver_id_chacha20_poly1305); > > + > > +/* Constructor function to register chacha20_poly1305 PMD */ > > +RTE_INIT(ipsec_mb_register_chacha20_poly1305) > > +{ > > + struct ipsec_mb_pmd_data *chacha_poly_data > > + =3D > > &ipsec_mb_pmds[IPSEC_MB_PMD_TYPE_CHACHA20_POLY1305]; > > + > > + chacha_poly_data->caps =3D chacha20_poly1305_capabilities; > > + chacha_poly_data->dequeue_burst =3D > > chacha20_poly1305_pmd_dequeue_burst; > > + chacha_poly_data->feature_flags =3D > > + RTE_CRYPTODEV_FF_SYMMETRIC_CRYPTO | > > + RTE_CRYPTODEV_FF_SYM_OPERATION_CHAINING | > > + RTE_CRYPTODEV_FF_IN_PLACE_SGL | > > + RTE_CRYPTODEV_FF_OOP_SGL_IN_LB_OUT | > > + RTE_CRYPTODEV_FF_OOP_LB_IN_LB_OUT | > > + RTE_CRYPTODEV_FF_SYM_CPU_CRYPTO | > > + RTE_CRYPTODEV_FF_SYM_SESSIONLESS; > > + chacha_poly_data->internals_priv_size =3D 0; > > + chacha_poly_data->ops =3D &chacha20_poly1305_pmd_ops; > > + chacha_poly_data->qp_priv_size =3D > > + sizeof(struct chacha20_poly1305_qp_data); > > + chacha_poly_data->session_configure =3D > > + chacha20_poly1305_session_configure; > > + chacha_poly_data->session_priv_size =3D > > + sizeof(struct chacha20_poly1305_session); } > > diff --git a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h > > b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h > > index b6a98a85ba..db36584f3a 100644 > > --- a/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h > > +++ b/drivers/crypto/ipsec_mb/rte_ipsec_mb_pmd_private.h > > @@ -49,6 +49,9 @@ extern RTE_DEFINE_PER_LCORE(IMB_MGR *, > mb_mgr); > > #define CRYPTODEV_NAME_ZUC_PMD crypto_zuc /**< IPSEC Multi > buffer PMD > > zuc device name */ > > > > +#define CRYPTODEV_NAME_CHACHA20_POLY1305_PMD > > crypto_chacha20_poly1305 > > +/**< IPSEC Multi buffer PMD chacha20_poly1305 device name */ > > + > > /** PMD LOGTYPE DRIVER, common to all PMDs */ extern int > > ipsec_mb_logtype_driver; > > #define IPSEC_MB_LOG(level, fmt, ...) = \ > > @@ -62,6 +65,7 @@ enum ipsec_mb_pmd_types { > > IPSEC_MB_PMD_TYPE_KASUMI, > > IPSEC_MB_PMD_TYPE_SNOW3G, > > IPSEC_MB_PMD_TYPE_ZUC, > > + IPSEC_MB_PMD_TYPE_CHACHA20_POLY1305, > > IPSEC_MB_N_PMD_TYPES > > }; > > > > @@ -85,6 +89,7 @@ extern uint8_t pmd_driver_id_aesni_gcm; extern > > uint8_t pmd_driver_id_kasumi; extern uint8_t pmd_driver_id_snow3g; > > extern uint8_t pmd_driver_id_zuc; > > +extern uint8_t pmd_driver_id_chacha20_poly1305; > > > > /** Helper function. Gets driver ID based on PMD type */ static > > __rte_always_inline uint8_t @@ -101,6 +106,8 @@ > > ipsec_mb_get_driver_id(enum ipsec_mb_pmd_types > > pmd_type) > > return pmd_driver_id_snow3g; > > case IPSEC_MB_PMD_TYPE_ZUC: > > return pmd_driver_id_zuc; > > + case IPSEC_MB_PMD_TYPE_CHACHA20_POLY1305: > > + return pmd_driver_id_chacha20_poly1305; > > default: > > break; > > } > > -- > > 2.25.1