From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289217; cv=none; d=zohomail.com; s=zohoarc; b=gJRTIc3Pyu/P7myaz0Pt3T6AFWwkCs+eiutZPHlXv5eryJZtPP/uM7ujW3ffXqPecqWkgGldmaxKyZK2+7c1aAl7nuXq3Q0+T9/YsAKs4T/NcTcn/D1E/DezubUtrU8nryX4B5VQd9kXp2ch+MyQQfZOaQNJzJyd9E3pF4jNoSM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289217; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=A5uJbNu7KhMXozinpokK4dHKz2PI9j6DphdzziNCjIw=; b=bAypnwKf+TLJOZZF5WprZ8n/3UwEmwij6FhI3DudVlAhruLckSmUuWKN0JvwIhMkytkzxQJgwyiCRFspXCxX+xg2t9lWkAmTsMMihagluu67/r8mP1Vo0pUedcHQFCJCnyTbxPe3IRQKFoMamzj03rtQFDgzsinucBp+aVRmMMA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289217118390.41648135194043; Wed, 12 Aug 2020 20:26:57 -0700 (PDT) Received: from localhost ([::1]:47998 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63tH-0006JC-Rk for importer@patchew.org; Wed, 12 Aug 2020 23:26:55 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58462) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63s8-0004jL-Tg for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:44 -0400 Received: from mail-pj1-x1041.google.com ([2607:f8b0:4864:20::1041]:38613) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63s7-0008UC-BS for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:44 -0400 Received: by mail-pj1-x1041.google.com with SMTP id ep8so2101180pjb.3 for ; Wed, 12 Aug 2020 20:25:42 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A5uJbNu7KhMXozinpokK4dHKz2PI9j6DphdzziNCjIw=; b=CVXlmHiUSZ1o1UuKBH6qTEGG55bIak/MLaxqN37o8tl6g8s+ko0r0O7tUjD6K3bg17 yQ+DD57GuaG9ZeZguoQlU+omlTAColokyF1nxH+fpWg2/99AcoqkNdJfuYtqqgok8k/k MgclWTev6z01uRLRtQjn//ZE9CM7WMqPNMcLd4/9CJbPI14pQxUiqiLxhA3xr3gdYiSz fXWas2osKONBpp8rLmJL+zLmTGG+BXnLewYLLBjju1g0aVZTF1WRj07HfnMlW4V0AR09 wya7FUE+pv3nBRJLW1wQdwhaoPGYuIxcw4WQdwlE8e9yt+z6+eoWb+WWntKyJ0RrmjXt cfvw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=A5uJbNu7KhMXozinpokK4dHKz2PI9j6DphdzziNCjIw=; b=JjwnQSjpDPrmb8eqwVWLEkzaz3FnZe+mYoXIXRqbtQMtPcUoJorAlvv3ausxtQfvFT U5dHj8Acv9NIQWETLaYTI5A2z981OyqmLHxN/tzJregEjHGsYY2thzNQmgrPrLeoCQqA OybAiL+0962BtM8/rwDyv5IgWqXRCOxS28gxrZFcMffDwq25h3DNzWsEh4lG1r1+XBVO F24xbyP3TdjACyLqlhD6eP0+QmIUONCoQsi29HlubcQ6FfGV+tuz/CvzF2cKCQl8Ps3P MdYEllpCeioSlccHbJV+sH5jWwJLbNurwCGiXkMHXlXXKNvdyHForRdcaNZEy3cqi94b PGqw== X-Gm-Message-State: AOAM532fQd4fRAlhho/8g3ry/7ClT9S+Up71QGMmyGgTeaa+L1oloGYv 8K/DOePsu54H8sfgRaIn0MZT8IzSPwA= X-Google-Smtp-Source: ABdhPJxxsr0gY4eFpdWGMy51BGEzGM+mHfij1tnnvRcU7aQuDyDnju0OMq7CYjEmFAF63fWT8//Ipw== X-Received: by 2002:a17:902:82c2:: with SMTP id u2mr2176851plz.239.1597289141727; Wed, 12 Aug 2020 20:25:41 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 01/17] crypto: Move QCryptoCipher typedef to qemu/typedefs.h Date: Wed, 12 Aug 2020 20:25:21 -0700 Message-Id: <20200813032537.2888593-2-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1041; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1041.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" This allows header files to declare pointers without pulling in the entire crypto subsystem. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- include/crypto/cipher.h | 2 -- include/qemu/typedefs.h | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/include/crypto/cipher.h b/include/crypto/cipher.h index 5928e5ecc7..95a0412911 100644 --- a/include/crypto/cipher.h +++ b/include/crypto/cipher.h @@ -23,8 +23,6 @@ =20 #include "qapi/qapi-types-crypto.h" =20 -typedef struct QCryptoCipher QCryptoCipher; - /* See also "QCryptoCipherAlgorithm" and "QCryptoCipherMode" * enums defined in qapi/crypto.json */ =20 diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index 427027a970..45b9c57717 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -95,6 +95,7 @@ typedef struct PostcopyDiscardState PostcopyDiscardState; typedef struct Property Property; typedef struct PropertyInfo PropertyInfo; typedef struct QBool QBool; +typedef struct QCryptoCipher QCryptoCipher; typedef struct QDict QDict; typedef struct QEMUBH QEMUBH; typedef struct QemuConsole QemuConsole; --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289309; cv=none; d=zohomail.com; s=zohoarc; b=WG9AakDnDevAf4e3TPNo3UDvapo+ANJda2PL6qdcntW0EGBit90RMUJcpam9xYm6YnvlR16bteGw1v6anI35JV61ffIrRK/djPPa4MO5fEEuvtapsDIfd0Sggl+mBPcSgcgLxwvFE4YH0sGsHpaMC5XZn2kHZDf9qScEqh+BdZU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289309; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=x/8I1E6U1kT8gsX6JaE/+oNAkXGuibBh0+8jWx18CRY=; b=BdMFs/WGuyifsRv+v7XFt/ACZCXygKVEcod9YA8hSDyzJayrQQOXgSov1qJFPG1z4Avi4wT5aKaoaq0d74/soXs/Re65Nn+R8VB1/Hm7Q66J7zTOUNSXjhxMjVb0EzFOBNz/ZiQt/g74qx4RuerZdncRUSaKw/F7lYDfyT6ft2s= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289309080310.79589430357703; Wed, 12 Aug 2020 20:28:29 -0700 (PDT) Received: from localhost ([::1]:55428 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63ul-0000wR-Rk for importer@patchew.org; Wed, 12 Aug 2020 23:28:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58480) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sA-0004kH-Cb for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:46 -0400 Received: from mail-pj1-x102c.google.com ([2607:f8b0:4864:20::102c]:36871) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63s8-0008UW-Om for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:46 -0400 Received: by mail-pj1-x102c.google.com with SMTP id mw10so2104922pjb.2 for ; Wed, 12 Aug 2020 20:25:44 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=x/8I1E6U1kT8gsX6JaE/+oNAkXGuibBh0+8jWx18CRY=; b=D9BdHJWixCVHf/isjihr1og6IfZHmeqhejt0K5X+Mh3g6hREn6UhOqzv1kq0ZuNcqr Nr54XRx67l2GmQZIGU3V4iyh7OdTBUs4eL0zqj8CBAvEAho+6am8hghc15tblRvyJKij kRYSDKgvY2nKHqOeQGvJMcEFc7i4shNN/VxqZWsmGJvl9UxAy8BiJa7K+JQV8xvep7EY bP485WE8Y3B9gnBsrHjXT9uDtQLB+qP/oJP9TRRogc9X/ct1nL97d5ipwH6lP79C/KIq pbkKW0pi/ca6BIsPpT6zdkcvZvnSONERFdw/ST7z9YM0LVXR/7CM72fzfk4tW4vxwRQX mwnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=x/8I1E6U1kT8gsX6JaE/+oNAkXGuibBh0+8jWx18CRY=; b=R9HsjLOk14PXf3HHOi2PF6j5Kk+NgzSwzn5eGhpko4No0KpaZ4cOfcv66AevELaE5W RmzPwxO1pHgSvUN7xv7RU2IB66O7N53cpcOwyc/NsZ5A0ZH84GyNBxGmPRyK78Wm+9Dl 13pumNOb2lA01DXBjJ/AtOBbmk+YPX9tnviiZydw/FSJ6YpDLe609KR+dxMZEeQREqmG b/tcTCCTD88cUgjpPu3GRLhNI+tyEkKpKxAVWzXoJPGpN2ImQbPHch4Qdh0Bnd/DQrkE DPS7C/EuHq0yfW7uTUwfvnLerxB93WoD9XA/s55BQU+BToJ71yTVv9rbGCrbBL4yPxzU gUZA== X-Gm-Message-State: AOAM531sJNJ/gws8wr0zFIHjVsOl1htNoaqbWvRP30id9iCzjJJZhcbS IsWRF9JKABajBDOj/xPrEumZPv6UB80= X-Google-Smtp-Source: ABdhPJy2XAADVcCnopGFkbaf6oHY6RDVMfD6hcM7CjnKYImAswC917lVlL1jrQkTv9c5s28UMnOwpg== X-Received: by 2002:a17:902:40a:: with SMTP id 10mr2211995ple.180.1597289142930; Wed, 12 Aug 2020 20:25:42 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 02/17] crypto: Move QCryptoCipherDriver typedef to qemu/typedefs.h Date: Wed, 12 Aug 2020 20:25:22 -0700 Message-Id: <20200813032537.2888593-3-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102c; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102c.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" This will allow the pointer to be used in crypto/cipher.h, and not just in code using cipherpriv.h. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipherpriv.h | 2 -- include/qemu/typedefs.h | 1 + 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/crypto/cipherpriv.h b/crypto/cipherpriv.h index 0823239f41..9228c9fc3a 100644 --- a/crypto/cipherpriv.h +++ b/crypto/cipherpriv.h @@ -17,8 +17,6 @@ =20 #include "qapi/qapi-types-crypto.h" =20 -typedef struct QCryptoCipherDriver QCryptoCipherDriver; - struct QCryptoCipherDriver { int (*cipher_encrypt)(QCryptoCipher *cipher, const void *in, diff --git a/include/qemu/typedefs.h b/include/qemu/typedefs.h index 45b9c57717..d4ca469b6b 100644 --- a/include/qemu/typedefs.h +++ b/include/qemu/typedefs.h @@ -96,6 +96,7 @@ typedef struct Property Property; typedef struct PropertyInfo PropertyInfo; typedef struct QBool QBool; typedef struct QCryptoCipher QCryptoCipher; +typedef struct QCryptoCipherDriver QCryptoCipherDriver; typedef struct QDict QDict; typedef struct QEMUBH QEMUBH; typedef struct QemuConsole QemuConsole; --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289221; cv=none; d=zohomail.com; s=zohoarc; b=nfOhIUTIUOOQtBInlw3edFJZoPi3Sua/5NsljAfQFZ8W4lDL7Tdnh1CP5eLwzbwZxQnxTbIgV9EzyUYEmdBUhYJ+qAIvKMhCPQAeB/7Ckqm0Ay+XW+gZGAkXcPm9XwAu51uDgIeddB9oDCIhQWsCFiRZxxX5IOCEWqeHwP8W8f0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289221; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ttKbooO9380v1ETeZhXOVKlGzyg1tlctRYSN45UvQQc=; b=ZzjpMaFKA4y5l8km666sMupDfE/O/LKmWx6wpRSz5uddMT+mevbnSjJsMrfaOCAF3RgikXPs0grW1fdR4r5IgalDXsbfJtxJ/plvJvJy4bAPjw3T21TRgjsywp5TigCnzyJjVlm3A0MuMqHPxiT2qWTfQULPfUHXHB66lLL3ZbA= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289221154357.4505065840659; Wed, 12 Aug 2020 20:27:01 -0700 (PDT) Received: from localhost ([::1]:48374 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63tL-0006SJ-Rq for importer@patchew.org; Wed, 12 Aug 2020 23:26:59 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58500) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sB-0004mb-PJ for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:47 -0400 Received: from mail-pg1-x541.google.com ([2607:f8b0:4864:20::541]:45317) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63s9-0008VL-Vu for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:47 -0400 Received: by mail-pg1-x541.google.com with SMTP id x6so2105265pgx.12 for ; Wed, 12 Aug 2020 20:25:45 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ttKbooO9380v1ETeZhXOVKlGzyg1tlctRYSN45UvQQc=; b=T/pDw9F8LncEoJRmsfGCHCOzbgZZV3UpSXJ6fnzGtindqTSaJLcFU5rbOAG719HsMA m0caPuMbRhijy4z6n9O6ThAc5riE5Ga+Ww/wLOmCpXU4qXRWOHeJ0aurpgIERzLhOsUN gD8YRMwYO8TU3C/62gP+tTHeuq1WX5UQzN4QM1bdM7ugUu9wiS7sGyNu9MatAX0H6dIk y7SqmgweR1847aVYcZtQX+7fowPd+ztS5ENfMboHdTa2RH3WRW146/a6CkSYCg0XnTUM 4JHcaMIV2+DiV9QnZHRigqxiGT8/pIx+LcsS5e2OVr4U/gWc4jytAdrSEDATq6URV1vf 2cZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ttKbooO9380v1ETeZhXOVKlGzyg1tlctRYSN45UvQQc=; b=CgVuAVZe2ZM52VnBuU/D0UF0dnXUDgDighePejyz95snYI7CT1F3iUIP58jF1Nlj8r +duT5UWC0N10acZaLc6I/Y0IT8hM2oApMyRjYGMQOVG1t1bIP80Uw0S+8qbzAECWJ9Fn A1KHPELGcbe62xQTqt92BVVr+Rqx1CWSrk8IyCoTbdapexfLyWgLJXK3GvyO3ID7zE7V H2c3OhWsJDX5a5fgA6kkGbBnbVNrkmg8ejkpksfSmq7nwKr1vohx0IbczzYsiL+V4OEt NqdRmpW7ZHV5F9MWBa3mqXeuhealC1fxCMZbmR+qUkm0B7zjFKSOYRELU93GEQBQB/Zo ngiA== X-Gm-Message-State: AOAM5328/mvtag/yNxeOneZlzdCq4tjQhNDsnOmtYol9nLQNqkxZi6JF yCZPfLw6zp3cqwuXDW4kZ7yehJfcmOg= X-Google-Smtp-Source: ABdhPJw0SXsy2xlFdaqrRbuZvy8A8povRyCr4vjRCHlSZU53yN8ZFuQyyAXuPto+7rtmf7qNW+y2dg== X-Received: by 2002:a65:6384:: with SMTP id h4mr1971691pgv.196.1597289144143; Wed, 12 Aug 2020 20:25:44 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 03/17] crypto: Assume blocksize is a power of 2 Date: Wed, 12 Aug 2020 20:25:23 -0700 Message-Id: <20200813032537.2888593-4-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::541; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x541.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" The check in the encode/decode path using full division has a noticeable amount of overhead. By asserting the blocksize is a power of 2, we can reduce this check to a mask. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-builtin.c | 4 ++-- crypto/cipher-gcrypt.c | 5 +++-- crypto/cipher-nettle.c | 5 +++-- crypto/cipher.c | 1 + 4 files changed, 9 insertions(+), 6 deletions(-) diff --git a/crypto/cipher-builtin.c b/crypto/cipher-builtin.c index 35cf7820d9..6eafd39da0 100644 --- a/crypto/cipher-builtin.c +++ b/crypto/cipher-builtin.c @@ -484,7 +484,7 @@ qcrypto_builtin_cipher_encrypt(QCryptoCipher *cipher, { QCryptoCipherBuiltin *ctxt =3D cipher->opaque; =20 - if (len % ctxt->blocksize) { + if (len & (ctxt->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", len, ctxt->blocksize); return -1; @@ -503,7 +503,7 @@ qcrypto_builtin_cipher_decrypt(QCryptoCipher *cipher, { QCryptoCipherBuiltin *ctxt =3D cipher->opaque; =20 - if (len % ctxt->blocksize) { + if (len & (ctxt->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", len, ctxt->blocksize); return -1; diff --git a/crypto/cipher-gcrypt.c b/crypto/cipher-gcrypt.c index 2864099527..81e4745bff 100644 --- a/crypto/cipher-gcrypt.c +++ b/crypto/cipher-gcrypt.c @@ -245,6 +245,7 @@ static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QCry= ptoCipherAlgorithm alg, g_assert_not_reached(); } } + g_assert(is_power_of_2(ctx->blocksize)); =20 #ifdef CONFIG_QEMU_PRIVATE_XTS if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { @@ -305,7 +306,7 @@ qcrypto_gcrypt_cipher_encrypt(QCryptoCipher *cipher, QCryptoCipherGcrypt *ctx =3D cipher->opaque; gcry_error_t err; =20 - if (len % ctx->blocksize) { + if (len & (ctx->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", len, ctx->blocksize); return -1; @@ -344,7 +345,7 @@ qcrypto_gcrypt_cipher_decrypt(QCryptoCipher *cipher, QCryptoCipherGcrypt *ctx =3D cipher->opaque; gcry_error_t err; =20 - if (len % ctx->blocksize) { + if (len & (ctx->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", len, ctx->blocksize); return -1; diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.c index 7e9a4cc199..0677fdfd33 100644 --- a/crypto/cipher-nettle.c +++ b/crypto/cipher-nettle.c @@ -576,6 +576,7 @@ static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QCry= ptoCipherAlgorithm alg, QCryptoCipherAlgorithm_str(alg)); goto error; } + g_assert(is_power_of_2(ctx->blocksize)); =20 if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS && ctx->blocksize !=3D XTS_BLOCK_SIZE) { @@ -613,7 +614,7 @@ qcrypto_nettle_cipher_encrypt(QCryptoCipher *cipher, { QCryptoCipherNettle *ctx =3D cipher->opaque; =20 - if (len % ctx->blocksize) { + if (len & (ctx->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", len, ctx->blocksize); return -1; @@ -666,7 +667,7 @@ qcrypto_nettle_cipher_decrypt(QCryptoCipher *cipher, { QCryptoCipherNettle *ctx =3D cipher->opaque; =20 - if (len % ctx->blocksize) { + if (len & (ctx->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", len, ctx->blocksize); return -1; diff --git a/crypto/cipher.c b/crypto/cipher.c index e5adb56271..2722dc7d87 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -19,6 +19,7 @@ */ =20 #include "qemu/osdep.h" +#include "qemu/host-utils.h" #include "qapi/error.h" #include "crypto/cipher.h" #include "cipherpriv.h" --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289428; cv=none; d=zohomail.com; s=zohoarc; b=ndVhUr/krUmOTtPnPb+86X6fYiVmoYE5sPQ6mUXp4WIO7PDd23QkzYtvfNVCwzFRmF8Ux+5CxQRcBwUnm1bafQmIYB0P+BlzRc5VpRN1/coD3TkyR5Siq3xY9P9CW0rCIl9yJJGI25hM4+r0IJoh7lgSXuVR+HeJFBGVabHEwkc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289428; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=P2SPKTHOjMFQdCqB2vtTra0ygHn5FhW2ETtwYwPvoTs=; b=DXTtPae49l7ZNlardYSJPI5XegAXUiXbtbesbFn9uGOTsLwgM+tqpSrbdyeLk1Y6KY4Qq16o6vMTA8+nfF77yHk3xGf83o0Eb/2gzwodZlkZOwWuqe+h0oLpbzA4aQmlLPg0TH9JfQdIr0P+xYaNML61dKhPTTZlIZHKR89hy0M= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289428360653.888353608364; Wed, 12 Aug 2020 20:30:28 -0700 (PDT) Received: from localhost ([::1]:33530 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63wh-0003U5-5F for importer@patchew.org; Wed, 12 Aug 2020 23:30:27 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58508) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sC-0004nu-Lh for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:48 -0400 Received: from mail-pj1-x102a.google.com ([2607:f8b0:4864:20::102a]:55952) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sA-0008Vy-Vz for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:48 -0400 Received: by mail-pj1-x102a.google.com with SMTP id 2so2105330pjx.5 for ; Wed, 12 Aug 2020 20:25:46 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=P2SPKTHOjMFQdCqB2vtTra0ygHn5FhW2ETtwYwPvoTs=; b=fQZaLeAn4s323lW+P0S9LxRYeHFUfLXgtPg3qlHyHBQhbY5uC8TJSb3/cuFzgrMV3X BkV2FpdQtfcPW5+5v8SavMtFIbQ4ViQ7OobgNV3xf9LXXG6tvdxf3p+18MS76C87yOxh nDA23txSM0XaZJivpkQAk1WJ7+tI0siNJLLJIpXianuDTvFB8JVhVxH39YE+uNJQEuqW ukoH+DEG01eZyqN+1PuAzOZLl/WVBEsVfkuaiSRo2RPcxfTDnQCT/jk9jDynD9/KWOwU N9mBHSZekRjCChHTcgJ/jQZy8UjpjpEUY9Gk5mDdZc1fya5AtJUnYi1lrL7Xquyzvgna 7jMw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=P2SPKTHOjMFQdCqB2vtTra0ygHn5FhW2ETtwYwPvoTs=; b=aO8sFfDIFuo2pmDpZgFleK4qSusPCPetSkfYh6fNXj34cqTmutnsNquWLA4VS1HSZB /aAIDTpcE+P86Ny+n8x64GlgAYFve5+fC7l1B6bN8bXHdcNM5axiy37TjhbDRpjHCZuX A4nKWBS6vK7Z1TQNBe7cNScWdEDsO1r4nxPXQGUFBc7IbT6OiEH3s6R4ghZttiObT6ys sI9+hQ8vbDBV7xWDn20Wcws+0nD0vqC/YU1SxMtKXwQoDrcupX3Ocim5AYwrz+i32XWu gk9IYlLL82xQ8j3SIO128Uf2CWpH6WknwMr3/PiqAIAw8yow3zr1HevvpJ9PsSaNN4ZD cYvw== X-Gm-Message-State: AOAM532kuKEiBssLhzRwo/MFNSrsYTVPGO0yh3OHBfJVO094ki6QRp5u SNow8EcQOfLxi5KPFTj2vNClI7M7tJw= X-Google-Smtp-Source: ABdhPJysmZ59JehnO4QDXa+EvZVpCELkWLPapgrKfrzdRO1yI4ufOZ0kLp1jdLKYwgXJe6Bh5uj0Ug== X-Received: by 2002:a17:90a:6807:: with SMTP id p7mr3090799pjj.42.1597289145330; Wed, 12 Aug 2020 20:25:45 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 04/17] crypto: Rename cipher include files to .inc.c Date: Wed, 12 Aug 2020 20:25:24 -0700 Message-Id: <20200813032537.2888593-5-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102a; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102a.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" QEMU standard procedure for included c files is to use *.inc.c. E.g. there are a different set of checks that are applied. Signed-off-by: Richard Henderson Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/{cipher-builtin.c =3D> cipher-builtin.inc.c} | 0 crypto/{cipher-gcrypt.c =3D> cipher-gcrypt.inc.c} | 0 crypto/{cipher-nettle.c =3D> cipher-nettle.inc.c} | 0 crypto/cipher.c | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) rename crypto/{cipher-builtin.c =3D> cipher-builtin.inc.c} (100%) rename crypto/{cipher-gcrypt.c =3D> cipher-gcrypt.inc.c} (100%) rename crypto/{cipher-nettle.c =3D> cipher-nettle.inc.c} (100%) diff --git a/crypto/cipher-builtin.c b/crypto/cipher-builtin.inc.c similarity index 100% rename from crypto/cipher-builtin.c rename to crypto/cipher-builtin.inc.c diff --git a/crypto/cipher-gcrypt.c b/crypto/cipher-gcrypt.inc.c similarity index 100% rename from crypto/cipher-gcrypt.c rename to crypto/cipher-gcrypt.inc.c diff --git a/crypto/cipher-nettle.c b/crypto/cipher-nettle.inc.c similarity index 100% rename from crypto/cipher-nettle.c rename to crypto/cipher-nettle.inc.c diff --git a/crypto/cipher.c b/crypto/cipher.c index 2722dc7d87..deae82c264 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -151,11 +151,11 @@ qcrypto_cipher_munge_des_rfb_key(const uint8_t *key, #endif /* CONFIG_GCRYPT || CONFIG_NETTLE */ =20 #ifdef CONFIG_GCRYPT -#include "cipher-gcrypt.c" +#include "cipher-gcrypt.inc.c" #elif defined CONFIG_NETTLE -#include "cipher-nettle.c" +#include "cipher-nettle.inc.c" #else -#include "cipher-builtin.c" +#include "cipher-builtin.inc.c" #endif =20 QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorithm alg, --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289534; cv=none; d=zohomail.com; s=zohoarc; b=RHeotzJqgr8zh8PMfeckyJZtsVPwFwoZs98DrOjKQ/1gBw0z5ZIHmxVw/fyA2q/w9rNo1upyZMCtdxGBi1mbITUgaeOLt/Zij0zB44rBZ79K62oSA+IUhJ2fPIo8UXiKc7otLcoS5dbuPqELji2R23wRQx1Tc+6KssD5paI5/sk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289534; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=+PHy/gloogLnc28zgcQGUBXNqWvFE+M2jDPSBgeFXVw=; b=Y9uoYe93fFuFn3JihdiICzzx+0jEWWNGlBDJCsXMkIMye83Ib3M//aPBBUyt4gSrW9SzHMCAxsO79nDalWyzGUJppfsiriQwFjcV/J75OSmpowuIPkB8Iumokbi6ls1Np5uM0FVSYH6aHEC6P1k/bSE165I0u0sqfb2AnkVP5vk= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289534726206.41544999475877; Wed, 12 Aug 2020 20:32:14 -0700 (PDT) Received: from localhost ([::1]:39922 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63yO-00069u-TD for importer@patchew.org; Wed, 12 Aug 2020 23:32:12 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58518) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sD-0004qR-VW for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:49 -0400 Received: from mail-pj1-x1042.google.com ([2607:f8b0:4864:20::1042]:54847) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sC-0008WP-Ax for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:49 -0400 Received: by mail-pj1-x1042.google.com with SMTP id mt12so2106369pjb.4 for ; Wed, 12 Aug 2020 20:25:47 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+PHy/gloogLnc28zgcQGUBXNqWvFE+M2jDPSBgeFXVw=; b=Cg4ac55VOl6kLG6fic3H9HB5l4VzY9rGl54+Rl1RorwJzACXlKGm4NP3KvN2dDNh4A 9rQvKJCrJB5hrE027HCLq5249+uPxEzAfTymhyb8AYEomVCEvY/BLL3vcf67IL6Rtsil zaK/pD50x2ZfJT8kH/ku8F0B1gNXPvbe8jEjDsua4YifndQcMFR4F/UHJCXBQM4Y04nZ 0i/QX0D1IlUuQCJgrHkgSTbOWe/PVAsqNg6wy8mNcSxWTc3cKiR1Ptr+sEJvDqcj58dU BUYnOyo9D23zCHXKMFkHedlQ6S/KTnUrlqWA0P/AEELtbU7BkGL8J735eFWPvzp/AhCW ODnA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=+PHy/gloogLnc28zgcQGUBXNqWvFE+M2jDPSBgeFXVw=; b=IMNdVmtlSv0SzyEXk1cmacmelUAbX8Eiqttr/qlVfX3TqwJf+spMIyYBhkdzUmehDD TU4GR8se/u3Rc6+YK8s5tP3ojPyS//aJL+UobrPY6CboDoW4NlYJmFAxN6UZs4hOjcg3 Gl7PMXzc4YgoK2BFuY8PYT84j1iBgkT+yBUk6MS9kefJGaw1oafpTyk4cKF1Le6dwYUP UGpuxSAz6M1elRpkQIpQb2PWOxbyH/84yPXouDqmfugf0zsVYtPsE0qczIQliKapTIOQ k8gALNzwIUet7K83vfCtDjhQTOZfLeU02zPdldxpf1dckvWu8rYuPb009UhGTKACpR1L K19A== X-Gm-Message-State: AOAM531HzZ6GMIP8Q8AwvV5ib3VSVZwm4lkJxKAF6fwqF6WnEMaOYu6C rFIOfgSIyZWkt2eU5T/FEHoGp9GAaTE= X-Google-Smtp-Source: ABdhPJw13HoxQojF8PJZQtsKUyFgoQFGVl3tzVPZg+Ga389XkLxmdLZon63PqU7BZRPDqNidpvOYAg== X-Received: by 2002:a17:90a:e687:: with SMTP id s7mr3075521pjy.48.1597289146628; Wed, 12 Aug 2020 20:25:46 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 05/17] crypto: Remove redundant includes Date: Wed, 12 Aug 2020 20:25:25 -0700 Message-Id: <20200813032537.2888593-6-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1042; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1042.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Both qemu/osdep.h and cipherpriv.h have already been included by the parent cipher.c. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-builtin.inc.c | 2 -- crypto/cipher-gcrypt.inc.c | 2 -- crypto/cipher-nettle.inc.c | 2 -- 3 files changed, 6 deletions(-) diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 6eafd39da0..56d45b0227 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -18,11 +18,9 @@ * */ =20 -#include "qemu/osdep.h" #include "crypto/aes.h" #include "crypto/desrfb.h" #include "crypto/xts.h" -#include "cipherpriv.h" =20 typedef struct QCryptoCipherBuiltinAESContext QCryptoCipherBuiltinAESConte= xt; struct QCryptoCipherBuiltinAESContext { diff --git a/crypto/cipher-gcrypt.inc.c b/crypto/cipher-gcrypt.inc.c index 81e4745bff..a62839914b 100644 --- a/crypto/cipher-gcrypt.inc.c +++ b/crypto/cipher-gcrypt.inc.c @@ -18,11 +18,9 @@ * */ =20 -#include "qemu/osdep.h" #ifdef CONFIG_QEMU_PRIVATE_XTS #include "crypto/xts.h" #endif -#include "cipherpriv.h" =20 #include =20 diff --git a/crypto/cipher-nettle.inc.c b/crypto/cipher-nettle.inc.c index 0677fdfd33..256931a823 100644 --- a/crypto/cipher-nettle.inc.c +++ b/crypto/cipher-nettle.inc.c @@ -18,11 +18,9 @@ * */ =20 -#include "qemu/osdep.h" #ifdef CONFIG_QEMU_PRIVATE_XTS #include "crypto/xts.h" #endif -#include "cipherpriv.h" =20 #include #include --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289605; cv=none; d=zohomail.com; s=zohoarc; b=JKd+MAN74Q4jLiFqMNFi9gD9BU+81WqHCbAGK1pWgm9/RYqp0Ey457Sylz+GuPV80lc6hPg6ZHuSnlilDgy+m+jYQThZDYkVJ1sls96AKBw64RNW/Yu7AlPsEq5Elm/OUjkcCNC/NIkqpqX0n85KTewHYqmYS0f5shK+UMJlYpY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289605; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=ImTBoljSR0RaUjSJjrJWKxIahll20+RRkJQ8nrvuQtI=; b=P9REIesuoFuGwSnxKnApMpHPuo5V2myV7Fv9R7g3tTssajXSbdIHfSPKctDgTJx0qCfcV2MZOPuWIqeMniMGI0TiwnYgUWJaCiub5lBFqY9YSeMO+jdqCp9BA1sQSs1kPQnCloHPgWcuvBxDMs3I5jWRA2gcAdYjDjT6gsVuyoM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289605065555.5053912510596; Wed, 12 Aug 2020 20:33:25 -0700 (PDT) Received: from localhost ([::1]:44362 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63zV-0007wh-PN for importer@patchew.org; Wed, 12 Aug 2020 23:33:21 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58538) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sF-0004uM-Pg for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:51 -0400 Received: from mail-pl1-x642.google.com ([2607:f8b0:4864:20::642]:42111) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sE-00006C-4e for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:51 -0400 Received: by mail-pl1-x642.google.com with SMTP id f5so2005777plr.9 for ; Wed, 12 Aug 2020 20:25:49 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.47 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=ImTBoljSR0RaUjSJjrJWKxIahll20+RRkJQ8nrvuQtI=; b=VC9yvrh7WYWQ/2B/c9VNsrpO09UnQnqXEZH7UNV2tBZt/dWCND9105BX8OX5NZgxad fZE3FBIRocKFmtZZj42izi03vcSaF68xdglAvh/sjvTG6WbNXYXJvlJrzSBYWALBVXX6 1q+IiDOksvjLAOgLJm94SAaS6+7aUyYeX5OhR5t24tv9qmi/DNKiWBPwNBD67qBDCn9E kgEj6gboCa56rjV9Q4lpmU024NsCjzkPRHZ0C1SMBRIJR/z0X3RyN42Z8l1EmXAEGIbt HwOHcrDH6d/HU6ZfAJef9+SjYsmAAhMS3tO/IxNtjYfWFn7mbsukGD0KOPPFSluK5uH7 2OgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=ImTBoljSR0RaUjSJjrJWKxIahll20+RRkJQ8nrvuQtI=; b=Y8I/NKNAUBayBCjgqwaMGfKG1Ac9vZ8uyrCyFuga6s8Yvs749HrVbtAzUH8dRDFc5C jQ1WB1RzofZBsQErBR2G7E2N4EZ2xRxBWvJWSJvX0zv6se6Vu8IGoxwiDWwlz3JFWJ83 agqTcNdYYRPHqrDNekcHZwAwJk0VKE2MFAGXFuJRhkl6XwCJQzXc3sKlszsrU7THOGjD 8L31r4xEjM4smn4zYOwnOUggjAdXZy+THjA1fNJT1Tf//RUvgWUILg9M9NxWhP53/2oq b3+1uQiwm3SPiV78Xa/oL/Y6aHLYzjQ5tDkFoLgRJzTxL2GGj0EjCsXeQvdI0d8jpeCN dSow== X-Gm-Message-State: AOAM533I9+lajnDrzzR3plQ5E/5Z/xjcJJhOyuSXJa0oXmmAm1G2GyBG OQxVrtSujiob7lf1pkP9qqj71EsqhMc= X-Google-Smtp-Source: ABdhPJykdeo9DP4WlPgnDu4noFIG8lKhK1emC6N88E3ORIOa+KpDiSIiXE5+ajOYJwQVbn/Rv9HbLQ== X-Received: by 2002:a17:90a:e60d:: with SMTP id j13mr3139889pjy.216.1597289148196; Wed, 12 Aug 2020 20:25:48 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 06/17] crypto/nettle: Fix xts_encrypt arguments Date: Wed, 12 Aug 2020 20:25:26 -0700 Message-Id: <20200813032537.2888593-7-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::642; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x642.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" The fourth argument to xts_encrypt should be the decrypt callback; we were accidentally passing encrypt twice. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-nettle.inc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/crypto/cipher-nettle.inc.c b/crypto/cipher-nettle.inc.c index 256931a823..0404cfc6da 100644 --- a/crypto/cipher-nettle.inc.c +++ b/crypto/cipher-nettle.inc.c @@ -632,7 +632,7 @@ qcrypto_nettle_cipher_encrypt(QCryptoCipher *cipher, case QCRYPTO_CIPHER_MODE_XTS: #ifdef CONFIG_QEMU_PRIVATE_XTS xts_encrypt(ctx->ctx, ctx->ctx_tweak, - ctx->alg_encrypt_wrapper, ctx->alg_encrypt_wrapper, + ctx->alg_encrypt_wrapper, ctx->alg_decrypt_wrapper, ctx->iv, len, out, in); #else xts_encrypt_message(ctx->ctx, ctx->ctx_tweak, --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289706; cv=none; d=zohomail.com; s=zohoarc; b=luYk9F4e4/DJf2vobUNof/3XYZkFve02yM2T1sPexU6nIlzv3oqOmqqPtTUxxjU9nDpUoMktiyAa9ojJ62bbVBziL0ym03y7ouprzFUi8nQGzVzFwLnBa49nvxNTY+gHWsGFnatWUoTisgKHl7TXzkEXjowvzoi+ugOpOMXkhYM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289706; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=b5OUwYC1ijM0U3q76fWa5pbJW4qjaynWy6iI0RpDBZA=; b=ECYsN5PYuJPpYcD27AZSn0N0PtDeUz4IWlrAHrHc21bqpmXiQM5+EGSbdnFd+qTiugwbgF8vuzdctkPfMgOmWwMdZ4HCyA4rT+xi6PunIAtiKRF1vdjX+R1UGNpxLwcVLo9NJvzYFY+XNVrEBC6iTlHXbwpjOybLERIFcQP+3W8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289706905525.1098917450468; Wed, 12 Aug 2020 20:35:06 -0700 (PDT) Received: from localhost ([::1]:48598 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k641B-0001De-MW for importer@patchew.org; Wed, 12 Aug 2020 23:35:05 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58550) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sG-0004wk-UD for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:52 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:41904) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sF-00008K-1I for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:52 -0400 Received: by mail-pl1-x641.google.com with SMTP id f10so2006232plj.8 for ; Wed, 12 Aug 2020 20:25:50 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.48 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=b5OUwYC1ijM0U3q76fWa5pbJW4qjaynWy6iI0RpDBZA=; b=Z34Qg9RJYkEGdiY8XgVqi5Rc5YXJmKhvp33kAxFpafyAZJcer9i6qQqe5bkcdo1123 wmcEValt0eaYNOsBVIPqFDALa7qXq8tCmde4lsGeALatZ4PgBJy83EpjMuTqugHAzZs9 EyOE7fz5CzRPvpLAeADS/lnTqHYuQANFitytZxK2BCQMuQhy1UezCPrO6/zkXKEZkBiv 9VIsXEIlKKsgC4M6AaLZ2dbff7QgakTa0rPqoSSG94yh8nuzbLlrGGB8TJsPPP2HjngJ RovYJHOMWgweqgiTIABSk8EF7F+ufVXFLkkgNPSr9z+Xf1GpVlXE5aDfjD658YQh5JJR kfQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=b5OUwYC1ijM0U3q76fWa5pbJW4qjaynWy6iI0RpDBZA=; b=RJspRT5JKqytaFqqLHVq3PNMTxLANOFDl3R9/nrSIOu1Eksn3YC2RankJcArtf/+S4 7G6Sc2QlUpqHqUoZu6kTyCxWC6vzfOlhHq1sYS82GnCO09afc+56Bpb9/dNcgz6eflRS J5cAOTo2B0n7Chqi+tOfkaV6Y4jwS3EXgg3s0jmhpLchFTPneECSIlbRU+LniIdl52so p6RFLekBTJuO2br6nUmlMgecUuKyshl/a+7UDwoUoJ5ZDBuK8NScRiaVLhmCilW9a7/0 thDRtjTaXyHXMqKdjSh9NY4lBBLQwsuZcyootM2RR4v9OLDZ3ZmoM04sc5q3foDYhl/V eCGw== X-Gm-Message-State: AOAM531CYB/xZeNPi3Igl1Dt1azq2i3Um1vSvloUG8u02i2Oxm2wfmiL 3LKRjwQAlc35sNo1XPjOMTOfu9cc1SA= X-Google-Smtp-Source: ABdhPJzuHGa0z3arZXNJig3fOWPpx3+RTFygPAJRvnWCWHs5P7lR0LvNILzq8WPOmnL127nbPkyhXw== X-Received: by 2002:a17:90b:784:: with SMTP id l4mr2813640pjz.96.1597289149308; Wed, 12 Aug 2020 20:25:49 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 07/17] crypto: Use the correct const type for driver Date: Wed, 12 Aug 2020 20:25:27 -0700 Message-Id: <20200813032537.2888593-8-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::641; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x641.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" This allows the in memory structures to be read-only. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipherpriv.h | 2 +- include/crypto/cipher.h | 2 +- crypto/cipher-afalg.c | 2 +- crypto/cipher-builtin.inc.c | 2 +- crypto/cipher-gcrypt.inc.c | 2 +- crypto/cipher-nettle.inc.c | 2 +- crypto/cipher.c | 12 ++++++------ 7 files changed, 12 insertions(+), 12 deletions(-) diff --git a/crypto/cipherpriv.h b/crypto/cipherpriv.h index 9228c9fc3a..b73be33bd2 100644 --- a/crypto/cipherpriv.h +++ b/crypto/cipherpriv.h @@ -47,7 +47,7 @@ qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, const uint8_t *key, size_t nkey, Error **errp); =20 -extern struct QCryptoCipherDriver qcrypto_cipher_afalg_driver; +extern const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver; =20 #endif =20 diff --git a/include/crypto/cipher.h b/include/crypto/cipher.h index 95a0412911..022a8d1157 100644 --- a/include/crypto/cipher.h +++ b/include/crypto/cipher.h @@ -78,7 +78,7 @@ struct QCryptoCipher { QCryptoCipherAlgorithm alg; QCryptoCipherMode mode; void *opaque; - void *driver; + const QCryptoCipherDriver *driver; }; =20 /** diff --git a/crypto/cipher-afalg.c b/crypto/cipher-afalg.c index cd72284690..5c7c44761b 100644 --- a/crypto/cipher-afalg.c +++ b/crypto/cipher-afalg.c @@ -218,7 +218,7 @@ static void qcrypto_afalg_comm_ctx_free(QCryptoCipher *= cipher) qcrypto_afalg_comm_free(cipher->opaque); } =20 -struct QCryptoCipherDriver qcrypto_cipher_afalg_driver =3D { +const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver =3D { .cipher_encrypt =3D qcrypto_afalg_cipher_encrypt, .cipher_decrypt =3D qcrypto_afalg_cipher_decrypt, .cipher_setiv =3D qcrypto_afalg_cipher_setiv, diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 56d45b0227..156f32f1c7 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -522,7 +522,7 @@ qcrypto_builtin_cipher_setiv(QCryptoCipher *cipher, } =20 =20 -static struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { +static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { .cipher_encrypt =3D qcrypto_builtin_cipher_encrypt, .cipher_decrypt =3D qcrypto_builtin_cipher_decrypt, .cipher_setiv =3D qcrypto_builtin_cipher_setiv, diff --git a/crypto/cipher-gcrypt.inc.c b/crypto/cipher-gcrypt.inc.c index a62839914b..18850fadb9 100644 --- a/crypto/cipher-gcrypt.inc.c +++ b/crypto/cipher-gcrypt.inc.c @@ -413,7 +413,7 @@ qcrypto_gcrypt_cipher_setiv(QCryptoCipher *cipher, } =20 =20 -static struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { +static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { .cipher_encrypt =3D qcrypto_gcrypt_cipher_encrypt, .cipher_decrypt =3D qcrypto_gcrypt_cipher_decrypt, .cipher_setiv =3D qcrypto_gcrypt_cipher_setiv, diff --git a/crypto/cipher-nettle.inc.c b/crypto/cipher-nettle.inc.c index 0404cfc6da..6ecce5e8ea 100644 --- a/crypto/cipher-nettle.inc.c +++ b/crypto/cipher-nettle.inc.c @@ -724,7 +724,7 @@ qcrypto_nettle_cipher_setiv(QCryptoCipher *cipher, } =20 =20 -static struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { +static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { .cipher_encrypt =3D qcrypto_nettle_cipher_encrypt, .cipher_decrypt =3D qcrypto_nettle_cipher_decrypt, .cipher_setiv =3D qcrypto_nettle_cipher_setiv, diff --git a/crypto/cipher.c b/crypto/cipher.c index deae82c264..d3ef856009 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -165,7 +165,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorith= m alg, { QCryptoCipher *cipher; void *ctx =3D NULL; - QCryptoCipherDriver *drv =3D NULL; + const QCryptoCipherDriver *drv =3D NULL; =20 #ifdef CONFIG_AF_ALG ctx =3D qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, NULL); @@ -187,7 +187,7 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorith= m alg, cipher->alg =3D alg; cipher->mode =3D mode; cipher->opaque =3D ctx; - cipher->driver =3D (void *)drv; + cipher->driver =3D drv; =20 return cipher; } @@ -199,7 +199,7 @@ int qcrypto_cipher_encrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherDriver *drv =3D cipher->driver; + const QCryptoCipherDriver *drv =3D cipher->driver; return drv->cipher_encrypt(cipher, in, out, len, errp); } =20 @@ -210,7 +210,7 @@ int qcrypto_cipher_decrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherDriver *drv =3D cipher->driver; + const QCryptoCipherDriver *drv =3D cipher->driver; return drv->cipher_decrypt(cipher, in, out, len, errp); } =20 @@ -219,14 +219,14 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, const uint8_t *iv, size_t niv, Error **errp) { - QCryptoCipherDriver *drv =3D cipher->driver; + const QCryptoCipherDriver *drv =3D cipher->driver; return drv->cipher_setiv(cipher, iv, niv, errp); } =20 =20 void qcrypto_cipher_free(QCryptoCipher *cipher) { - QCryptoCipherDriver *drv; + const QCryptoCipherDriver *drv; if (cipher) { drv =3D cipher->driver; drv->cipher_free(cipher); --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289257; cv=none; d=zohomail.com; s=zohoarc; b=nc82fymImwjU8oSVkktemlEyDw7380RiklKHnlQLevYEL4hqqZu/jGx/jzPa+VTwGpDGMCykepY9eKE5UsFEbcGK5BCkZTWpcLCAxfl0Bx8to1mvgLkipJt7MFNvb44l9ClIy1B0AV5u8zACJdbSHkd7GJ6GrDb13UkoK0y1EG8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289257; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=aMWNqFOgjOT3/apxgAdd5hAPkfQJszfd2f8kYZJcRqI=; b=cVLxS6xEwbBGxAhkLD20xuzEZewh8cTIxmgsnICOY3RoFjvGaf6hCQMVxdUU7KCuFl2bHnatGqhtSBt8asbY5ZXHLNWUaToffDL2XXkt4bZqkjT0UYK/afXF36g25oQEwXlaalL3hcAImGo6vyhyJoA4QvLa6Ugdu2ASTYh7X7Y= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289257868319.3683189161201; Wed, 12 Aug 2020 20:27:37 -0700 (PDT) Received: from localhost ([::1]:52182 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63tw-0007zu-9n for importer@patchew.org; Wed, 12 Aug 2020 23:27:36 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58572) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sJ-00051g-5k for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:55 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:46007) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sG-00009C-KG for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:54 -0400 Received: by mail-pl1-x641.google.com with SMTP id bh1so1999419plb.12 for ; Wed, 12 Aug 2020 20:25:52 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=aMWNqFOgjOT3/apxgAdd5hAPkfQJszfd2f8kYZJcRqI=; b=sCJK6smQDaCj1Cy55ZTvvEjZzLwbYUDIRVrygL/DrUah8t1d6YbdrHcP/cWI2q2oYy ltGpV541MopXPqJTZ2UMehizf1IZ9QpZuMNWa/fWcwKo6EeNRLpRDIUCzdm/NX4fmsmn xr96muHIMez45EW2x8Bm/vj+lWrIt0Z/jpfgvbzEA8cQDPPHmhzfIM2UYMUm4pJigqZU 25BelOXA9hBZXSOV5iz2mQzjr8CC6LOV89WTB6C6YLG8afG1TNHPZzr/o8t4QU23dXtC dhmd2rhGneP43iLMiO4db5DZ772I9T5XnWmMqAvCtH/NR5JXnCbH9dgC0EM4W3oJT0nN fP3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=aMWNqFOgjOT3/apxgAdd5hAPkfQJszfd2f8kYZJcRqI=; b=FfrUyxAjMCf6SkaYDRfXkpJwNxTd8uRM2qG3CUkBIVCIK/A6sribsHOq6cGzuOa86O llAfDGTEA1xdmt43cznfeOukcxcXT361kVUN7H2cjHQyd6GRBR83ZetqFd2thdrrX2Hq 3WQUejgzbS1sW2IhKTM+fGVnuUWNLrMMpWYDQwR0GS97iZXYA1UkRS1i/AfIRLcZl5sz RKHNaMOL74IxlSjUarUcrqh6I+3uR2CrBOxy195dyxa3eDor/0qF07TrXJuqPbrNrgui bIcWhFfve86YqfZSqYdDbBr8nEWuhIL8DswZ7GgWrTDm1qirXPX+buGsVkpYFBv8sY8f jdTA== X-Gm-Message-State: AOAM532UK1iTBcJxcrzkDYAqgIZjrSN8QgcHtqH4vAz3U2HRo+z1V7VH i2LNRJjB/72A+AHh0ncbCH2TQhk0ySo= X-Google-Smtp-Source: ABdhPJyJxCqIk7Aq5xTE659uSXgK+lzje8KKNTY2X4RDX4qCjGTmfolhYkuch+/vd+pcg5JpSCjhBA== X-Received: by 2002:a17:90a:630c:: with SMTP id e12mr2992398pjj.17.1597289150793; Wed, 12 Aug 2020 20:25:50 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 08/17] crypto: Allocate QCryptoCipher with the subclass Date: Wed, 12 Aug 2020 20:25:28 -0700 Message-Id: <20200813032537.2888593-9-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::641; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x641.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Merge the allocation of "opaque" into the allocation of "cipher". This is step one in reducing the indirection in these classes. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/afalgpriv.h | 3 ++ crypto/cipherpriv.h | 2 +- include/crypto/cipher.h | 1 - crypto/cipher-afalg.c | 20 ++++++----- crypto/cipher-builtin.inc.c | 68 +++++++++++++++++++------------------ crypto/cipher-gcrypt.inc.c | 23 +++++++------ crypto/cipher-nettle.inc.c | 24 +++++++------ crypto/cipher.c | 20 ++++------- 8 files changed, 84 insertions(+), 77 deletions(-) diff --git a/crypto/afalgpriv.h b/crypto/afalgpriv.h index f6550b5c51..5a2393f1b7 100644 --- a/crypto/afalgpriv.h +++ b/crypto/afalgpriv.h @@ -15,6 +15,7 @@ #define QCRYPTO_AFALGPRIV_H =20 #include +#include "crypto/cipher.h" =20 #define SALG_TYPE_LEN_MAX 14 #define SALG_NAME_LEN_MAX 64 @@ -32,6 +33,8 @@ typedef struct QCryptoAFAlg QCryptoAFAlg; =20 struct QCryptoAFAlg { + QCryptoCipher base; + int tfmfd; int opfd; struct msghdr *msg; diff --git a/crypto/cipherpriv.h b/crypto/cipherpriv.h index b73be33bd2..437b109b5e 100644 --- a/crypto/cipherpriv.h +++ b/crypto/cipherpriv.h @@ -41,7 +41,7 @@ struct QCryptoCipherDriver { =20 #include "afalgpriv.h" =20 -extern QCryptoAFAlg * +extern QCryptoCipher * qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, const uint8_t *key, diff --git a/include/crypto/cipher.h b/include/crypto/cipher.h index 022a8d1157..56377c80fc 100644 --- a/include/crypto/cipher.h +++ b/include/crypto/cipher.h @@ -77,7 +77,6 @@ struct QCryptoCipher { QCryptoCipherAlgorithm alg; QCryptoCipherMode mode; - void *opaque; const QCryptoCipherDriver *driver; }; =20 diff --git a/crypto/cipher-afalg.c b/crypto/cipher-afalg.c index 5c7c44761b..86e5249bd6 100644 --- a/crypto/cipher-afalg.c +++ b/crypto/cipher-afalg.c @@ -58,7 +58,7 @@ qcrypto_afalg_cipher_format_name(QCryptoCipherAlgorithm a= lg, return name; } =20 -QCryptoAFAlg * +QCryptoCipher * qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, const uint8_t *key, @@ -109,7 +109,7 @@ qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, } afalg->cmsg =3D CMSG_FIRSTHDR(afalg->msg); =20 - return afalg; + return &afalg->base; } =20 static int @@ -117,9 +117,9 @@ qcrypto_afalg_cipher_setiv(QCryptoCipher *cipher, const uint8_t *iv, size_t niv, Error **errp) { + QCryptoAFAlg *afalg =3D container_of(cipher, QCryptoAFAlg, base); struct af_alg_iv *alg_iv; size_t expect_niv; - QCryptoAFAlg *afalg =3D cipher->opaque; =20 expect_niv =3D qcrypto_cipher_get_iv_len(cipher->alg, cipher->mode); if (niv !=3D expect_niv) { @@ -200,8 +200,9 @@ qcrypto_afalg_cipher_encrypt(QCryptoCipher *cipher, const void *in, void *out, size_t len, Error **errp) { - return qcrypto_afalg_cipher_op(cipher->opaque, in, out, - len, true, errp); + QCryptoAFAlg *afalg =3D container_of(cipher, QCryptoAFAlg, base); + + return qcrypto_afalg_cipher_op(afalg, in, out, len, true, errp); } =20 static int @@ -209,13 +210,16 @@ qcrypto_afalg_cipher_decrypt(QCryptoCipher *cipher, const void *in, void *out, size_t len, Error **errp) { - return qcrypto_afalg_cipher_op(cipher->opaque, in, out, - len, false, errp); + QCryptoAFAlg *afalg =3D container_of(cipher, QCryptoAFAlg, base); + + return qcrypto_afalg_cipher_op(afalg, in, out, len, false, errp); } =20 static void qcrypto_afalg_comm_ctx_free(QCryptoCipher *cipher) { - qcrypto_afalg_comm_free(cipher->opaque); + QCryptoAFAlg *afalg =3D container_of(cipher, QCryptoAFAlg, base); + + qcrypto_afalg_comm_free(afalg); } =20 const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver =3D { diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 156f32f1c7..6a03e23040 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -41,6 +41,8 @@ struct QCryptoCipherBuiltinDESRFB { =20 typedef struct QCryptoCipherBuiltin QCryptoCipherBuiltin; struct QCryptoCipherBuiltin { + QCryptoCipher base; + union { QCryptoCipherBuiltinAES aes; QCryptoCipherBuiltinDESRFB desrfb; @@ -65,10 +67,7 @@ struct QCryptoCipherBuiltin { =20 static void qcrypto_cipher_free_aes(QCryptoCipher *cipher) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; - - g_free(ctxt); - cipher->opaque =3D NULL; + g_free(cipher); } =20 =20 @@ -152,7 +151,8 @@ static int qcrypto_cipher_encrypt_aes(QCryptoCipher *ci= pher, size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); =20 switch (cipher->mode) { case QCRYPTO_CIPHER_MODE_ECB: @@ -186,7 +186,8 @@ static int qcrypto_cipher_decrypt_aes(QCryptoCipher *ci= pher, size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); =20 switch (cipher->mode) { case QCRYPTO_CIPHER_MODE_ECB: @@ -217,7 +218,9 @@ static int qcrypto_cipher_setiv_aes(QCryptoCipher *ciph= er, const uint8_t *iv, size_t niv, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); + if (niv !=3D AES_BLOCK_SIZE) { error_setg(errp, "IV must be %d bytes not %zu", AES_BLOCK_SIZE, niv); @@ -232,7 +235,7 @@ static int qcrypto_cipher_setiv_aes(QCryptoCipher *ciph= er, =20 =20 =20 -static QCryptoCipherBuiltin * +static QCryptoCipher * qcrypto_cipher_init_aes(QCryptoCipherMode mode, const uint8_t *key, size_t nkey, Error **errp) @@ -289,7 +292,7 @@ qcrypto_cipher_init_aes(QCryptoCipherMode mode, ctxt->encrypt =3D qcrypto_cipher_encrypt_aes; ctxt->decrypt =3D qcrypto_cipher_decrypt_aes; =20 - return ctxt; + return &ctxt->base; =20 error: g_free(ctxt); @@ -299,11 +302,11 @@ qcrypto_cipher_init_aes(QCryptoCipherMode mode, =20 static void qcrypto_cipher_free_des_rfb(QCryptoCipher *cipher) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); =20 g_free(ctxt->state.desrfb.key); g_free(ctxt); - cipher->opaque =3D NULL; } =20 =20 @@ -313,7 +316,8 @@ static int qcrypto_cipher_encrypt_des_rfb(QCryptoCipher= *cipher, size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); size_t i; =20 if (len % 8) { @@ -338,7 +342,8 @@ static int qcrypto_cipher_decrypt_des_rfb(QCryptoCipher= *cipher, size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); size_t i; =20 if (len % 8) { @@ -366,7 +371,7 @@ static int qcrypto_cipher_setiv_des_rfb(QCryptoCipher *= cipher, } =20 =20 -static QCryptoCipherBuiltin * +static QCryptoCipher * qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode, const uint8_t *key, size_t nkey, Error **errp) @@ -391,7 +396,7 @@ qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode, ctxt->encrypt =3D qcrypto_cipher_encrypt_des_rfb; ctxt->decrypt =3D qcrypto_cipher_decrypt_des_rfb; =20 - return ctxt; + return &ctxt->base; } =20 =20 @@ -421,14 +426,12 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm a= lg, } =20 =20 -static QCryptoCipherBuiltin *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm= alg, - QCryptoCipherMode mode, - const uint8_t *key, - size_t nkey, - Error **errp) +static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, + Error **errp) { - QCryptoCipherBuiltin *ctxt; - switch (mode) { case QCRYPTO_CIPHER_MODE_ECB: case QCRYPTO_CIPHER_MODE_CBC: @@ -446,29 +449,25 @@ static QCryptoCipherBuiltin *qcrypto_cipher_ctx_new(Q= CryptoCipherAlgorithm alg, =20 switch (alg) { case QCRYPTO_CIPHER_ALG_DES_RFB: - ctxt =3D qcrypto_cipher_init_des_rfb(mode, key, nkey, errp); - break; + return qcrypto_cipher_init_des_rfb(mode, key, nkey, errp); case QCRYPTO_CIPHER_ALG_AES_128: case QCRYPTO_CIPHER_ALG_AES_192: case QCRYPTO_CIPHER_ALG_AES_256: - ctxt =3D qcrypto_cipher_init_aes(mode, key, nkey, errp); - break; + return qcrypto_cipher_init_aes(mode, key, nkey, errp); default: error_setg(errp, "Unsupported cipher algorithm %s", QCryptoCipherAlgorithm_str(alg)); return NULL; } - - return ctxt; } =20 static void qcrypto_builtin_cipher_ctx_free(QCryptoCipher *cipher) { - QCryptoCipherBuiltin *ctxt; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); =20 - ctxt =3D cipher->opaque; ctxt->free(cipher); } =20 @@ -480,7 +479,8 @@ qcrypto_builtin_cipher_encrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); =20 if (len & (ctxt->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", @@ -499,7 +499,8 @@ qcrypto_builtin_cipher_decrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); =20 if (len & (ctxt->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", @@ -516,7 +517,8 @@ qcrypto_builtin_cipher_setiv(QCryptoCipher *cipher, const uint8_t *iv, size_t niv, Error **errp) { - QCryptoCipherBuiltin *ctxt =3D cipher->opaque; + QCryptoCipherBuiltin *ctxt + =3D container_of(cipher, QCryptoCipherBuiltin, base); =20 return ctxt->setiv(cipher, iv, niv, errp); } diff --git a/crypto/cipher-gcrypt.inc.c b/crypto/cipher-gcrypt.inc.c index 18850fadb9..3b3c85e265 100644 --- a/crypto/cipher-gcrypt.inc.c +++ b/crypto/cipher-gcrypt.inc.c @@ -58,6 +58,7 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, =20 typedef struct QCryptoCipherGcrypt QCryptoCipherGcrypt; struct QCryptoCipherGcrypt { + QCryptoCipher base; gcry_cipher_hd_t handle; size_t blocksize; #ifdef CONFIG_QEMU_PRIVATE_XTS @@ -86,11 +87,11 @@ qcrypto_gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, } =20 =20 -static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm = alg, - QCryptoCipherMode mode, - const uint8_t *key, - size_t nkey, - Error **errp) +static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, + Error **errp) { QCryptoCipherGcrypt *ctx; gcry_error_t err; @@ -257,7 +258,7 @@ static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QCry= ptoCipherAlgorithm alg, } #endif =20 - return ctx; + return &ctx->base; =20 error: qcrypto_gcrypt_cipher_free_ctx(ctx, mode); @@ -268,7 +269,9 @@ static QCryptoCipherGcrypt *qcrypto_cipher_ctx_new(QCry= ptoCipherAlgorithm alg, static void qcrypto_gcrypt_cipher_ctx_free(QCryptoCipher *cipher) { - qcrypto_gcrypt_cipher_free_ctx(cipher->opaque, cipher->mode); + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + + qcrypto_gcrypt_cipher_free_ctx(ctx, cipher->mode); } =20 =20 @@ -301,7 +304,7 @@ qcrypto_gcrypt_cipher_encrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherGcrypt *ctx =3D cipher->opaque; + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); gcry_error_t err; =20 if (len & (ctx->blocksize - 1)) { @@ -340,7 +343,7 @@ qcrypto_gcrypt_cipher_decrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherGcrypt *ctx =3D cipher->opaque; + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); gcry_error_t err; =20 if (len & (ctx->blocksize - 1)) { @@ -376,7 +379,7 @@ qcrypto_gcrypt_cipher_setiv(QCryptoCipher *cipher, const uint8_t *iv, size_t niv, Error **errp) { - QCryptoCipherGcrypt *ctx =3D cipher->opaque; + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); gcry_error_t err; =20 if (niv !=3D ctx->blocksize) { diff --git a/crypto/cipher-nettle.inc.c b/crypto/cipher-nettle.inc.c index 6ecce5e8ea..d8371d1f37 100644 --- a/crypto/cipher-nettle.inc.c +++ b/crypto/cipher-nettle.inc.c @@ -294,6 +294,8 @@ static void twofish_decrypt_wrapper(const void *ctx, si= ze_t length, =20 typedef struct QCryptoCipherNettle QCryptoCipherNettle; struct QCryptoCipherNettle { + QCryptoCipher base; + /* Primary cipher context for all modes */ void *ctx; /* Second cipher context for XTS mode only */ @@ -355,11 +357,11 @@ qcrypto_nettle_cipher_free_ctx(QCryptoCipherNettle *c= tx) } =20 =20 -static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm = alg, - QCryptoCipherMode mode, - const uint8_t *key, - size_t nkey, - Error **errp) +static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, + QCryptoCipherMode mode, + const uint8_t *key, + size_t nkey, + Error **errp) { QCryptoCipherNettle *ctx; uint8_t *rfbkey; @@ -585,7 +587,7 @@ static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QCry= ptoCipherAlgorithm alg, =20 ctx->iv =3D g_new0(uint8_t, ctx->blocksize); =20 - return ctx; + return &ctx->base; =20 error: qcrypto_nettle_cipher_free_ctx(ctx); @@ -596,9 +598,8 @@ static QCryptoCipherNettle *qcrypto_cipher_ctx_new(QCry= ptoCipherAlgorithm alg, static void qcrypto_nettle_cipher_ctx_free(QCryptoCipher *cipher) { - QCryptoCipherNettle *ctx; + QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); =20 - ctx =3D cipher->opaque; qcrypto_nettle_cipher_free_ctx(ctx); } =20 @@ -610,7 +611,7 @@ qcrypto_nettle_cipher_encrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherNettle *ctx =3D cipher->opaque; + QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); =20 if (len & (ctx->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", @@ -663,7 +664,7 @@ qcrypto_nettle_cipher_decrypt(QCryptoCipher *cipher, size_t len, Error **errp) { - QCryptoCipherNettle *ctx =3D cipher->opaque; + QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); =20 if (len & (ctx->blocksize - 1)) { error_setg(errp, "Length %zu must be a multiple of block size %zu", @@ -713,7 +714,8 @@ qcrypto_nettle_cipher_setiv(QCryptoCipher *cipher, const uint8_t *iv, size_t niv, Error **errp) { - QCryptoCipherNettle *ctx =3D cipher->opaque; + QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); + if (niv !=3D ctx->blocksize) { error_setg(errp, "Expected IV size %zu not %zu", ctx->blocksize, niv); diff --git a/crypto/cipher.c b/crypto/cipher.c index d3ef856009..6ea75bb764 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -163,30 +163,27 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgori= thm alg, const uint8_t *key, size_t nkey, Error **errp) { - QCryptoCipher *cipher; - void *ctx =3D NULL; + QCryptoCipher *cipher =3D NULL; const QCryptoCipherDriver *drv =3D NULL; =20 #ifdef CONFIG_AF_ALG - ctx =3D qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, NULL); - if (ctx) { + cipher =3D qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, NULL); + if (cipher) { drv =3D &qcrypto_cipher_afalg_driver; } #endif =20 - if (!ctx) { - ctx =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); - if (!ctx) { + if (!cipher) { + cipher =3D qcrypto_cipher_ctx_new(alg, mode, key, nkey, errp); + if (!cipher) { return NULL; } =20 drv =3D &qcrypto_cipher_lib_driver; } =20 - cipher =3D g_new0(QCryptoCipher, 1); cipher->alg =3D alg; cipher->mode =3D mode; - cipher->opaque =3D ctx; cipher->driver =3D drv; =20 return cipher; @@ -226,10 +223,7 @@ int qcrypto_cipher_setiv(QCryptoCipher *cipher, =20 void qcrypto_cipher_free(QCryptoCipher *cipher) { - const QCryptoCipherDriver *drv; if (cipher) { - drv =3D cipher->driver; - drv->cipher_free(cipher); - g_free(cipher); + cipher->driver->cipher_free(cipher); } } --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289375; cv=none; d=zohomail.com; s=zohoarc; b=AyZIiv6HRfX3oad5wl07qF7vWOOWmrUy2lf2OXdWqh8HDIXrWFuFoLBIII5NDJ4TQxJl0YxjwIKvic0l0OMq1wOj+mcz3aPfULje1jTb/GpCwgkH+Ck5SMYzmQtdFlMDmzKXaMbAWD2D5jPeeBTYIYsVGD0ENVkBY+gbHgRkuGU= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289375; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=nOP/WB4f5EOc+9iMNgr1GvARoRc8y3IjDCJ8RShT+rk=; b=ZEfEB2ATMVXdOn7fkKicQS+lqy5BZhOBCEMq3YJKHI8PoXO+BIN1Wnt2C1UK+C48B08UkR+xoT6Ti5/RgSvTa4kxSWJMBDUbdi1RyupSUNyfYI6cGltQFuya2/NNtNp2lYe8N01jlEBV1MO+wSYTM04VyZonz0/k9l/tfOw7bfg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159728937525293.49416645376323; Wed, 12 Aug 2020 20:29:35 -0700 (PDT) Received: from localhost ([::1]:58844 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63vq-0002IR-3P for importer@patchew.org; Wed, 12 Aug 2020 23:29:34 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58586) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sJ-00053P-SV for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:55 -0400 Received: from mail-pj1-x102f.google.com ([2607:f8b0:4864:20::102f]:50822) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sI-00009X-0D for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:55 -0400 Received: by mail-pj1-x102f.google.com with SMTP id e4so2119511pjd.0 for ; Wed, 12 Aug 2020 20:25:53 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:51 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=nOP/WB4f5EOc+9iMNgr1GvARoRc8y3IjDCJ8RShT+rk=; b=ZU27wAbV9bFAD3vOJnqL/otthlPiL6zh0mPvAV8aZr4CpRznmH0NZlR4ER1nnURy9Q YTrHXfW46dK+iw43XtdsWd6amV2neT690U0sZsITBByGi9ieCijEoXz98+5aLhnEKr5/ XCg9a6pFV1E0VS6BOQ+efHMPD7cNOWwZXqHIqIoYF05MuBuyMUYcYU48z0I0T/ssS1iS E53ycr+yfmngcwGTcCLIwY4uGcdc1M/2S1jiflFNSH384Od0nkAx+BW96kJbNzWW0o+4 qC1ILEvhpZeY5rwo9UuL/tStNPgLpwraHMn5xDpeJpGSmg8veoHsgUfVuInsDkn37pek gRMg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=nOP/WB4f5EOc+9iMNgr1GvARoRc8y3IjDCJ8RShT+rk=; b=InPQaICtb818wHpYVSZ4H8iDl7S7Sjgm/VLhCvb5ZxI2WEg/u+utajKlM6doJbvdHr 57pVUi6pMgszb6Jt4oHoOK/G20WZ1QP2jsaYEos1dell5QofLRnT6agcIC+9ITVDA/k/ ESh4tFg/naH0CFpIq4L1aGaM/uSusvmTAHGt8tKlkZKFOm8kXDejnY9gTsoY2EuKw23L ziN+EBhyGGD2HIsFclQerzzvXt13UvN9alN/tlRxFMNNYupuduynr2SsRNWcn/zxI1UG JvC5HzQbCEuXZVh6r0Y0RLgrwG8BapxDO2xjQypOJ4BrhHkl861ERmba/Ar5J74UIG/C 3/Ng== X-Gm-Message-State: AOAM5333DblMeg0tFtcTYaeMaIWZZO8oOO5XStYon3eEcMWJGsBr3WnF NNpIqhoyqPR38sfLwbfjtxgWMTH3P+U= X-Google-Smtp-Source: ABdhPJzfAdGTY+sKFAd/gx0f2dDyOojI7UWMLl9+7hPeWalKVfTBZOyZSeSME4Jnom5EnfCTjKjQ9w== X-Received: by 2002:a17:90a:eac9:: with SMTP id ev9mr3008655pjb.106.1597289152307; Wed, 12 Aug 2020 20:25:52 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 09/17] crypto: Move cipher->driver init to qcrypto_*_cipher_ctx_new Date: Wed, 12 Aug 2020 20:25:29 -0700 Message-Id: <20200813032537.2888593-10-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::102f; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x102f.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" The class vtable should be set by the class initializer. This will also allow additional subclassing, reducing the amount of indirection in the hierarchy. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipherpriv.h | 2 -- crypto/cipher-afalg.c | 5 ++++- crypto/cipher-builtin.inc.c | 4 ++++ crypto/cipher-gcrypt.inc.c | 2 ++ crypto/cipher-nettle.inc.c | 3 +++ crypto/cipher.c | 7 ------- 6 files changed, 13 insertions(+), 10 deletions(-) diff --git a/crypto/cipherpriv.h b/crypto/cipherpriv.h index 437b109b5e..396527857d 100644 --- a/crypto/cipherpriv.h +++ b/crypto/cipherpriv.h @@ -47,8 +47,6 @@ qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, const uint8_t *key, size_t nkey, Error **errp); =20 -extern const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver; - #endif =20 #endif diff --git a/crypto/cipher-afalg.c b/crypto/cipher-afalg.c index 86e5249bd6..052355a8a9 100644 --- a/crypto/cipher-afalg.c +++ b/crypto/cipher-afalg.c @@ -58,6 +58,8 @@ qcrypto_afalg_cipher_format_name(QCryptoCipherAlgorithm a= lg, return name; } =20 +static const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver; + QCryptoCipher * qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, @@ -109,6 +111,7 @@ qcrypto_afalg_cipher_ctx_new(QCryptoCipherAlgorithm alg, } afalg->cmsg =3D CMSG_FIRSTHDR(afalg->msg); =20 + afalg->base.driver =3D &qcrypto_cipher_afalg_driver; return &afalg->base; } =20 @@ -222,7 +225,7 @@ static void qcrypto_afalg_comm_ctx_free(QCryptoCipher *= cipher) qcrypto_afalg_comm_free(afalg); } =20 -const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver =3D { +static const struct QCryptoCipherDriver qcrypto_cipher_afalg_driver =3D { .cipher_encrypt =3D qcrypto_afalg_cipher_encrypt, .cipher_decrypt =3D qcrypto_afalg_cipher_decrypt, .cipher_setiv =3D qcrypto_afalg_cipher_setiv, diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 6a03e23040..1444139f36 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -22,6 +22,8 @@ #include "crypto/desrfb.h" #include "crypto/xts.h" =20 +static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver; + typedef struct QCryptoCipherBuiltinAESContext QCryptoCipherBuiltinAESConte= xt; struct QCryptoCipherBuiltinAESContext { AES_KEY enc; @@ -292,6 +294,7 @@ qcrypto_cipher_init_aes(QCryptoCipherMode mode, ctxt->encrypt =3D qcrypto_cipher_encrypt_aes; ctxt->decrypt =3D qcrypto_cipher_decrypt_aes; =20 + ctxt->base.driver =3D &qcrypto_cipher_lib_driver; return &ctxt->base; =20 error: @@ -396,6 +399,7 @@ qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode, ctxt->encrypt =3D qcrypto_cipher_encrypt_des_rfb; ctxt->decrypt =3D qcrypto_cipher_decrypt_des_rfb; =20 + ctxt->base.driver =3D &qcrypto_cipher_lib_driver; return &ctxt->base; } =20 diff --git a/crypto/cipher-gcrypt.inc.c b/crypto/cipher-gcrypt.inc.c index 3b3c85e265..7a1fbc9745 100644 --- a/crypto/cipher-gcrypt.inc.c +++ b/crypto/cipher-gcrypt.inc.c @@ -24,6 +24,7 @@ =20 #include =20 +static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver; =20 bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode) @@ -258,6 +259,7 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCip= herAlgorithm alg, } #endif =20 + ctx->base.driver =3D &qcrypto_cipher_lib_driver; return &ctx->base; =20 error: diff --git a/crypto/cipher-nettle.inc.c b/crypto/cipher-nettle.inc.c index d8371d1f37..36d57ef430 100644 --- a/crypto/cipher-nettle.inc.c +++ b/crypto/cipher-nettle.inc.c @@ -34,6 +34,8 @@ #include #endif =20 +static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver; + typedef void (*QCryptoCipherNettleFuncWrapper)(const void *ctx, size_t length, uint8_t *dst, @@ -587,6 +589,7 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCip= herAlgorithm alg, =20 ctx->iv =3D g_new0(uint8_t, ctx->blocksize); =20 + ctx->base.driver =3D &qcrypto_cipher_lib_driver; return &ctx->base; =20 error: diff --git a/crypto/cipher.c b/crypto/cipher.c index 6ea75bb764..6e25f68f5c 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -164,13 +164,9 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgorit= hm alg, Error **errp) { QCryptoCipher *cipher =3D NULL; - const QCryptoCipherDriver *drv =3D NULL; =20 #ifdef CONFIG_AF_ALG cipher =3D qcrypto_afalg_cipher_ctx_new(alg, mode, key, nkey, NULL); - if (cipher) { - drv =3D &qcrypto_cipher_afalg_driver; - } #endif =20 if (!cipher) { @@ -178,13 +174,10 @@ QCryptoCipher *qcrypto_cipher_new(QCryptoCipherAlgori= thm alg, if (!cipher) { return NULL; } - - drv =3D &qcrypto_cipher_lib_driver; } =20 cipher->alg =3D alg; cipher->mode =3D mode; - cipher->driver =3D drv; =20 return cipher; } --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289316; cv=none; d=zohomail.com; s=zohoarc; b=hma8Cxw7mil/XGIJzUFO2CU+953xGaDBi0AT3AFd5pn0C3+U4AvcGejWanpupmOXdHCZ7cB98+te9eZ5k5/bMxYp2F58RxhmLQglm9j0cFqo26ZOyUYcxcnyh41pyIRAwE1bSKzn1JpfLD23pIjNXteX/qiuVPIpGXqHEjhNuj0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289316; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=3RRutFcQg2BpL8FgLWbZKREr0UCat+CTMLpox4B8wnA=; b=mTQqIsbaBkAHP0v0uTHzR8jca5P2L5sxyn1QQUHIBHXE2QpK2SczfLZC3XHyvdEtT00N+ZKbq5GcRhWzXBTK4rQJUW3jrG+/kVscbfrRsJeDq3TCUrmCLdScz+lL1cRTMNDSGSOBrsTsQB9Um+Yz/Jr97mOlCFbpuByDqfXvWw8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289316792168.95277258146325; Wed, 12 Aug 2020 20:28:36 -0700 (PDT) Received: from localhost ([::1]:55756 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63ut-00014J-JZ for importer@patchew.org; Wed, 12 Aug 2020 23:28:35 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58604) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sM-00058N-1p for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:58 -0400 Received: from mail-pj1-x1033.google.com ([2607:f8b0:4864:20::1033]:33245) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sJ-00009b-1B for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:57 -0400 Received: by mail-pj1-x1033.google.com with SMTP id i92so3676272pje.0 for ; Wed, 12 Aug 2020 20:25:54 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=3RRutFcQg2BpL8FgLWbZKREr0UCat+CTMLpox4B8wnA=; b=YGRkdWv567UbOlcuN8Ax0gBxX7z6zG292NL68TSsoraHI94SqhfCnsszj58cBoKDYi 4QpYQl9kQ/GCnhrmAXY3MacmhRxN3oJI/vfdKtaasjFLwFDuKdvHM4+3+11Q2J+SwrJH +wYla47O8pzTG76aBQ2ODdEWKRVuJxKDv1MG675CMFan+E8IjP3IgCBjNoiya8W4yUa1 sAfgLltyN/ezDmiHuJ7zyJccSgAS1uAwd5WIBvOSqYR8ipsNwDjjG8ELmT//0efeORka bc+L8jO3xg3z8/UEIbfnIeUPILnLrQ9vosOSYoyaPbHjDzrRl/C2sNDEHqXVPs1w2+lx Aqwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=3RRutFcQg2BpL8FgLWbZKREr0UCat+CTMLpox4B8wnA=; b=dnq9uGJJE9gHoqwpXIgPhmvIRL0OJFwSZ2iyp4chJzuLmqWsSqV7PfJlpv3AOT1N2C 7QOjMzi17WYxgmPS1ykcGos/KqxoI71Qh4hcTrtqTsF9vTZ70JRGSRPsYE0yTPQNwTbO 7lXiG7gILH9kO4Z7/1GI6g3z1YcZhhWnczFLtLaa+hqz6T0HgQa8SFwYos01Y/b6stPr Q6n5AHANArwyqg1cAo8D7HDl7+F37fXN1dT9Tou1sqxDHvV1NNDTsO+AlOHo1lVnAq96 NAKchxghQHwh79tgWraK1Bl1GDUK1jg7bB8t3Y/lY6TNOHhPuYFBNQHHaaV6xIaZD1Hv 3I3g== X-Gm-Message-State: AOAM533NdpTgPGMuWIkrUBiJ9tk3tvDRtQPkhc5mos4Vy+5ZQhf8tvtL tsWC74zk2qDGAnskulqRAdw0ftp1fEc= X-Google-Smtp-Source: ABdhPJzm9zzyaiEwc7cf1kSMeLqDUeTZQu7vIJsb0QlxTFPVPVEfn8T0unQHeqZmGACWunOsbAUwzg== X-Received: by 2002:a17:90b:384b:: with SMTP id nl11mr3029362pjb.91.1597289153374; Wed, 12 Aug 2020 20:25:53 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 10/17] crypto: Constify cipher data tables Date: Wed, 12 Aug 2020 20:25:30 -0700 Message-Id: <20200813032537.2888593-11-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1033; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1033.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/crypto/cipher.c b/crypto/cipher.c index 6e25f68f5c..2fe12a4fdc 100644 --- a/crypto/cipher.c +++ b/crypto/cipher.c @@ -25,7 +25,7 @@ #include "cipherpriv.h" =20 =20 -static size_t alg_key_len[QCRYPTO_CIPHER_ALG__MAX] =3D { +static const size_t alg_key_len[QCRYPTO_CIPHER_ALG__MAX] =3D { [QCRYPTO_CIPHER_ALG_AES_128] =3D 16, [QCRYPTO_CIPHER_ALG_AES_192] =3D 24, [QCRYPTO_CIPHER_ALG_AES_256] =3D 32, @@ -40,7 +40,7 @@ static size_t alg_key_len[QCRYPTO_CIPHER_ALG__MAX] =3D { [QCRYPTO_CIPHER_ALG_TWOFISH_256] =3D 32, }; =20 -static size_t alg_block_len[QCRYPTO_CIPHER_ALG__MAX] =3D { +static const size_t alg_block_len[QCRYPTO_CIPHER_ALG__MAX] =3D { [QCRYPTO_CIPHER_ALG_AES_128] =3D 16, [QCRYPTO_CIPHER_ALG_AES_192] =3D 16, [QCRYPTO_CIPHER_ALG_AES_256] =3D 16, @@ -55,7 +55,7 @@ static size_t alg_block_len[QCRYPTO_CIPHER_ALG__MAX] =3D { [QCRYPTO_CIPHER_ALG_TWOFISH_256] =3D 16, }; =20 -static bool mode_need_iv[QCRYPTO_CIPHER_MODE__MAX] =3D { +static const bool mode_need_iv[QCRYPTO_CIPHER_MODE__MAX] =3D { [QCRYPTO_CIPHER_MODE_ECB] =3D false, [QCRYPTO_CIPHER_MODE_CBC] =3D true, [QCRYPTO_CIPHER_MODE_XTS] =3D true, --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289476; cv=none; d=zohomail.com; s=zohoarc; b=ZMqas+ESWXkhMbTQghtOVzBUdjThRTAA9ubWUaUm3URjO3tJLbb4afAXtrYz4+uSmEMwtFRwqy6Ekz3GxHSHiGUeM5L5GZS1QPnkbYUzPiriNNfqfbL2llvWekIu3OR0g3EbAK7pIp6qrMSy8KOM1aST56v8rUR8fkNxWQSUeZs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289476; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=TcYIyipPkI2d2aP17J0suGRqHmTuPSrIckZvWVvyskc=; b=baWpb91dRB1f91hx4xjqVE82+R2HCPI4rg9hPqFQNbjbNCgyYS4yYaes+gN+CmrLV6agXF2iHNZQ/eicM4jcLsSAXc4FAWnRS30BVGRGFtFTqy77w8gHjvk7c93WSBn1AdxAaVGZS5trHayfdFW1NxKPrX1UZLA65w/sk/sP5IM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289476392309.97792023544844; Wed, 12 Aug 2020 20:31:16 -0700 (PDT) Received: from localhost ([::1]:37034 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63xT-0004yl-2i for importer@patchew.org; Wed, 12 Aug 2020 23:31:15 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58608) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sM-00058r-89 for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:58 -0400 Received: from mail-pf1-x443.google.com ([2607:f8b0:4864:20::443]:33948) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sK-00009k-4j for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:57 -0400 Received: by mail-pf1-x443.google.com with SMTP id m71so2107851pfd.1 for ; Wed, 12 Aug 2020 20:25:55 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:53 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=TcYIyipPkI2d2aP17J0suGRqHmTuPSrIckZvWVvyskc=; b=MGTeMRERtIQu9/aSHMjQ9sttR+a5b/lKB9WXQLADMrjS6iq6xqMNdKLKpc3J8VOQ+m xueKzzFSn4K8sKnqvez2Fw4b1yo5NqPO77SDeUdtrRQSvHeLDyxiBblEb4CAk8usWPnW Xil7Tv/7X5qJgnTkR0RxPRE4qXQALVp3VHXdEUHTGOthy4qdfKjVx2Tsa40Dt5Z1nAjJ ODx1H28xy44x0VeP6odFCMYLjQwU9lzB1qJFwa0Zu2FMPZZDAHGdTTPRwlIc/qwzmYir bB0DekBSJ2XMfbDodxAJCnpzZcVNTV3eunIVREKlB+H6AXDmYW8kHIbUwddr/ZIs2oiM KE3Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=TcYIyipPkI2d2aP17J0suGRqHmTuPSrIckZvWVvyskc=; b=qQlQ6BDURlXKlThAcXDeQqzJG8CU/3QenKTE/WpNswUruxbYAo44VFajI+Akf42nTM OJ8V2JtNNjMxaNUKofJ2D7xi/4/ZieOKPRzNXX+9jdzu/jsiOvkg1Ejq9nnXT/OKlllA YiAMfAxoYcQ9QlSIDxxvEDjwp0P91uu2qzdWxdfATmUeT/lk978A2zhoD2PYfiPYQlj6 qi5b9r0rvOiTr3i0JJ3SRt00oeZwiP8uKGhP8H+vocRRznzXcT6qsDGj86IfL9huNCNV +i0/9fhR5yxEY5h5ehyizwzzHzew6UmUvHvCrQ6O/xUHSxkwdV8vQT73C1Q3Okh9E6yB /WsQ== X-Gm-Message-State: AOAM533nb7ap6rMzFA8JHscBHqu3/3Q1DnvLimnqP25Wm1zDgliCTLmh x4rjkYBDNKmVr2F5spIyH+pt0kTraKU= X-Google-Smtp-Source: ABdhPJxaMp+LOqWJtyB2mnInBPzjrFfNtw+aJ9mSNJ6I6TT3mimxRzwu/A24db/dAX3v2oXyQT5dKQ== X-Received: by 2002:aa7:9904:: with SMTP id z4mr2435215pff.32.1597289154407; Wed, 12 Aug 2020 20:25:54 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 11/17] crypto/builtin: Remove odd-sized AES block handling Date: Wed, 12 Aug 2020 20:25:31 -0700 Message-Id: <20200813032537.2888593-12-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::443; envelope-from=richard.henderson@linaro.org; helo=mail-pf1-x443.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" We verified that the data block is properly sized modulo AES_BLOCK_SIZE within qcrypto_builtin_cipher_{en,de}crypt. Therefore we will never have to handle odd sized blocks. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-builtin.inc.c | 40 +++++++++++-------------------------- 1 file changed, 12 insertions(+), 28 deletions(-) diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 1444139f36..e2ae5d090c 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -80,21 +80,13 @@ static void qcrypto_cipher_aes_ecb_encrypt(const AES_KE= Y *key, { const uint8_t *inptr =3D in; uint8_t *outptr =3D out; + + /* We have already verified that len % AES_BLOCK_SIZE =3D=3D 0. */ while (len) { - if (len > AES_BLOCK_SIZE) { - AES_encrypt(inptr, outptr, key); - inptr +=3D AES_BLOCK_SIZE; - outptr +=3D AES_BLOCK_SIZE; - len -=3D AES_BLOCK_SIZE; - } else { - uint8_t tmp1[AES_BLOCK_SIZE], tmp2[AES_BLOCK_SIZE]; - memcpy(tmp1, inptr, len); - /* Fill with 0 to avoid valgrind uninitialized reads */ - memset(tmp1 + len, 0, sizeof(tmp1) - len); - AES_encrypt(tmp1, tmp2, key); - memcpy(outptr, tmp2, len); - len =3D 0; - } + AES_encrypt(inptr, outptr, key); + inptr +=3D AES_BLOCK_SIZE; + outptr +=3D AES_BLOCK_SIZE; + len -=3D AES_BLOCK_SIZE; } } =20 @@ -106,21 +98,13 @@ static void qcrypto_cipher_aes_ecb_decrypt(const AES_K= EY *key, { const uint8_t *inptr =3D in; uint8_t *outptr =3D out; + + /* We have already verified that len % AES_BLOCK_SIZE =3D=3D 0. */ while (len) { - if (len > AES_BLOCK_SIZE) { - AES_decrypt(inptr, outptr, key); - inptr +=3D AES_BLOCK_SIZE; - outptr +=3D AES_BLOCK_SIZE; - len -=3D AES_BLOCK_SIZE; - } else { - uint8_t tmp1[AES_BLOCK_SIZE], tmp2[AES_BLOCK_SIZE]; - memcpy(tmp1, inptr, len); - /* Fill with 0 to avoid valgrind uninitialized reads */ - memset(tmp1 + len, 0, sizeof(tmp1) - len); - AES_decrypt(tmp1, tmp2, key); - memcpy(outptr, tmp2, len); - len =3D 0; - } + AES_decrypt(inptr, outptr, key); + inptr +=3D AES_BLOCK_SIZE; + outptr +=3D AES_BLOCK_SIZE; + len -=3D AES_BLOCK_SIZE; } } =20 --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289432; cv=none; d=zohomail.com; s=zohoarc; b=DkJjI1bsMbOCwQMqB1/C3UHCRqUtDyQTbgQrLSPucWrox1q2MW6DaYxGm0OZSpPLgrnu0ODnUq6YfWMZEkrzr4dtovnGiiublxmEIAsgRXdhXJWEqQYUOpnZjn7K4Nl9hesEeUICaM08sAbYXli1SNs5Z9Kb9lAQKNJfE6NWa9U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289432; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=jHuSzulEWSxcXS3/HgjqhtO/Ofgto2+WeRaIMAxtwhM=; b=ey+Bds2p8gicUCjXw1o51zY76r4JSpAu+RKcHghAspZAePfhlnPRBxE3cLT+vl4XzTg7yludMkeoFV0PXwaAwKiP6XfAQZ8hFLaePQswBooMLZwxsAehEThnBd6zZLA+kuoOR3wd4g/HEwYkeS4evzGneL9uDm5dwn9uNhnjyxo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=fail header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289432989837.3448128539401; Wed, 12 Aug 2020 20:30:32 -0700 (PDT) Received: from localhost ([::1]:33864 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63wl-0003cQ-O4 for importer@patchew.org; Wed, 12 Aug 2020 23:30:31 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58636) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sN-0005CC-GU for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:59 -0400 Received: from mail-pl1-x641.google.com ([2607:f8b0:4864:20::641]:36780) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sL-00009u-7C for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:25:59 -0400 Received: by mail-pl1-x641.google.com with SMTP id y6so2020536plt.3 for ; Wed, 12 Aug 2020 20:25:56 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:55 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=jHuSzulEWSxcXS3/HgjqhtO/Ofgto2+WeRaIMAxtwhM=; b=Sz5zeG3XgVdhymmZEIjmfDzibF17JHrLPYGtUpJ94dyXjiVuSE86E/rcxIJx6bklEK e8p3MX2GpUZ5RPNdn9FEkoXW00uaPrIffXcgob1rY7NSul2DOVfBnxynTIkyMe9XoGVF 1UYo8DAnf6C+uPYy0pwChWYRLS3JMyDKzTH1Wz/J4YOz5YRRVkW1P63v+0Nq8OFJi0mQ PUwT/PUboy63xS9y1g2nHE+x6XF94DOIgIgbL1DzpBUWIt9O1FstG9maj9x1hgmVU3KS LJyaeApEFgVdlzNSVOwdEU+osF1yaO4tyid/8uHnpp59CJdWoAvwMxDZxrRVJQCNa8pf MVYg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=jHuSzulEWSxcXS3/HgjqhtO/Ofgto2+WeRaIMAxtwhM=; b=keNVvEvy+pW7zFwPQo7r9pOzs1gJs0ZiSM3dA/ZkAfp0+hhhnEQznlRGq3XCPESgYV ivW60bpOXTLnAEmkZe+rVQ5UHQ44ZyrhTFODdls9/Je42UkZRb+lNaUOOJgOdo1M0vGD AA+Cp+wTdlii8zf5tBqJVmt6mHEJW/fLNEtRWnWSLunqMuEl23MzlqwB15Tax+g7TP37 rvT/tGXlIxXVAcqbXyU86fs5ZFV45T6IWsh062OF8apg80fpAikFpLzSysrlNSO+az2Y K0fqWpNKRjGhytwxtDvg6alLwbhWl0sjlKz5M3AMccYfwMCeKB0/zUHZLymLIMM5J+cf 6k6g== X-Gm-Message-State: AOAM5339w6PhROHGE0A8rbJjcfpT6jFAxxgEnE5KCK/mwgDHQ2ZPCChl SE2ZbFUb7lRyj71wKBEcPWmnA3Kd7IM= X-Google-Smtp-Source: ABdhPJxUcFJml9PgDgnwE7wHJBbexG7JV81t1eNkeIVzwwE/d2QlZLrPBR+MxN4jpXAzHRV7AbFrQQ== X-Received: by 2002:a17:90a:17ab:: with SMTP id q40mr3121848pja.28.1597289155645; Wed, 12 Aug 2020 20:25:55 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 12/17] crypto/builtin: Merge qcrypto_cipher_aes_{ecb, xts}_{en, de}crypt Date: Wed, 12 Aug 2020 20:25:32 -0700 Message-Id: <20200813032537.2888593-13-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::641; envelope-from=richard.henderson@linaro.org; helo=mail-pl1-x641.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: fail (Header signature does not verify) Content-Type: text/plain; charset="utf-8" There's no real reason we need two separate helper functions here. Standardize on the function signature required for xts_encrypt. Rename to do_aes_{en,de}crypt_ecb, since the helper does not itself do anything with respect to xts. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-builtin.inc.c | 69 ++++++++++--------------------------- 1 file changed, 18 insertions(+), 51 deletions(-) diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index e2ae5d090c..4d971a2b82 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -72,65 +72,34 @@ static void qcrypto_cipher_free_aes(QCryptoCipher *ciph= er) g_free(cipher); } =20 - -static void qcrypto_cipher_aes_ecb_encrypt(const AES_KEY *key, - const void *in, - void *out, - size_t len) +static void do_aes_encrypt_ecb(const void *vctx, size_t len, + uint8_t *out, const uint8_t *in) { - const uint8_t *inptr =3D in; - uint8_t *outptr =3D out; + const QCryptoCipherBuiltinAESContext *ctx =3D vctx; =20 /* We have already verified that len % AES_BLOCK_SIZE =3D=3D 0. */ while (len) { - AES_encrypt(inptr, outptr, key); - inptr +=3D AES_BLOCK_SIZE; - outptr +=3D AES_BLOCK_SIZE; + AES_encrypt(in, out, &ctx->enc); + in +=3D AES_BLOCK_SIZE; + out +=3D AES_BLOCK_SIZE; len -=3D AES_BLOCK_SIZE; } } =20 - -static void qcrypto_cipher_aes_ecb_decrypt(const AES_KEY *key, - const void *in, - void *out, - size_t len) +static void do_aes_decrypt_ecb(const void *vctx, size_t len, + uint8_t *out, const uint8_t *in) { - const uint8_t *inptr =3D in; - uint8_t *outptr =3D out; + const QCryptoCipherBuiltinAESContext *ctx =3D vctx; =20 /* We have already verified that len % AES_BLOCK_SIZE =3D=3D 0. */ while (len) { - AES_decrypt(inptr, outptr, key); - inptr +=3D AES_BLOCK_SIZE; - outptr +=3D AES_BLOCK_SIZE; + AES_decrypt(in, out, &ctx->dec); + in +=3D AES_BLOCK_SIZE; + out +=3D AES_BLOCK_SIZE; len -=3D AES_BLOCK_SIZE; } } =20 - -static void qcrypto_cipher_aes_xts_encrypt(const void *ctx, - size_t length, - uint8_t *dst, - const uint8_t *src) -{ - const QCryptoCipherBuiltinAESContext *aesctx =3D ctx; - - qcrypto_cipher_aes_ecb_encrypt(&aesctx->enc, src, dst, length); -} - - -static void qcrypto_cipher_aes_xts_decrypt(const void *ctx, - size_t length, - uint8_t *dst, - const uint8_t *src) -{ - const QCryptoCipherBuiltinAESContext *aesctx =3D ctx; - - qcrypto_cipher_aes_ecb_decrypt(&aesctx->dec, src, dst, length); -} - - static int qcrypto_cipher_encrypt_aes(QCryptoCipher *cipher, const void *in, void *out, @@ -142,8 +111,7 @@ static int qcrypto_cipher_encrypt_aes(QCryptoCipher *ci= pher, =20 switch (cipher->mode) { case QCRYPTO_CIPHER_MODE_ECB: - qcrypto_cipher_aes_ecb_encrypt(&ctxt->state.aes.key.enc, - in, out, len); + do_aes_encrypt_ecb(&ctxt->state.aes.key, len, out, in); break; case QCRYPTO_CIPHER_MODE_CBC: AES_cbc_encrypt(in, out, len, @@ -153,8 +121,8 @@ static int qcrypto_cipher_encrypt_aes(QCryptoCipher *ci= pher, case QCRYPTO_CIPHER_MODE_XTS: xts_encrypt(&ctxt->state.aes.key, &ctxt->state.aes.key_tweak, - qcrypto_cipher_aes_xts_encrypt, - qcrypto_cipher_aes_xts_decrypt, + do_aes_encrypt_ecb, + do_aes_decrypt_ecb, ctxt->state.aes.iv, len, out, in); break; @@ -177,8 +145,7 @@ static int qcrypto_cipher_decrypt_aes(QCryptoCipher *ci= pher, =20 switch (cipher->mode) { case QCRYPTO_CIPHER_MODE_ECB: - qcrypto_cipher_aes_ecb_decrypt(&ctxt->state.aes.key.dec, - in, out, len); + do_aes_decrypt_ecb(&ctxt->state.aes.key, len, out, in); break; case QCRYPTO_CIPHER_MODE_CBC: AES_cbc_encrypt(in, out, len, @@ -188,8 +155,8 @@ static int qcrypto_cipher_decrypt_aes(QCryptoCipher *ci= pher, case QCRYPTO_CIPHER_MODE_XTS: xts_decrypt(&ctxt->state.aes.key, &ctxt->state.aes.key_tweak, - qcrypto_cipher_aes_xts_encrypt, - qcrypto_cipher_aes_xts_decrypt, + do_aes_encrypt_ecb, + do_aes_decrypt_ecb, ctxt->state.aes.iv, len, out, in); break; --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289539; cv=none; d=zohomail.com; s=zohoarc; b=bfF1mkR6RanFlfYLsxGnXWXf/UIM31Ke5nT9OL6A05qvp3B5GsroZd7oATNhNlhFgwiMC0Fk5CNsNhN0HNDJeZNjTzE+AZl1NYg3322zo6FIaUpj9uCIr9j7FcuLkMGuFX/S6tmKY9dtM9HquXWTqJ6RI9k4LBu0Gqucrc40jU8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289539; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=dJVKjiEkOYni5kS+6oXRQCkue35GHv0VpKcWBZdFBBk=; b=cFImuk/JGQLFGDJBr92BXXFblzNNGrjVNMDRYMNUqkJOSdybAkgGshFkeMeIISH40CS6Ckh9cRK5l3jn08rBK5dHF8WbIUw2R4EpbpVJNLuuUgs+Tsx2R9/mmZKrJixjvtsl2V6RGOECEz0r/E8TxGNSlazEnlRZTOgpi6Gwd14= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289539260217.59876178326408; Wed, 12 Aug 2020 20:32:19 -0700 (PDT) Received: from localhost ([::1]:40328 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63yU-0006JZ-2h for importer@patchew.org; Wed, 12 Aug 2020 23:32:18 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58646) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sO-0005EM-D8 for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:00 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:35917) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sM-0000A2-In for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:00 -0400 Received: by mail-pg1-x52b.google.com with SMTP id p37so2124553pgl.3 for ; Wed, 12 Aug 2020 20:25:58 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:56 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=dJVKjiEkOYni5kS+6oXRQCkue35GHv0VpKcWBZdFBBk=; b=fsFpya0W+7tQF58WN/FjXL1mu4h31IJ/l+AlLL5xRGa1ANaljw9PKxzv1NWJfVi2Db E7/NcjUHIYsFGSVp2zqZVR5+iAYlEKMouTRtC8hDwdh+8NMYxgEooiJOmeeS1VAn5KIo nQlaNImeB+gXpEPCh3rVcc6B0ghDxNWXqgaYmjY5bU9Zpj5M1H2G4QewQEJab5Q/vBfo zNmH5sFV8rBwKFuV0db7DE8ZiQ3ZHmGY+uPDZkNTTrAiM/jPuY3m3xNPXQ217x9PSvEi ziLRL0I/fE0VQcTPWtV0I0i/F0Mr/QRbwA5Tn5jHtDjtKGHX1aKBlXBzwu9Sq6cr5NBD XB+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=dJVKjiEkOYni5kS+6oXRQCkue35GHv0VpKcWBZdFBBk=; b=Yf++E5susFA7mXHtSq3ZsH2gA6RdMlpMYpdhPgGOZ85BdC7Norr+0koW/qYWbVllrr BAjiKlp8Z3v3LrmVvXPIM0nA4uhDvEGNBUYCaLiuv8FHdCPYZFz/ncjatirzMG3HxE8E DD/3PCIIYpqNTU63eVXwc09gtEMHQINICecK8ULQWm4NDroPYP9jptsXqUjai+4Hfy9n 0e8Z8kOOn4E4owG2tRyhsd+fRj+GdlK/NYNLs09escardMtstBIeslG8c17Cxs4zxwg0 jknXKmy9r9M8eXK9FD7ZdQ3F4O1tAgHg4iCfkQiZTUkV7YPtLaiomP1HGBT1fF1C24mo y0dw== X-Gm-Message-State: AOAM532pQUKfDO5dPHqZIgOBMxTKmZLZSoskHcfvRAEnyMnFgYW4djRl H0kzEJSY9j1eUECASzSbZe0Rr9bk5To= X-Google-Smtp-Source: ABdhPJxHVRPGD+ZCBih54kfyVpetWDZ91KT3SUY3K5YdG8Ysu4o/gKAhqqeuqk9Z5gkKSnPavXsdHg== X-Received: by 2002:a62:c182:: with SMTP id i124mr2344803pfg.225.1597289156789; Wed, 12 Aug 2020 20:25:56 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 13/17] crypto/builtin: Move AES_cbc_encrypt into cipher-builtin.inc.c Date: Wed, 12 Aug 2020 20:25:33 -0700 Message-Id: <20200813032537.2888593-14-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" By making the function private, we will be able to make further simplifications. Re-indent the migrated code and fix the missing braces for CODING_STYLE. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Reviewed-by: Philippe Mathieu-Daud=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- include/crypto/aes.h | 4 --- crypto/aes.c | 51 --------------------------------- crypto/cipher-builtin.inc.c | 56 +++++++++++++++++++++++++++++++++++++ 3 files changed, 56 insertions(+), 55 deletions(-) diff --git a/include/crypto/aes.h b/include/crypto/aes.h index 12fb321b89..ba297d6a73 100644 --- a/include/crypto/aes.h +++ b/include/crypto/aes.h @@ -16,7 +16,6 @@ typedef struct aes_key_st AES_KEY; #define AES_set_decrypt_key QEMU_AES_set_decrypt_key #define AES_encrypt QEMU_AES_encrypt #define AES_decrypt QEMU_AES_decrypt -#define AES_cbc_encrypt QEMU_AES_cbc_encrypt =20 int AES_set_encrypt_key(const unsigned char *userKey, const int bits, AES_KEY *key); @@ -27,9 +26,6 @@ void AES_encrypt(const unsigned char *in, unsigned char *= out, const AES_KEY *key); void AES_decrypt(const unsigned char *in, unsigned char *out, const AES_KEY *key); -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - const unsigned long length, const AES_KEY *key, - unsigned char *ivec, const int enc); =20 extern const uint8_t AES_sbox[256]; extern const uint8_t AES_isbox[256]; diff --git a/crypto/aes.c b/crypto/aes.c index 0f6a195af8..159800df65 100644 --- a/crypto/aes.c +++ b/crypto/aes.c @@ -1599,54 +1599,3 @@ void AES_decrypt(const unsigned char *in, unsigned c= har *out, } =20 #endif /* AES_ASM */ - -void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - const unsigned long length, const AES_KEY *key, - unsigned char *ivec, const int enc) -{ - - unsigned long n; - unsigned long len =3D length; - unsigned char tmp[AES_BLOCK_SIZE]; - - assert(in && out && key && ivec); - - if (enc) { - while (len >=3D AES_BLOCK_SIZE) { - for(n=3D0; n < AES_BLOCK_SIZE; ++n) - tmp[n] =3D in[n] ^ ivec[n]; - AES_encrypt(tmp, out, key); - memcpy(ivec, out, AES_BLOCK_SIZE); - len -=3D AES_BLOCK_SIZE; - in +=3D AES_BLOCK_SIZE; - out +=3D AES_BLOCK_SIZE; - } - if (len) { - for(n=3D0; n < len; ++n) - tmp[n] =3D in[n] ^ ivec[n]; - for(n=3Dlen; n < AES_BLOCK_SIZE; ++n) - tmp[n] =3D ivec[n]; - AES_encrypt(tmp, tmp, key); - memcpy(out, tmp, AES_BLOCK_SIZE); - memcpy(ivec, tmp, AES_BLOCK_SIZE); - } - } else { - while (len >=3D AES_BLOCK_SIZE) { - memcpy(tmp, in, AES_BLOCK_SIZE); - AES_decrypt(in, out, key); - for(n=3D0; n < AES_BLOCK_SIZE; ++n) - out[n] ^=3D ivec[n]; - memcpy(ivec, tmp, AES_BLOCK_SIZE); - len -=3D AES_BLOCK_SIZE; - in +=3D AES_BLOCK_SIZE; - out +=3D AES_BLOCK_SIZE; - } - if (len) { - memcpy(tmp, in, AES_BLOCK_SIZE); - AES_decrypt(tmp, tmp, key); - for(n=3D0; n < len; ++n) - out[n] =3D tmp[n] ^ ivec[n]; - memcpy(ivec, tmp, AES_BLOCK_SIZE); - } - } -} diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 4d971a2b82..416d44b38e 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -100,6 +100,62 @@ static void do_aes_decrypt_ecb(const void *vctx, size_= t len, } } =20 +static void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, + const unsigned long length, const AES_KEY *key, + unsigned char *ivec, const int enc) +{ + unsigned long n; + unsigned long len =3D length; + unsigned char tmp[AES_BLOCK_SIZE]; + + assert(in && out && key && ivec); + + if (enc) { + while (len >=3D AES_BLOCK_SIZE) { + for (n =3D 0; n < AES_BLOCK_SIZE; ++n) { + tmp[n] =3D in[n] ^ ivec[n]; + } + AES_encrypt(tmp, out, key); + memcpy(ivec, out, AES_BLOCK_SIZE); + len -=3D AES_BLOCK_SIZE; + in +=3D AES_BLOCK_SIZE; + out +=3D AES_BLOCK_SIZE; + } + if (len) { + for (n =3D 0; n < len; ++n) { + tmp[n] =3D in[n] ^ ivec[n]; + } + for (n =3D len; n < AES_BLOCK_SIZE; ++n) { + tmp[n] =3D ivec[n]; + } + AES_encrypt(tmp, tmp, key); + memcpy(out, tmp, AES_BLOCK_SIZE); + memcpy(ivec, tmp, AES_BLOCK_SIZE); + } + } else { + while (len >=3D AES_BLOCK_SIZE) { + memcpy(tmp, in, AES_BLOCK_SIZE); + AES_decrypt(in, out, key); + for (n =3D 0; n < AES_BLOCK_SIZE; ++n) { + out[n] ^=3D ivec[n]; + } + memcpy(ivec, tmp, AES_BLOCK_SIZE); + len -=3D AES_BLOCK_SIZE; + in +=3D AES_BLOCK_SIZE; + out +=3D AES_BLOCK_SIZE; + } + if (len) { + memcpy(tmp, in, AES_BLOCK_SIZE); + AES_decrypt(tmp, tmp, key); + for (n =3D 0; n < len; ++n) { + out[n] =3D tmp[n] ^ ivec[n]; + } + memcpy(ivec, tmp, AES_BLOCK_SIZE); + } + } +} + + static int qcrypto_cipher_encrypt_aes(QCryptoCipher *cipher, const void *in, void *out, --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289607; cv=none; d=zohomail.com; s=zohoarc; b=Xw5F/7Q2a2h5hrWj78LuykJ5nzd334kLUrg5Ns6tRctx0pZHgVOI9huPYjuS2x4qmNjlOz0IHCn2pEUCOdB4SIBcu+B564bJv5wSuJSMqZV8Fr+mYriZL7X1O6w9OWTPg7MKearyPPslzbfd3GAzhHaHRMggKBneQTMvMajjJh8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289607; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=XfDBqVtcFp4u69HfrPx2aYbk0EB30OybSYsl3oZkJuM=; b=dfYEr2N6w0ZEoal5sd3nyKo8m2JEoOKX2L6SRx6k5n7ylmJ2SNluHNJCnRUvDVpyQpwgyGrLU/I5QqbubiWkZ6VbCbe4isAGWNiqFgKP76A+DNECbz51o1bU3BWtsgipXOT0+dYheGp+LWCU19G5F94OSnl+F0lZOkv3alyOzRg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159728960776384.57958894434034; Wed, 12 Aug 2020 20:33:27 -0700 (PDT) Received: from localhost ([::1]:44646 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k63za-00083Z-Hc for importer@patchew.org; Wed, 12 Aug 2020 23:33:26 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58678) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sQ-0005IM-VK for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:02 -0400 Received: from mail-pg1-x543.google.com ([2607:f8b0:4864:20::543]:40197) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sO-0000AE-1R for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:01 -0400 Received: by mail-pg1-x543.google.com with SMTP id h12so2114949pgm.7 for ; Wed, 12 Aug 2020 20:25:59 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=XfDBqVtcFp4u69HfrPx2aYbk0EB30OybSYsl3oZkJuM=; b=BCg5WWAYUJo/5l2JLBQpDtWdfMAusmXw+9wpC/wXOIbC3IOETdp/nPNe6WbdxMj7dd Cg14wYAHL4XVLRF8uuOfhOc0RUFeVJpyGqFxfS8erzXM1RXtzY5eKzh3Heq3YH68X7KP fKakJHd9x0j260R8P/P2/IYM5CFZypOYeLyCcpjjxZe+DGLX+VhRCCL86kL6fEfcatW5 q19d6FWx8vmD83V6SHIicqB6SdvCnGSjsVmk0m41OuxyQFxMMQUBODD2vZqItT26KKib IJwQeJGWgTKMKOLPU9u1iX1N23HkkjsLgDL3iGJ2dhenlddpiZKjEH9d8cog67Pop8ya IaVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=XfDBqVtcFp4u69HfrPx2aYbk0EB30OybSYsl3oZkJuM=; b=E6nGJkacJU5g86dwbJfOTJD9+441V+Nd4gHTJnHCMfbTvVnukSUEkB8shdBO9ipZFp /9T/429IHdKt/cQDwxK9y2kmfw1yAiZvs5miyhdqsNkSADkzKAhpjApKX01mSWQtixJF 3N7yZtd9691FClELO8JxINjm0nEVGtmVGUQSqLJqOXyMACKR8s0MtibbGizqdWxMBlH7 CWtzEyWNiniai9lRnOL34gPYmvP75bUKFMbcHV+j6kECcooIXpc5btnguYXjKfjPEcV7 hXoCU8iCJPoA/efIQc7eclEySNu/g2/r1jxq6jJVKJUc9Yt/2ICTSyzsUim0N8URU8/D e50A== X-Gm-Message-State: AOAM531Q57pYFLN72GL6yU699t80P4Gk4uTQJl51g2LeDWeqZvigQTfl NR0v05W26QJb5JTUioiZ52naeZOzj70= X-Google-Smtp-Source: ABdhPJyNsyF+QKsLw5xWIuYAQyirE2pvNKWOgXfXkKdIn7klz0uBX4YKzYxA16T6/c6Z6HQZan+t2A== X-Received: by 2002:a05:6a00:7c8:: with SMTP id n8mr2455089pfu.123.1597289158079; Wed, 12 Aug 2020 20:25:58 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 14/17] crypto/builtin: Split and simplify AES_encrypt_cbc Date: Wed, 12 Aug 2020 20:25:34 -0700 Message-Id: <20200813032537.2888593-15-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::543; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x543.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Split into encrypt/decrypt functions, dropping the "enc" argument. Now that the function is private to this file, we know that "len" is a multiple of AES_BLOCK_SIZE. So drop the odd block size code. Name the functions do_aes_*crypt_cbc to match the *_ecb functions. Reorder and re-type the arguments to match as well. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-builtin.inc.c | 91 +++++++++++++++---------------------- 1 file changed, 36 insertions(+), 55 deletions(-) diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 416d44b38e..4295f93af5 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -100,61 +100,44 @@ static void do_aes_decrypt_ecb(const void *vctx, size= _t len, } } =20 -static void AES_cbc_encrypt(const unsigned char *in, unsigned char *out, - const unsigned long length, const AES_KEY *key, - unsigned char *ivec, const int enc) +static void do_aes_encrypt_cbc(const AES_KEY *key, size_t len, uint8_t *ou= t, + const uint8_t *in, uint8_t *ivec) { - unsigned long n; - unsigned long len =3D length; - unsigned char tmp[AES_BLOCK_SIZE]; + uint8_t tmp[AES_BLOCK_SIZE]; + size_t n; =20 - assert(in && out && key && ivec); - - if (enc) { - while (len >=3D AES_BLOCK_SIZE) { - for (n =3D 0; n < AES_BLOCK_SIZE; ++n) { - tmp[n] =3D in[n] ^ ivec[n]; - } - AES_encrypt(tmp, out, key); - memcpy(ivec, out, AES_BLOCK_SIZE); - len -=3D AES_BLOCK_SIZE; - in +=3D AES_BLOCK_SIZE; - out +=3D AES_BLOCK_SIZE; - } - if (len) { - for (n =3D 0; n < len; ++n) { - tmp[n] =3D in[n] ^ ivec[n]; - } - for (n =3D len; n < AES_BLOCK_SIZE; ++n) { - tmp[n] =3D ivec[n]; - } - AES_encrypt(tmp, tmp, key); - memcpy(out, tmp, AES_BLOCK_SIZE); - memcpy(ivec, tmp, AES_BLOCK_SIZE); - } - } else { - while (len >=3D AES_BLOCK_SIZE) { - memcpy(tmp, in, AES_BLOCK_SIZE); - AES_decrypt(in, out, key); - for (n =3D 0; n < AES_BLOCK_SIZE; ++n) { - out[n] ^=3D ivec[n]; - } - memcpy(ivec, tmp, AES_BLOCK_SIZE); - len -=3D AES_BLOCK_SIZE; - in +=3D AES_BLOCK_SIZE; - out +=3D AES_BLOCK_SIZE; - } - if (len) { - memcpy(tmp, in, AES_BLOCK_SIZE); - AES_decrypt(tmp, tmp, key); - for (n =3D 0; n < len; ++n) { - out[n] =3D tmp[n] ^ ivec[n]; - } - memcpy(ivec, tmp, AES_BLOCK_SIZE); + /* We have already verified that len % AES_BLOCK_SIZE =3D=3D 0. */ + while (len) { + for (n =3D 0; n < AES_BLOCK_SIZE; ++n) { + tmp[n] =3D in[n] ^ ivec[n]; } + AES_encrypt(tmp, out, key); + memcpy(ivec, out, AES_BLOCK_SIZE); + len -=3D AES_BLOCK_SIZE; + in +=3D AES_BLOCK_SIZE; + out +=3D AES_BLOCK_SIZE; } } =20 +static void do_aes_decrypt_cbc(const AES_KEY *key, size_t len, uint8_t *ou= t, + const uint8_t *in, uint8_t *ivec) +{ + uint8_t tmp[AES_BLOCK_SIZE]; + size_t n; + + /* We have already verified that len % AES_BLOCK_SIZE =3D=3D 0. */ + while (len) { + memcpy(tmp, in, AES_BLOCK_SIZE); + AES_decrypt(in, out, key); + for (n =3D 0; n < AES_BLOCK_SIZE; ++n) { + out[n] ^=3D ivec[n]; + } + memcpy(ivec, tmp, AES_BLOCK_SIZE); + len -=3D AES_BLOCK_SIZE; + in +=3D AES_BLOCK_SIZE; + out +=3D AES_BLOCK_SIZE; + } +} =20 static int qcrypto_cipher_encrypt_aes(QCryptoCipher *cipher, const void *in, @@ -170,9 +153,8 @@ static int qcrypto_cipher_encrypt_aes(QCryptoCipher *ci= pher, do_aes_encrypt_ecb(&ctxt->state.aes.key, len, out, in); break; case QCRYPTO_CIPHER_MODE_CBC: - AES_cbc_encrypt(in, out, len, - &ctxt->state.aes.key.enc, - ctxt->state.aes.iv, 1); + do_aes_encrypt_cbc(&ctxt->state.aes.key.enc, len, out, in, + ctxt->state.aes.iv); break; case QCRYPTO_CIPHER_MODE_XTS: xts_encrypt(&ctxt->state.aes.key, @@ -204,9 +186,8 @@ static int qcrypto_cipher_decrypt_aes(QCryptoCipher *ci= pher, do_aes_decrypt_ecb(&ctxt->state.aes.key, len, out, in); break; case QCRYPTO_CIPHER_MODE_CBC: - AES_cbc_encrypt(in, out, len, - &ctxt->state.aes.key.dec, - ctxt->state.aes.iv, 0); + do_aes_decrypt_cbc(&ctxt->state.aes.key.dec, len, out, in, + ctxt->state.aes.iv); break; case QCRYPTO_CIPHER_MODE_XTS: xts_decrypt(&ctxt->state.aes.key, --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289714; cv=none; d=zohomail.com; s=zohoarc; b=CtY+LFCkJcsges1p/4p9a77elIgmdvVIifcP0a9Kc6VkARCCzP+EAW0D4jAiTllJTqe0SV94+H3OsBFpbeA8S7pnI4ZVcBZ3bwZ7OzAv+MQNM8+YZBulsL5slyAoKiRgBKBJ5bsu4oZ3aJzzlsPy8PICi0KzUmDer81bIPA56II= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289714; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=A+gMRQZXs8yDCsRp3Iv+KQpO903wVtraFx+aBfJ8otI=; b=j+JZ4yibn797wbtIeGl5f8KWMXWiFaC0irIzl+mqQvcmwz/hKH6H3A/HDv4y+2YbI50eb4nH4R5+MVabDCVCMxQgXL6BKRayZhxpntLYqWZxHE0ectZ6MSsoT4WRBylSfaM01t1uH6DSNILACdrwuRx2slULBsDAvp1R2mb5wJg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289714356543.909265531334; Wed, 12 Aug 2020 20:35:14 -0700 (PDT) Received: from localhost ([::1]:48966 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k641J-0001Mf-6M for importer@patchew.org; Wed, 12 Aug 2020 23:35:13 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58684) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sR-0005K9-Lu for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:03 -0400 Received: from mail-pj1-x1044.google.com ([2607:f8b0:4864:20::1044]:39106) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sP-0000AV-4X for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:03 -0400 Received: by mail-pj1-x1044.google.com with SMTP id f9so2097628pju.4 for ; Wed, 12 Aug 2020 20:26:00 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=A+gMRQZXs8yDCsRp3Iv+KQpO903wVtraFx+aBfJ8otI=; b=NrwruQ4dfY6xLoaW5MFsdm0IkWyG5+VaokyEUIY2eO9oW4bFmXNJNuK9v8gGDep6Qg GAeUwk7TtVpzvQsFdiBCpmGEcPp8ca41E/uNaUhSW9BTvRyt10Qqh8VyHKtwvAHzj7Ds SfPwlHg5fsbVzdd9LHMDwd37nvQUNVJR5ffFIKYgMJf+1du0slhCyMZn6cS6mhTaehay AYoYoIcUt6UPJxkvK00MjTHoV0IkFfBPyQQEWIckHYl3QswzB/EyCKOvgP+iPN/0B/cy F8oy8gqqmIn5pqx3dZBk8PlRE8IgS5uaBR8CHRoBYmlIVOux/WRB7miLSir68fHDOT0g H+PQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=A+gMRQZXs8yDCsRp3Iv+KQpO903wVtraFx+aBfJ8otI=; b=WipXBaHi3sV0blihO7pSEbBedHLxPR3jDtqBwjSG5bV7m58Qqet+Zbv+zxbRhAth8e qiVCze8mXXopDp6tiirFDdF0p3zQNil+UtvPgziBY2QvsJWeanU1B38Aag6Mbnc6esQi 88iJil/I669N67Va8oCdtGVZo/bkSJExPzpra1D6PvpRbvv/yUFgQXj7Y7Ppj8Ylq7y7 A7kgWLlz+tQcRAbT7sUer/rOEIZGw8eiE2YO91ytdMAiKTvR0FPfJQDqI9bDuPGO2ccM HrpOygi/1S2epMQtxB10nkaZ8e2rV3U2vMd7b6hzrH+McjttLW44VV3wSZSKiS7QqiT0 i2NA== X-Gm-Message-State: AOAM531e22VwBzUAYYc37yrTTuxx601ThQEzlaiskCXjstxlKhfA1TTn 0OtLsCRVSVaO8qfVdgLPmUBW0ssCsl8= X-Google-Smtp-Source: ABdhPJzAI2wTyREQK0sJiS2lbcB+RUxx3N6WqDUw7vtBc0VFkFMAwcglQ0ClXGCnzknXOvKJTHBmIA== X-Received: by 2002:a17:902:8eca:: with SMTP id x10mr2225595plo.129.1597289159232; Wed, 12 Aug 2020 20:25:59 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 15/17] crypto/builtin: Split QCryptoCipherBuiltin into subclasses Date: Wed, 12 Aug 2020 20:25:35 -0700 Message-Id: <20200813032537.2888593-16-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1044; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1044.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" We had a second set of function pointers in QCryptoCipherBuiltin, which are redundant with QCryptoCipherDriver. Split the AES and DES implementations to avoid one level of indirection. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-builtin.inc.c | 553 +++++++++++++++--------------------- 1 file changed, 227 insertions(+), 326 deletions(-) diff --git a/crypto/cipher-builtin.inc.c b/crypto/cipher-builtin.inc.c index 4295f93af5..0da22784ec 100644 --- a/crypto/cipher-builtin.inc.c +++ b/crypto/cipher-builtin.inc.c @@ -22,56 +22,45 @@ #include "crypto/desrfb.h" #include "crypto/xts.h" =20 -static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver; - typedef struct QCryptoCipherBuiltinAESContext QCryptoCipherBuiltinAESConte= xt; struct QCryptoCipherBuiltinAESContext { AES_KEY enc; AES_KEY dec; }; + typedef struct QCryptoCipherBuiltinAES QCryptoCipherBuiltinAES; struct QCryptoCipherBuiltinAES { + QCryptoCipher base; QCryptoCipherBuiltinAESContext key; QCryptoCipherBuiltinAESContext key_tweak; uint8_t iv[AES_BLOCK_SIZE]; }; -typedef struct QCryptoCipherBuiltinDESRFB QCryptoCipherBuiltinDESRFB; -struct QCryptoCipherBuiltinDESRFB { - uint8_t *key; - size_t nkey; -}; - -typedef struct QCryptoCipherBuiltin QCryptoCipherBuiltin; -struct QCryptoCipherBuiltin { - QCryptoCipher base; - - union { - QCryptoCipherBuiltinAES aes; - QCryptoCipherBuiltinDESRFB desrfb; - } state; - size_t blocksize; - void (*free)(QCryptoCipher *cipher); - int (*setiv)(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp); - int (*encrypt)(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp); - int (*decrypt)(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp); -}; =20 =20 -static void qcrypto_cipher_free_aes(QCryptoCipher *cipher) +static inline bool qcrypto_length_check(size_t len, size_t blocksize, + Error **errp) +{ + if (unlikely(len & (blocksize - 1))) { + error_setg(errp, "Length %zu must be a multiple of block size %zu", + len, blocksize); + return false; + } + return true; +} + +static void qcrypto_cipher_ctx_free(QCryptoCipher *cipher) { g_free(cipher); } =20 +static int qcrypto_cipher_no_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) +{ + error_setg(errp, "Setting IV is not supported"); + return -1; +} + static void do_aes_encrypt_ecb(const void *vctx, size_t len, uint8_t *out, const uint8_t *in) { @@ -139,77 +128,100 @@ static void do_aes_decrypt_cbc(const AES_KEY *key, s= ize_t len, uint8_t *out, } } =20 -static int qcrypto_cipher_encrypt_aes(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int qcrypto_cipher_aes_encrypt_ecb(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); + QCryptoCipherBuiltinAES *ctx + =3D container_of(cipher, QCryptoCipherBuiltinAES, base); =20 - switch (cipher->mode) { - case QCRYPTO_CIPHER_MODE_ECB: - do_aes_encrypt_ecb(&ctxt->state.aes.key, len, out, in); - break; - case QCRYPTO_CIPHER_MODE_CBC: - do_aes_encrypt_cbc(&ctxt->state.aes.key.enc, len, out, in, - ctxt->state.aes.iv); - break; - case QCRYPTO_CIPHER_MODE_XTS: - xts_encrypt(&ctxt->state.aes.key, - &ctxt->state.aes.key_tweak, - do_aes_encrypt_ecb, - do_aes_decrypt_ecb, - ctxt->state.aes.iv, - len, out, in); - break; - default: - g_assert_not_reached(); + if (!qcrypto_length_check(len, AES_BLOCK_SIZE, errp)) { + return -1; } + do_aes_encrypt_ecb(&ctx->key, len, out, in); + return 0; +} =20 +static int qcrypto_cipher_aes_decrypt_ecb(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) +{ + QCryptoCipherBuiltinAES *ctx + =3D container_of(cipher, QCryptoCipherBuiltinAES, base); + + if (!qcrypto_length_check(len, AES_BLOCK_SIZE, errp)) { + return -1; + } + do_aes_decrypt_ecb(&ctx->key, len, out, in); + return 0; +} + +static int qcrypto_cipher_aes_encrypt_cbc(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) +{ + QCryptoCipherBuiltinAES *ctx + =3D container_of(cipher, QCryptoCipherBuiltinAES, base); + + if (!qcrypto_length_check(len, AES_BLOCK_SIZE, errp)) { + return -1; + } + do_aes_encrypt_cbc(&ctx->key.enc, len, out, in, ctx->iv); + return 0; +} + +static int qcrypto_cipher_aes_decrypt_cbc(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) +{ + QCryptoCipherBuiltinAES *ctx + =3D container_of(cipher, QCryptoCipherBuiltinAES, base); + + if (!qcrypto_length_check(len, AES_BLOCK_SIZE, errp)) { + return -1; + } + do_aes_decrypt_cbc(&ctx->key.dec, len, out, in, ctx->iv); + return 0; +} + +static int qcrypto_cipher_aes_encrypt_xts(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) +{ + QCryptoCipherBuiltinAES *ctx + =3D container_of(cipher, QCryptoCipherBuiltinAES, base); + + if (!qcrypto_length_check(len, AES_BLOCK_SIZE, errp)) { + return -1; + } + xts_encrypt(&ctx->key, &ctx->key_tweak, + do_aes_encrypt_ecb, do_aes_decrypt_ecb, + ctx->iv, len, out, in); + return 0; +} + +static int qcrypto_cipher_aes_decrypt_xts(QCryptoCipher *cipher, + const void *in, void *out, + size_t len, Error **errp) +{ + QCryptoCipherBuiltinAES *ctx + =3D container_of(cipher, QCryptoCipherBuiltinAES, base); + + if (!qcrypto_length_check(len, AES_BLOCK_SIZE, errp)) { + return -1; + } + xts_decrypt(&ctx->key, &ctx->key_tweak, + do_aes_encrypt_ecb, do_aes_decrypt_ecb, + ctx->iv, len, out, in); return 0; } =20 =20 -static int qcrypto_cipher_decrypt_aes(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) +static int qcrypto_cipher_aes_setiv(QCryptoCipher *cipher, const uint8_t *= iv, + size_t niv, Error **errp) { - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); - - switch (cipher->mode) { - case QCRYPTO_CIPHER_MODE_ECB: - do_aes_decrypt_ecb(&ctxt->state.aes.key, len, out, in); - break; - case QCRYPTO_CIPHER_MODE_CBC: - do_aes_decrypt_cbc(&ctxt->state.aes.key.dec, len, out, in, - ctxt->state.aes.iv); - break; - case QCRYPTO_CIPHER_MODE_XTS: - xts_decrypt(&ctxt->state.aes.key, - &ctxt->state.aes.key_tweak, - do_aes_encrypt_ecb, - do_aes_decrypt_ecb, - ctxt->state.aes.iv, - len, out, in); - break; - default: - g_assert_not_reached(); - } - - return 0; -} - -static int qcrypto_cipher_setiv_aes(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) -{ - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); + QCryptoCipherBuiltinAES *ctx + =3D container_of(cipher, QCryptoCipherBuiltinAES, base); =20 if (niv !=3D AES_BLOCK_SIZE) { error_setg(errp, "IV must be %d bytes not %zu", @@ -217,107 +229,53 @@ static int qcrypto_cipher_setiv_aes(QCryptoCipher *c= ipher, return -1; } =20 - memcpy(ctxt->state.aes.iv, iv, AES_BLOCK_SIZE); - + memcpy(ctx->iv, iv, AES_BLOCK_SIZE); return 0; } =20 +static const struct QCryptoCipherDriver qcrypto_cipher_aes_driver_ecb =3D { + .cipher_encrypt =3D qcrypto_cipher_aes_encrypt_ecb, + .cipher_decrypt =3D qcrypto_cipher_aes_decrypt_ecb, + .cipher_setiv =3D qcrypto_cipher_no_setiv, + .cipher_free =3D qcrypto_cipher_ctx_free, +}; + +static const struct QCryptoCipherDriver qcrypto_cipher_aes_driver_cbc =3D { + .cipher_encrypt =3D qcrypto_cipher_aes_encrypt_cbc, + .cipher_decrypt =3D qcrypto_cipher_aes_decrypt_cbc, + .cipher_setiv =3D qcrypto_cipher_aes_setiv, + .cipher_free =3D qcrypto_cipher_ctx_free, +}; + +static const struct QCryptoCipherDriver qcrypto_cipher_aes_driver_xts =3D { + .cipher_encrypt =3D qcrypto_cipher_aes_encrypt_xts, + .cipher_decrypt =3D qcrypto_cipher_aes_decrypt_xts, + .cipher_setiv =3D qcrypto_cipher_aes_setiv, + .cipher_free =3D qcrypto_cipher_ctx_free, +}; =20 =20 +typedef struct QCryptoCipherBuiltinDESRFB QCryptoCipherBuiltinDESRFB; +struct QCryptoCipherBuiltinDESRFB { + QCryptoCipher base; =20 -static QCryptoCipher * -qcrypto_cipher_init_aes(QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoCipherBuiltin *ctxt; - - if (mode !=3D QCRYPTO_CIPHER_MODE_CBC && - mode !=3D QCRYPTO_CIPHER_MODE_ECB && - mode !=3D QCRYPTO_CIPHER_MODE_XTS) { - error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_str(mode)); - return NULL; - } - - ctxt =3D g_new0(QCryptoCipherBuiltin, 1); - - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - if (AES_set_encrypt_key(key, nkey * 4, &ctxt->state.aes.key.enc) != =3D 0) { - error_setg(errp, "Failed to set encryption key"); - goto error; - } - - if (AES_set_decrypt_key(key, nkey * 4, &ctxt->state.aes.key.dec) != =3D 0) { - error_setg(errp, "Failed to set decryption key"); - goto error; - } - - if (AES_set_encrypt_key(key + (nkey / 2), nkey * 4, - &ctxt->state.aes.key_tweak.enc) !=3D 0) { - error_setg(errp, "Failed to set encryption key"); - goto error; - } - - if (AES_set_decrypt_key(key + (nkey / 2), nkey * 4, - &ctxt->state.aes.key_tweak.dec) !=3D 0) { - error_setg(errp, "Failed to set decryption key"); - goto error; - } - } else { - if (AES_set_encrypt_key(key, nkey * 8, &ctxt->state.aes.key.enc) != =3D 0) { - error_setg(errp, "Failed to set encryption key"); - goto error; - } - - if (AES_set_decrypt_key(key, nkey * 8, &ctxt->state.aes.key.dec) != =3D 0) { - error_setg(errp, "Failed to set decryption key"); - goto error; - } - } - - ctxt->blocksize =3D AES_BLOCK_SIZE; - ctxt->free =3D qcrypto_cipher_free_aes; - ctxt->setiv =3D qcrypto_cipher_setiv_aes; - ctxt->encrypt =3D qcrypto_cipher_encrypt_aes; - ctxt->decrypt =3D qcrypto_cipher_decrypt_aes; - - ctxt->base.driver =3D &qcrypto_cipher_lib_driver; - return &ctxt->base; - - error: - g_free(ctxt); - return NULL; -} - - -static void qcrypto_cipher_free_des_rfb(QCryptoCipher *cipher) -{ - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); - - g_free(ctxt->state.desrfb.key); - g_free(ctxt); -} - + /* C.f. alg_key_len[QCRYPTO_CIPHER_ALG_DES_RFB] */ + uint8_t key[8]; +}; =20 static int qcrypto_cipher_encrypt_des_rfb(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) + const void *in, void *out, + size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); + QCryptoCipherBuiltinDESRFB *ctx + =3D container_of(cipher, QCryptoCipherBuiltinDESRFB, base); size_t i; =20 - if (len % 8) { - error_setg(errp, "Buffer size must be multiple of 8 not %zu", - len); + if (!qcrypto_length_check(len, 8, errp)) { return -1; } =20 - deskey(ctxt->state.desrfb.key, EN0); + deskey(ctx->key, EN0); =20 for (i =3D 0; i < len; i +=3D 8) { des((void *)in + i, out + i); @@ -326,24 +284,19 @@ static int qcrypto_cipher_encrypt_des_rfb(QCryptoCiph= er *cipher, return 0; } =20 - static int qcrypto_cipher_decrypt_des_rfb(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) + const void *in, void *out, + size_t len, Error **errp) { - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); + QCryptoCipherBuiltinDESRFB *ctx + =3D container_of(cipher, QCryptoCipherBuiltinDESRFB, base); size_t i; =20 - if (len % 8) { - error_setg(errp, "Buffer size must be multiple of 8 not %zu", - len); + if (!qcrypto_length_check(len, 8, errp)) { return -1; } =20 - deskey(ctxt->state.desrfb.key, DE1); + deskey(ctx->key, DE1); =20 for (i =3D 0; i < len; i +=3D 8) { des((void *)in + i, out + i); @@ -352,173 +305,121 @@ static int qcrypto_cipher_decrypt_des_rfb(QCryptoCi= pher *cipher, return 0; } =20 - -static int qcrypto_cipher_setiv_des_rfb(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) -{ - error_setg(errp, "Setting IV is not supported"); - return -1; -} - - -static QCryptoCipher * -qcrypto_cipher_init_des_rfb(QCryptoCipherMode mode, - const uint8_t *key, size_t nkey, - Error **errp) -{ - QCryptoCipherBuiltin *ctxt; - - if (mode !=3D QCRYPTO_CIPHER_MODE_ECB) { - error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_str(mode)); - return NULL; - } - - ctxt =3D g_new0(QCryptoCipherBuiltin, 1); - - ctxt->state.desrfb.key =3D g_new0(uint8_t, nkey); - memcpy(ctxt->state.desrfb.key, key, nkey); - ctxt->state.desrfb.nkey =3D nkey; - - ctxt->blocksize =3D 8; - ctxt->free =3D qcrypto_cipher_free_des_rfb; - ctxt->setiv =3D qcrypto_cipher_setiv_des_rfb; - ctxt->encrypt =3D qcrypto_cipher_encrypt_des_rfb; - ctxt->decrypt =3D qcrypto_cipher_decrypt_des_rfb; - - ctxt->base.driver =3D &qcrypto_cipher_lib_driver; - return &ctxt->base; -} - +static const struct QCryptoCipherDriver qcrypto_cipher_des_rfb_driver =3D { + .cipher_encrypt =3D qcrypto_cipher_encrypt_des_rfb, + .cipher_decrypt =3D qcrypto_cipher_decrypt_des_rfb, + .cipher_setiv =3D qcrypto_cipher_no_setiv, + .cipher_free =3D qcrypto_cipher_ctx_free, +}; =20 bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode) { switch (alg) { case QCRYPTO_CIPHER_ALG_DES_RFB: + return mode =3D=3D QCRYPTO_CIPHER_MODE_ECB; case QCRYPTO_CIPHER_ALG_AES_128: case QCRYPTO_CIPHER_ALG_AES_192: case QCRYPTO_CIPHER_ALG_AES_256: + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + case QCRYPTO_CIPHER_MODE_CBC: + case QCRYPTO_CIPHER_MODE_XTS: + return true; + default: + return false; + } break; default: return false; } - - switch (mode) { - case QCRYPTO_CIPHER_MODE_ECB: - case QCRYPTO_CIPHER_MODE_CBC: - case QCRYPTO_CIPHER_MODE_XTS: - return true; - case QCRYPTO_CIPHER_MODE_CTR: - return false; - default: - return false; - } } =20 - static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, const uint8_t *key, size_t nkey, Error **errp) { - switch (mode) { - case QCRYPTO_CIPHER_MODE_ECB: - case QCRYPTO_CIPHER_MODE_CBC: - case QCRYPTO_CIPHER_MODE_XTS: - break; - default: - error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_str(mode)); - return NULL; - } - if (!qcrypto_cipher_validate_key_length(alg, mode, nkey, errp)) { return NULL; } =20 switch (alg) { case QCRYPTO_CIPHER_ALG_DES_RFB: - return qcrypto_cipher_init_des_rfb(mode, key, nkey, errp); + if (mode =3D=3D QCRYPTO_CIPHER_MODE_ECB) { + QCryptoCipherBuiltinDESRFB *ctx; + + ctx =3D g_new0(QCryptoCipherBuiltinDESRFB, 1); + ctx->base.driver =3D &qcrypto_cipher_des_rfb_driver; + memcpy(ctx->key, key, sizeof(ctx->key)); + + return &ctx->base; + } + goto bad_mode; + case QCRYPTO_CIPHER_ALG_AES_128: case QCRYPTO_CIPHER_ALG_AES_192: case QCRYPTO_CIPHER_ALG_AES_256: - return qcrypto_cipher_init_aes(mode, key, nkey, errp); + { + QCryptoCipherBuiltinAES *ctx; + const QCryptoCipherDriver *drv; + + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + drv =3D &qcrypto_cipher_aes_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + drv =3D &qcrypto_cipher_aes_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_XTS: + drv =3D &qcrypto_cipher_aes_driver_xts; + break; + default: + goto bad_mode; + } + + ctx =3D g_new0(QCryptoCipherBuiltinAES, 1); + ctx->base.driver =3D drv; + + if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { + nkey /=3D 2; + if (AES_set_encrypt_key(key + nkey, nkey * 8, + &ctx->key_tweak.enc)) { + error_setg(errp, "Failed to set encryption key"); + goto error; + } + if (AES_set_decrypt_key(key + nkey, nkey * 8, + &ctx->key_tweak.dec)) { + error_setg(errp, "Failed to set decryption key"); + goto error; + } + } + if (AES_set_encrypt_key(key, nkey * 8, &ctx->key.enc)) { + error_setg(errp, "Failed to set encryption key"); + goto error; + } + if (AES_set_decrypt_key(key, nkey * 8, &ctx->key.dec)) { + error_setg(errp, "Failed to set decryption key"); + goto error; + } + + return &ctx->base; + + error: + g_free(ctx); + return NULL; + } + default: error_setg(errp, "Unsupported cipher algorithm %s", QCryptoCipherAlgorithm_str(alg)); return NULL; } + + bad_mode: + error_setg(errp, "Unsupported cipher mode %s", + QCryptoCipherMode_str(mode)); + return NULL; } - -static void -qcrypto_builtin_cipher_ctx_free(QCryptoCipher *cipher) -{ - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); - - ctxt->free(cipher); -} - - -static int -qcrypto_builtin_cipher_encrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) -{ - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); - - if (len & (ctxt->blocksize - 1)) { - error_setg(errp, "Length %zu must be a multiple of block size %zu", - len, ctxt->blocksize); - return -1; - } - - return ctxt->encrypt(cipher, in, out, len, errp); -} - - -static int -qcrypto_builtin_cipher_decrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) -{ - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); - - if (len & (ctxt->blocksize - 1)) { - error_setg(errp, "Length %zu must be a multiple of block size %zu", - len, ctxt->blocksize); - return -1; - } - - return ctxt->decrypt(cipher, in, out, len, errp); -} - - -static int -qcrypto_builtin_cipher_setiv(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) -{ - QCryptoCipherBuiltin *ctxt - =3D container_of(cipher, QCryptoCipherBuiltin, base); - - return ctxt->setiv(cipher, iv, niv, errp); -} - - -static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { - .cipher_encrypt =3D qcrypto_builtin_cipher_encrypt, - .cipher_decrypt =3D qcrypto_builtin_cipher_decrypt, - .cipher_setiv =3D qcrypto_builtin_cipher_setiv, - .cipher_free =3D qcrypto_builtin_cipher_ctx_free, -}; --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289790; cv=none; d=zohomail.com; s=zohoarc; b=I+Opcl+2JWVG2zxK9SN7IEqk1w4nDfxjdYHeGvPLA1yr3KpAxEJpHRryn0TuyWHH3lQcXU5KN4s9NG79qyF50dwaDM/+xxQGJUhnGOLtfDx4Qwg7hq7RjoxOBKXIE9BRd14KvB4ZRY5EwUmxtXL0dY6wq0xEOaGE1w6lOIdSm2I= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289790; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QchneBl9TWix1N+ObvjtoFh5J1w2fPNIRVjlp3fdtNU=; b=CkSBbL1BGWSH4zer5JVUx4/18F+x2YZ5AeOWmEIwKfcytwKhGEj+yEkY+Bc01TN+8wtDz3aZQ2m9ab01Uxpu1AVX0WZhWhKZgHM+ARhAbdblVNSjDpIKZpdRlT/TfKdNy+0vbESn5HIR4efvDrFdQjsdLNR7lGLzyDprfWhuXHM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 159728979079513.391538664113; Wed, 12 Aug 2020 20:36:30 -0700 (PDT) Received: from localhost ([::1]:52942 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k642X-00034f-Bc for importer@patchew.org; Wed, 12 Aug 2020 23:36:29 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58740) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sZ-0005UJ-DO for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:12 -0400 Received: from mail-pg1-x52b.google.com ([2607:f8b0:4864:20::52b]:38317) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sR-0000Ah-PU for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:09 -0400 Received: by mail-pg1-x52b.google.com with SMTP id 128so2120102pgd.5 for ; Wed, 12 Aug 2020 20:26:03 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.25.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:25:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=QchneBl9TWix1N+ObvjtoFh5J1w2fPNIRVjlp3fdtNU=; b=lD4OP7YXFKrbGmhY+gXsoCZ8LJBnl2/ZPQ8GtFKqfb0df5Skr258zcq68jyehfuf4Q 2/D1ZAuTjZZX8wKuSaXSCCrnYv5ezouHV98i8I2BENQh0zRss/NhSBTj0LMxtNL99elt lURUc5eePjcKOiGXIBnT1hSQRFIH5b/Ngs+P0wvNVEAqTBFmRBDYeICNxZ2giLKaChql K2V6Eo7wPfQ/+tzmU0IUJO+EpSOJLFa3SCQst7YldIagoEGGBHjb3dpnWFkYXwL7F1+F c6kdNNYMXF5Y5BEtOBWhiZcY8yBBJOGCHLlTZlQLoAfaOUyweFRNn3rXjjCM7d5dkvDR OPnw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=QchneBl9TWix1N+ObvjtoFh5J1w2fPNIRVjlp3fdtNU=; b=qOU1owi0wwxi6mrfoCgacKJc7c8nsF0cUjtZWeQNgA5QLHbpa48+VBnTLKnsVx40jj B1UJ2uabs5JZ0Z/OV4owBQaCUA9eWMZHQ54moTJzYmMXnOLFAxcdyXmxg8ZKe32fJQtI Qe8wXxSlPrYuTa77vXNcx2x7TcYvDdMneJ1WPfFSNLj7j0djv5q6nYpt11dNxXUQuFRH PF/C0DRkkX+oxqZHbqLQ1AYxtAKYDzpye5/ZfSdLi5kydWq3G7R+RRXcdT9lQUfgfjYi Kmp0hOgI6OYxg8GZHgbnF9GAExwvF8vWTVlRvBrzAI3poOcKr0qOmJZur++hYY0p+7G4 SjhA== X-Gm-Message-State: AOAM533UOVzOkS9Qy/g8Haax9cM4jhsNZk7G0FeQoVcsepNkX95BnZek FNF3YJQtwmkJjLin2mPgmXU19Bx+0R0= X-Google-Smtp-Source: ABdhPJxZrWGct5L7UJ1Bv6AeVUNt66VoQIAN1OGqMaxIkujuejztQ93Mbps2TAW2VywUxytwfm2xzw== X-Received: by 2002:a62:d111:: with SMTP id z17mr2496717pfg.221.1597289160600; Wed, 12 Aug 2020 20:26:00 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 16/17] crypto/nettle: Split QCryptoCipherNettle into subclasses Date: Wed, 12 Aug 2020 20:25:36 -0700 Message-Id: <20200813032537.2888593-17-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::52b; envelope-from=richard.henderson@linaro.org; helo=mail-pg1-x52b.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" Use separate classes for each cipher entry point: des_rfb, des3, aes128, aes192, aes256, cast128, serpent, and twofish. Generate wrappers for XTS only for CONFIG_QEMU_PRIVATE_XTS. This eliminates unreachable wrappers for DES_RFB, DES3 and CAST128, which have blocksizes that do not allow XTS mode. Signed-off-by: Richard Henderson Reviewed-by: Daniel P. Berrang=C3=A9 Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-nettle.inc.c | 987 +++++++++++++++++++------------------ 1 file changed, 503 insertions(+), 484 deletions(-) diff --git a/crypto/cipher-nettle.inc.c b/crypto/cipher-nettle.inc.c index 36d57ef430..a1f4f6eac6 100644 --- a/crypto/cipher-nettle.inc.c +++ b/crypto/cipher-nettle.inc.c @@ -34,8 +34,6 @@ #include #endif =20 -static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver; - typedef void (*QCryptoCipherNettleFuncWrapper)(const void *ctx, size_t length, uint8_t *dst, @@ -75,62 +73,212 @@ typedef const void * cipher_ctx_t; typedef size_t cipher_length_t; #endif =20 -typedef struct QCryptoNettleAES128 { - struct aes128_ctx enc; - struct aes128_ctx dec; -} QCryptoNettleAES128; - -typedef struct QCryptoNettleAES192 { - struct aes192_ctx enc; - struct aes192_ctx dec; -} QCryptoNettleAES192; - -typedef struct QCryptoNettleAES256 { - struct aes256_ctx enc; - struct aes256_ctx dec; -} QCryptoNettleAES256; - -static void aes128_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, - uint8_t *dst, const uint8_t *src) +static inline bool qcrypto_length_check(size_t len, size_t blocksize, + Error **errp) { - const QCryptoNettleAES128 *aesctx =3D ctx; - aes128_encrypt(&aesctx->enc, length, dst, src); + if (unlikely(len & (blocksize - 1))) { + error_setg(errp, "Length %zu must be a multiple of block size %zu", + len, blocksize); + return false; + } + return true; } =20 -static void aes128_decrypt_native(cipher_ctx_t ctx, cipher_length_t length, - uint8_t *dst, const uint8_t *src) + +static void qcrypto_cipher_ctx_free(QCryptoCipher *ctx) { - const QCryptoNettleAES128 *aesctx =3D ctx; - aes128_decrypt(&aesctx->dec, length, dst, src); + g_free(ctx); } =20 -static void aes192_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, - uint8_t *dst, const uint8_t *src) +static int qcrypto_cipher_no_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) { - const QCryptoNettleAES192 *aesctx =3D ctx; - aes192_encrypt(&aesctx->enc, length, dst, src); + error_setg(errp, "Setting IV is not supported"); + return -1; } =20 -static void aes192_decrypt_native(cipher_ctx_t ctx, cipher_length_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES192 *aesctx =3D ctx; - aes192_decrypt(&aesctx->dec, length, dst, src); + +#define DEFINE_SETIV(NAME, TYPE, BLEN) \ +static int NAME##_setiv(QCryptoCipher *cipher, const uint8_t *iv, \ + size_t niv, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (niv !=3D BLEN) { \ + error_setg(errp, "Expected IV size %d not %zu", BLEN, niv); \ + return -1; \ + } \ + memcpy(ctx->iv, iv, niv); \ + return 0; \ } =20 -static void aes256_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES256 *aesctx =3D ctx; - aes256_encrypt(&aesctx->enc, length, dst, src); -} =20 -static void aes256_decrypt_native(cipher_ctx_t ctx, cipher_length_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES256 *aesctx =3D ctx; - aes256_decrypt(&aesctx->dec, length, dst, src); +#define DEFINE_ECB(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ +static int NAME##_encrypt_ecb(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + ENCRYPT(&ctx->key, len, out, in); \ + return 0; \ +} \ +static int NAME##_decrypt_ecb(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + DECRYPT(&ctx->key, len, out, in); \ + return 0; \ +} \ +static const struct QCryptoCipherDriver NAME##_driver_ecb =3D { \ + .cipher_encrypt =3D NAME##_encrypt_ecb, \ + .cipher_decrypt =3D NAME##_decrypt_ecb, \ + .cipher_setiv =3D qcrypto_cipher_no_setiv, \ + .cipher_free =3D qcrypto_cipher_ctx_free, \ +}; + + +#define DEFINE_CBC(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ +static int NAME##_encrypt_cbc(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + cbc_encrypt(&ctx->key, ENCRYPT, BLEN, ctx->iv, len, out, in); \ + return 0; \ +} \ +static int NAME##_decrypt_cbc(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + cbc_decrypt(&ctx->key, DECRYPT, BLEN, ctx->iv, len, out, in); \ + return 0; \ +} \ +static const struct QCryptoCipherDriver NAME##_driver_cbc =3D { \ + .cipher_encrypt =3D NAME##_encrypt_cbc, \ + .cipher_decrypt =3D NAME##_decrypt_cbc, \ + .cipher_setiv =3D NAME##_setiv, \ + .cipher_free =3D qcrypto_cipher_ctx_free, \ +}; + + +#define DEFINE_CTR(NAME, TYPE, BLEN, ENCRYPT) \ +static int NAME##_encrypt_ctr(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + ctr_crypt(&ctx->key, ENCRYPT, BLEN, ctx->iv, len, out, in); \ + return 0; \ +} \ +static const struct QCryptoCipherDriver NAME##_driver_ctr =3D { \ + .cipher_encrypt =3D NAME##_encrypt_ctr, \ + .cipher_decrypt =3D NAME##_encrypt_ctr, \ + .cipher_setiv =3D NAME##_setiv, \ + .cipher_free =3D qcrypto_cipher_ctx_free, \ +}; + + +#ifdef CONFIG_QEMU_PRIVATE_XTS +#define DEFINE__XTS(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ +static void NAME##_xts_wrape(const void *ctx, size_t length, \ + uint8_t *dst, const uint8_t *src) \ +{ \ + ENCRYPT(ctx, length, dst, src); \ +} \ +static void NAME##_xts_wrapd(const void *ctx, size_t length, \ + uint8_t *dst, const uint8_t *src) \ +{ \ + DECRYPT(ctx, length, dst, src); \ +} \ +static int NAME##_encrypt_xts(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + xts_encrypt(&ctx->key, &ctx->key_xts, \ + NAME##_xts_wrape, NAME##_xts_wrapd, \ + ctx->iv, len, out, in); \ + return 0; \ +} \ +static int NAME##_decrypt_xts(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + xts_decrypt(&ctx->key, &ctx->key_xts, \ + NAME##_xts_wrape, NAME##_xts_wrapd, \ + ctx->iv, len, out, in); \ + return 0; \ } +#else +#define DEFINE__XTS(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ +static int NAME##_encrypt_xts(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + xts_encrypt_message(&ctx->key, &ctx->key_xts, ENCRYPT, \ + ctx->iv, len, out, in); \ + return 0; \ +} \ +static int NAME##_decrypt_xts(QCryptoCipher *cipher, const void *in, \ + void *out, size_t len, Error **errp) \ +{ \ + TYPE *ctx =3D container_of(cipher, TYPE, base); \ + if (!qcrypto_length_check(len, BLEN, errp)) { \ + return -1; \ + } \ + xts_decrypt_message(&ctx->key, &ctx->key_xts, DECRYPT, ENCRYPT, \ + ctx->iv, len, out, in); \ + return 0; \ +} +#endif + +#define DEFINE_XTS(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ + QEMU_BUILD_BUG_ON(BLEN !=3D XTS_BLOCK_SIZE); \ + DEFINE__XTS(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ +static const struct QCryptoCipherDriver NAME##_driver_xts =3D { \ + .cipher_encrypt =3D NAME##_encrypt_xts, \ + .cipher_decrypt =3D NAME##_decrypt_xts, \ + .cipher_setiv =3D NAME##_setiv, \ + .cipher_free =3D qcrypto_cipher_ctx_free, \ +}; + + +#define DEFINE_ECB_CBC_CTR(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ + DEFINE_SETIV(NAME, TYPE, BLEN) \ + DEFINE_ECB(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ + DEFINE_CBC(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ + DEFINE_CTR(NAME, TYPE, BLEN, ENCRYPT) + +#define DEFINE_ECB_CBC_CTR_XTS(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ + DEFINE_ECB_CBC_CTR(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) \ + DEFINE_XTS(NAME, TYPE, BLEN, ENCRYPT, DECRYPT) + + +typedef struct QCryptoNettleDESRFB { + QCryptoCipher base; + struct des_ctx key; + uint8_t iv[DES_BLOCK_SIZE]; +} QCryptoNettleDESRFB; =20 static void des_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, uint8_t *dst, const uint8_t *src) @@ -144,6 +292,16 @@ static void des_decrypt_native(cipher_ctx_t ctx, ciphe= r_length_t length, des_decrypt(ctx, length, dst, src); } =20 +DEFINE_ECB_CBC_CTR(qcrypto_nettle_des_rfb, QCryptoNettleDESRFB, + DES_BLOCK_SIZE, des_encrypt_native, des_decrypt_native) + + +typedef struct QCryptoNettleDES3 { + QCryptoCipher base; + struct des3_ctx key; + uint8_t iv[DES3_BLOCK_SIZE]; +} QCryptoNettleDES3; + static void des3_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, uint8_t *dst, const uint8_t *src) { @@ -156,6 +314,94 @@ static void des3_decrypt_native(cipher_ctx_t ctx, ciph= er_length_t length, des3_decrypt(ctx, length, dst, src); } =20 +DEFINE_ECB_CBC_CTR(qcrypto_nettle_des3, QCryptoNettleDES3, DES3_BLOCK_SIZE, + des3_encrypt_native, des3_decrypt_native) + + +typedef struct QCryptoNettleAES128 { + QCryptoCipher base; + uint8_t iv[AES_BLOCK_SIZE]; + /* First key from pair is encode, second key is decode. */ + struct aes128_ctx key[2], key_xts[2]; +} QCryptoNettleAES128; + +static void aes128_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, + uint8_t *dst, const uint8_t *src) +{ + const struct aes128_ctx *keys =3D ctx; + aes128_encrypt(&keys[0], length, dst, src); +} + +static void aes128_decrypt_native(cipher_ctx_t ctx, cipher_length_t length, + uint8_t *dst, const uint8_t *src) +{ + const struct aes128_ctx *keys =3D ctx; + aes128_decrypt(&keys[1], length, dst, src); +} + +DEFINE_ECB_CBC_CTR_XTS(qcrypto_nettle_aes128, + QCryptoNettleAES128, AES_BLOCK_SIZE, + aes128_encrypt_native, aes128_decrypt_native) + + +typedef struct QCryptoNettleAES192 { + QCryptoCipher base; + uint8_t iv[AES_BLOCK_SIZE]; + /* First key from pair is encode, second key is decode. */ + struct aes192_ctx key[2], key_xts[2]; +} QCryptoNettleAES192; + +static void aes192_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, + uint8_t *dst, const uint8_t *src) +{ + const struct aes192_ctx *keys =3D ctx; + aes192_encrypt(&keys[0], length, dst, src); +} + +static void aes192_decrypt_native(cipher_ctx_t ctx, cipher_length_t length, + uint8_t *dst, const uint8_t *src) +{ + const struct aes192_ctx *keys =3D ctx; + aes192_decrypt(&keys[1], length, dst, src); +} + +DEFINE_ECB_CBC_CTR_XTS(qcrypto_nettle_aes192, + QCryptoNettleAES192, AES_BLOCK_SIZE, + aes192_encrypt_native, aes192_decrypt_native) + + +typedef struct QCryptoNettleAES256 { + QCryptoCipher base; + uint8_t iv[AES_BLOCK_SIZE]; + /* First key from pair is encode, second key is decode. */ + struct aes256_ctx key[2], key_xts[2]; +} QCryptoNettleAES256; + +static void aes256_encrypt_native(cipher_ctx_t ctx, cipher_length_t length, + uint8_t *dst, const uint8_t *src) +{ + const struct aes256_ctx *keys =3D ctx; + aes256_encrypt(&keys[0], length, dst, src); +} + +static void aes256_decrypt_native(cipher_ctx_t ctx, cipher_length_t length, + uint8_t *dst, const uint8_t *src) +{ + const struct aes256_ctx *keys =3D ctx; + aes256_decrypt(&keys[1], length, dst, src); +} + +DEFINE_ECB_CBC_CTR_XTS(qcrypto_nettle_aes256, + QCryptoNettleAES256, AES_BLOCK_SIZE, + aes256_encrypt_native, aes256_decrypt_native) + + +typedef struct QCryptoNettleCAST128 { + QCryptoCipher base; + uint8_t iv[CAST128_BLOCK_SIZE]; + struct cast128_ctx key, key_xts; +} QCryptoNettleCAST128; + static void cast128_encrypt_native(cipher_ctx_t ctx, cipher_length_t lengt= h, uint8_t *dst, const uint8_t *src) { @@ -168,6 +414,18 @@ static void cast128_decrypt_native(cipher_ctx_t ctx, c= ipher_length_t length, cast128_decrypt(ctx, length, dst, src); } =20 +DEFINE_ECB_CBC_CTR(qcrypto_nettle_cast128, + QCryptoNettleCAST128, CAST128_BLOCK_SIZE, + cast128_encrypt_native, cast128_decrypt_native) + + +typedef struct QCryptoNettleSerpent { + QCryptoCipher base; + uint8_t iv[SERPENT_BLOCK_SIZE]; + struct serpent_ctx key, key_xts; +} QCryptoNettleSerpent; + + static void serpent_encrypt_native(cipher_ctx_t ctx, cipher_length_t lengt= h, uint8_t *dst, const uint8_t *src) { @@ -180,6 +438,17 @@ static void serpent_decrypt_native(cipher_ctx_t ctx, c= ipher_length_t length, serpent_decrypt(ctx, length, dst, src); } =20 +DEFINE_ECB_CBC_CTR_XTS(qcrypto_nettle_serpent, + QCryptoNettleSerpent, SERPENT_BLOCK_SIZE, + serpent_encrypt_native, serpent_decrypt_native) + + +typedef struct QCryptoNettleTwofish { + QCryptoCipher base; + uint8_t iv[TWOFISH_BLOCK_SIZE]; + struct twofish_ctx key, key_xts; +} QCryptoNettleTwofish; + static void twofish_encrypt_native(cipher_ctx_t ctx, cipher_length_t lengt= h, uint8_t *dst, const uint8_t *src) { @@ -192,125 +461,10 @@ static void twofish_decrypt_native(cipher_ctx_t ctx,= cipher_length_t length, twofish_decrypt(ctx, length, dst, src); } =20 -static void aes128_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES128 *aesctx =3D ctx; - aes128_encrypt(&aesctx->enc, length, dst, src); -} +DEFINE_ECB_CBC_CTR_XTS(qcrypto_nettle_twofish, + QCryptoNettleTwofish, TWOFISH_BLOCK_SIZE, + twofish_encrypt_native, twofish_decrypt_native) =20 -static void aes128_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES128 *aesctx =3D ctx; - aes128_decrypt(&aesctx->dec, length, dst, src); -} - -static void aes192_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES192 *aesctx =3D ctx; - aes192_encrypt(&aesctx->enc, length, dst, src); -} - -static void aes192_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES192 *aesctx =3D ctx; - aes192_decrypt(&aesctx->dec, length, dst, src); -} - -static void aes256_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES256 *aesctx =3D ctx; - aes256_encrypt(&aesctx->enc, length, dst, src); -} - -static void aes256_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - const QCryptoNettleAES256 *aesctx =3D ctx; - aes256_decrypt(&aesctx->dec, length, dst, src); -} - -static void des_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - des_encrypt(ctx, length, dst, src); -} - -static void des_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - des_decrypt(ctx, length, dst, src); -} - -static void des3_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - des3_encrypt(ctx, length, dst, src); -} - -static void des3_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - des3_decrypt(ctx, length, dst, src); -} - -static void cast128_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - cast128_encrypt(ctx, length, dst, src); -} - -static void cast128_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - cast128_decrypt(ctx, length, dst, src); -} - -static void serpent_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - serpent_encrypt(ctx, length, dst, src); -} - -static void serpent_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - serpent_decrypt(ctx, length, dst, src); -} - -static void twofish_encrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - twofish_encrypt(ctx, length, dst, src); -} - -static void twofish_decrypt_wrapper(const void *ctx, size_t length, - uint8_t *dst, const uint8_t *src) -{ - twofish_decrypt(ctx, length, dst, src); -} - -typedef struct QCryptoCipherNettle QCryptoCipherNettle; -struct QCryptoCipherNettle { - QCryptoCipher base; - - /* Primary cipher context for all modes */ - void *ctx; - /* Second cipher context for XTS mode only */ - void *ctx_tweak; - /* Cipher callbacks for both contexts */ - QCryptoCipherNettleFuncNative alg_encrypt_native; - QCryptoCipherNettleFuncNative alg_decrypt_native; - QCryptoCipherNettleFuncWrapper alg_encrypt_wrapper; - QCryptoCipherNettleFuncWrapper alg_decrypt_wrapper; - /* Initialization vector or Counter */ - uint8_t *iv; - size_t blocksize; -}; =20 bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode) @@ -344,30 +498,12 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm a= lg, } } =20 - -static void -qcrypto_nettle_cipher_free_ctx(QCryptoCipherNettle *ctx) -{ - if (!ctx) { - return; - } - - g_free(ctx->iv); - g_free(ctx->ctx); - g_free(ctx->ctx_tweak); - g_free(ctx); -} - - static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, const uint8_t *key, size_t nkey, Error **errp) { - QCryptoCipherNettle *ctx; - uint8_t *rfbkey; - switch (mode) { case QCRYPTO_CIPHER_MODE_ECB: case QCRYPTO_CIPHER_MODE_CBC: @@ -375,6 +511,7 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCip= herAlgorithm alg, case QCRYPTO_CIPHER_MODE_CTR: break; default: + bad_cipher_mode: error_setg(errp, "Unsupported cipher mode %s", QCryptoCipherMode_str(mode)); return NULL; @@ -384,354 +521,236 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCrypt= oCipherAlgorithm alg, return NULL; } =20 - ctx =3D g_new0(QCryptoCipherNettle, 1); - switch (alg) { case QCRYPTO_CIPHER_ALG_DES_RFB: - ctx->ctx =3D g_new0(struct des_ctx, 1); - rfbkey =3D qcrypto_cipher_munge_des_rfb_key(key, nkey); - des_set_key(ctx->ctx, rfbkey); - g_free(rfbkey); + { + QCryptoNettleDESRFB *ctx; + const QCryptoCipherDriver *drv; + uint8_t *rfbkey; =20 - ctx->alg_encrypt_native =3D des_encrypt_native; - ctx->alg_decrypt_native =3D des_decrypt_native; - ctx->alg_encrypt_wrapper =3D des_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D des_decrypt_wrapper; + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + drv =3D &qcrypto_nettle_des_rfb_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + drv =3D &qcrypto_nettle_des_rfb_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + drv =3D &qcrypto_nettle_des_rfb_driver_ctr; + break; + default: + goto bad_cipher_mode; + } =20 - ctx->blocksize =3D DES_BLOCK_SIZE; - break; + ctx =3D g_new0(QCryptoNettleDESRFB, 1); + ctx->base.driver =3D drv; + + rfbkey =3D qcrypto_cipher_munge_des_rfb_key(key, nkey); + des_set_key(&ctx->key, rfbkey); + g_free(rfbkey); + + return &ctx->base; + } =20 case QCRYPTO_CIPHER_ALG_3DES: - ctx->ctx =3D g_new0(struct des3_ctx, 1); - des3_set_key(ctx->ctx, key); + { + QCryptoNettleDES3 *ctx; + const QCryptoCipherDriver *drv; =20 - ctx->alg_encrypt_native =3D des3_encrypt_native; - ctx->alg_decrypt_native =3D des3_decrypt_native; - ctx->alg_encrypt_wrapper =3D des3_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D des3_decrypt_wrapper; + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + drv =3D &qcrypto_nettle_des3_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + drv =3D &qcrypto_nettle_des3_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + drv =3D &qcrypto_nettle_des3_driver_ctr; + break; + default: + goto bad_cipher_mode; + } =20 - ctx->blocksize =3D DES3_BLOCK_SIZE; - break; + ctx =3D g_new0(QCryptoNettleDES3, 1); + ctx->base.driver =3D drv; + des3_set_key(&ctx->key, key); + return &ctx->base; + } =20 case QCRYPTO_CIPHER_ALG_AES_128: - ctx->ctx =3D g_new0(QCryptoNettleAES128, 1); + { + QCryptoNettleAES128 *ctx =3D g_new0(QCryptoNettleAES128, 1); =20 - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - ctx->ctx_tweak =3D g_new0(QCryptoNettleAES128, 1); + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + ctx->base.driver =3D &qcrypto_nettle_aes128_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + ctx->base.driver =3D &qcrypto_nettle_aes128_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + ctx->base.driver =3D &qcrypto_nettle_aes128_driver_ctr; + break; + case QCRYPTO_CIPHER_MODE_XTS: + ctx->base.driver =3D &qcrypto_nettle_aes128_driver_xts; + nkey /=3D 2; + aes128_set_encrypt_key(&ctx->key_xts[0], key + nkey); + aes128_set_decrypt_key(&ctx->key_xts[1], key + nkey); + break; + default: + g_assert_not_reached(); + } + aes128_set_encrypt_key(&ctx->key[0], key); + aes128_set_decrypt_key(&ctx->key[1], key); =20 - nkey /=3D 2; - aes128_set_encrypt_key(&((QCryptoNettleAES128 *)ctx->ctx)->enc, - key); - aes128_set_decrypt_key(&((QCryptoNettleAES128 *)ctx->ctx)->dec, - key); - - aes128_set_encrypt_key(&((QCryptoNettleAES128 *)ctx->ctx_tweak= )-> - enc, key + nkey); - aes128_set_decrypt_key(&((QCryptoNettleAES128 *)ctx->ctx_tweak= )-> - dec, key + nkey); - } else { - aes128_set_encrypt_key(&((QCryptoNettleAES128 *)ctx->ctx)->enc, - key); - aes128_set_decrypt_key(&((QCryptoNettleAES128 *)ctx->ctx)->dec, - key); + return &ctx->base; } =20 - ctx->alg_encrypt_native =3D aes128_encrypt_native; - ctx->alg_decrypt_native =3D aes128_decrypt_native; - ctx->alg_encrypt_wrapper =3D aes128_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D aes128_decrypt_wrapper; - - ctx->blocksize =3D AES_BLOCK_SIZE; - break; - case QCRYPTO_CIPHER_ALG_AES_192: - ctx->ctx =3D g_new0(QCryptoNettleAES192, 1); + { + QCryptoNettleAES192 *ctx =3D g_new0(QCryptoNettleAES192, 1); =20 - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - ctx->ctx_tweak =3D g_new0(QCryptoNettleAES192, 1); + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + ctx->base.driver =3D &qcrypto_nettle_aes192_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + ctx->base.driver =3D &qcrypto_nettle_aes192_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + ctx->base.driver =3D &qcrypto_nettle_aes192_driver_ctr; + break; + case QCRYPTO_CIPHER_MODE_XTS: + ctx->base.driver =3D &qcrypto_nettle_aes192_driver_xts; + nkey /=3D 2; + aes192_set_encrypt_key(&ctx->key_xts[0], key + nkey); + aes192_set_decrypt_key(&ctx->key_xts[1], key + nkey); + break; + default: + g_assert_not_reached(); + } + aes192_set_encrypt_key(&ctx->key[0], key); + aes192_set_decrypt_key(&ctx->key[1], key); =20 - nkey /=3D 2; - aes192_set_encrypt_key(&((QCryptoNettleAES192 *)ctx->ctx)->enc, - key); - aes192_set_decrypt_key(&((QCryptoNettleAES192 *)ctx->ctx)->dec, - key); - - aes192_set_encrypt_key(&((QCryptoNettleAES192 *)ctx->ctx_tweak= )-> - enc, key + nkey); - aes192_set_decrypt_key(&((QCryptoNettleAES192 *)ctx->ctx_tweak= )-> - dec, key + nkey); - } else { - aes192_set_encrypt_key(&((QCryptoNettleAES192 *)ctx->ctx)->enc, - key); - aes192_set_decrypt_key(&((QCryptoNettleAES192 *)ctx->ctx)->dec, - key); + return &ctx->base; } =20 - ctx->alg_encrypt_native =3D aes192_encrypt_native; - ctx->alg_decrypt_native =3D aes192_decrypt_native; - ctx->alg_encrypt_wrapper =3D aes192_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D aes192_decrypt_wrapper; - - ctx->blocksize =3D AES_BLOCK_SIZE; - break; - case QCRYPTO_CIPHER_ALG_AES_256: - ctx->ctx =3D g_new0(QCryptoNettleAES256, 1); + { + QCryptoNettleAES256 *ctx =3D g_new0(QCryptoNettleAES256, 1); =20 - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - ctx->ctx_tweak =3D g_new0(QCryptoNettleAES256, 1); + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + ctx->base.driver =3D &qcrypto_nettle_aes256_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + ctx->base.driver =3D &qcrypto_nettle_aes256_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + ctx->base.driver =3D &qcrypto_nettle_aes256_driver_ctr; + break; + case QCRYPTO_CIPHER_MODE_XTS: + ctx->base.driver =3D &qcrypto_nettle_aes256_driver_xts; + nkey /=3D 2; + aes256_set_encrypt_key(&ctx->key_xts[0], key + nkey); + aes256_set_decrypt_key(&ctx->key_xts[1], key + nkey); + break; + default: + g_assert_not_reached(); + } + aes256_set_encrypt_key(&ctx->key[0], key); + aes256_set_decrypt_key(&ctx->key[1], key); =20 - nkey /=3D 2; - aes256_set_encrypt_key(&((QCryptoNettleAES256 *)ctx->ctx)->enc, - key); - aes256_set_decrypt_key(&((QCryptoNettleAES256 *)ctx->ctx)->dec, - key); - - aes256_set_encrypt_key(&((QCryptoNettleAES256 *)ctx->ctx_tweak= )-> - enc, key + nkey); - aes256_set_decrypt_key(&((QCryptoNettleAES256 *)ctx->ctx_tweak= )-> - dec, key + nkey); - } else { - aes256_set_encrypt_key(&((QCryptoNettleAES256 *)ctx->ctx)->enc, - key); - aes256_set_decrypt_key(&((QCryptoNettleAES256 *)ctx->ctx)->dec, - key); + return &ctx->base; } =20 - ctx->alg_encrypt_native =3D aes256_encrypt_native; - ctx->alg_decrypt_native =3D aes256_decrypt_native; - ctx->alg_encrypt_wrapper =3D aes256_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D aes256_decrypt_wrapper; - - ctx->blocksize =3D AES_BLOCK_SIZE; - break; - case QCRYPTO_CIPHER_ALG_CAST5_128: - ctx->ctx =3D g_new0(struct cast128_ctx, 1); + { + QCryptoNettleCAST128 *ctx; + const QCryptoCipherDriver *drv; =20 - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - ctx->ctx_tweak =3D g_new0(struct cast128_ctx, 1); + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + drv =3D &qcrypto_nettle_cast128_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + drv =3D &qcrypto_nettle_cast128_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + drv =3D &qcrypto_nettle_cast128_driver_ctr; + break; + default: + goto bad_cipher_mode; + } =20 - nkey /=3D 2; - cast5_set_key(ctx->ctx, nkey, key); - cast5_set_key(ctx->ctx_tweak, nkey, key + nkey); - } else { - cast5_set_key(ctx->ctx, nkey, key); + ctx =3D g_new0(QCryptoNettleCAST128, 1); + ctx->base.driver =3D drv; + cast5_set_key(&ctx->key, nkey, key); + + return &ctx->base; } =20 - ctx->alg_encrypt_native =3D cast128_encrypt_native; - ctx->alg_decrypt_native =3D cast128_decrypt_native; - ctx->alg_encrypt_wrapper =3D cast128_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D cast128_decrypt_wrapper; - - ctx->blocksize =3D CAST128_BLOCK_SIZE; - break; - case QCRYPTO_CIPHER_ALG_SERPENT_128: case QCRYPTO_CIPHER_ALG_SERPENT_192: case QCRYPTO_CIPHER_ALG_SERPENT_256: - ctx->ctx =3D g_new0(struct serpent_ctx, 1); + { + QCryptoNettleSerpent *ctx =3D g_new0(QCryptoNettleSerpent, 1); =20 - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - ctx->ctx_tweak =3D g_new0(struct serpent_ctx, 1); + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + ctx->base.driver =3D &qcrypto_nettle_serpent_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + ctx->base.driver =3D &qcrypto_nettle_serpent_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + ctx->base.driver =3D &qcrypto_nettle_serpent_driver_ctr; + break; + case QCRYPTO_CIPHER_MODE_XTS: + ctx->base.driver =3D &qcrypto_nettle_serpent_driver_xts; + nkey /=3D 2; + serpent_set_key(&ctx->key_xts, nkey, key + nkey); + break; + default: + g_assert_not_reached(); + } + serpent_set_key(&ctx->key, nkey, key); =20 - nkey /=3D 2; - serpent_set_key(ctx->ctx, nkey, key); - serpent_set_key(ctx->ctx_tweak, nkey, key + nkey); - } else { - serpent_set_key(ctx->ctx, nkey, key); + return &ctx->base; } =20 - ctx->alg_encrypt_native =3D serpent_encrypt_native; - ctx->alg_decrypt_native =3D serpent_decrypt_native; - ctx->alg_encrypt_wrapper =3D serpent_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D serpent_decrypt_wrapper; - - ctx->blocksize =3D SERPENT_BLOCK_SIZE; - break; - case QCRYPTO_CIPHER_ALG_TWOFISH_128: case QCRYPTO_CIPHER_ALG_TWOFISH_192: case QCRYPTO_CIPHER_ALG_TWOFISH_256: - ctx->ctx =3D g_new0(struct twofish_ctx, 1); + { + QCryptoNettleTwofish *ctx =3D g_new0(QCryptoNettleTwofish, 1); =20 - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - ctx->ctx_tweak =3D g_new0(struct twofish_ctx, 1); + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + ctx->base.driver =3D &qcrypto_nettle_twofish_driver_ecb; + break; + case QCRYPTO_CIPHER_MODE_CBC: + ctx->base.driver =3D &qcrypto_nettle_twofish_driver_cbc; + break; + case QCRYPTO_CIPHER_MODE_CTR: + ctx->base.driver =3D &qcrypto_nettle_twofish_driver_ctr; + break; + case QCRYPTO_CIPHER_MODE_XTS: + ctx->base.driver =3D &qcrypto_nettle_twofish_driver_xts; + nkey /=3D 2; + twofish_set_key(&ctx->key_xts, nkey, key + nkey); + break; + default: + g_assert_not_reached(); + } + twofish_set_key(&ctx->key, nkey, key); =20 - nkey /=3D 2; - twofish_set_key(ctx->ctx, nkey, key); - twofish_set_key(ctx->ctx_tweak, nkey, key + nkey); - } else { - twofish_set_key(ctx->ctx, nkey, key); + return &ctx->base; } =20 - ctx->alg_encrypt_native =3D twofish_encrypt_native; - ctx->alg_decrypt_native =3D twofish_decrypt_native; - ctx->alg_encrypt_wrapper =3D twofish_encrypt_wrapper; - ctx->alg_decrypt_wrapper =3D twofish_decrypt_wrapper; - - ctx->blocksize =3D TWOFISH_BLOCK_SIZE; - break; - default: error_setg(errp, "Unsupported cipher algorithm %s", QCryptoCipherAlgorithm_str(alg)); - goto error; + return NULL; } - g_assert(is_power_of_2(ctx->blocksize)); - - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS && - ctx->blocksize !=3D XTS_BLOCK_SIZE) { - error_setg(errp, "Cipher block size %zu must equal XTS block size = %d", - ctx->blocksize, XTS_BLOCK_SIZE); - goto error; - } - - ctx->iv =3D g_new0(uint8_t, ctx->blocksize); - - ctx->base.driver =3D &qcrypto_cipher_lib_driver; - return &ctx->base; - - error: - qcrypto_nettle_cipher_free_ctx(ctx); - return NULL; } - - -static void -qcrypto_nettle_cipher_ctx_free(QCryptoCipher *cipher) -{ - QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); - - qcrypto_nettle_cipher_free_ctx(ctx); -} - - -static int -qcrypto_nettle_cipher_encrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) -{ - QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); - - if (len & (ctx->blocksize - 1)) { - error_setg(errp, "Length %zu must be a multiple of block size %zu", - len, ctx->blocksize); - return -1; - } - - switch (cipher->mode) { - case QCRYPTO_CIPHER_MODE_ECB: - ctx->alg_encrypt_wrapper(ctx->ctx, len, out, in); - break; - - case QCRYPTO_CIPHER_MODE_CBC: - cbc_encrypt(ctx->ctx, ctx->alg_encrypt_native, - ctx->blocksize, ctx->iv, - len, out, in); - break; - - case QCRYPTO_CIPHER_MODE_XTS: -#ifdef CONFIG_QEMU_PRIVATE_XTS - xts_encrypt(ctx->ctx, ctx->ctx_tweak, - ctx->alg_encrypt_wrapper, ctx->alg_decrypt_wrapper, - ctx->iv, len, out, in); -#else - xts_encrypt_message(ctx->ctx, ctx->ctx_tweak, - ctx->alg_encrypt_native, - ctx->iv, len, out, in); -#endif - break; - - case QCRYPTO_CIPHER_MODE_CTR: - ctr_crypt(ctx->ctx, ctx->alg_encrypt_native, - ctx->blocksize, ctx->iv, - len, out, in); - break; - - default: - error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_str(cipher->mode)); - return -1; - } - return 0; -} - - -static int -qcrypto_nettle_cipher_decrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) -{ - QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); - - if (len & (ctx->blocksize - 1)) { - error_setg(errp, "Length %zu must be a multiple of block size %zu", - len, ctx->blocksize); - return -1; - } - - switch (cipher->mode) { - case QCRYPTO_CIPHER_MODE_ECB: - ctx->alg_decrypt_wrapper(ctx->ctx, len, out, in); - break; - - case QCRYPTO_CIPHER_MODE_CBC: - cbc_decrypt(ctx->ctx, ctx->alg_decrypt_native, - ctx->blocksize, ctx->iv, - len, out, in); - break; - - case QCRYPTO_CIPHER_MODE_XTS: -#ifdef CONFIG_QEMU_PRIVATE_XTS - xts_decrypt(ctx->ctx, ctx->ctx_tweak, - ctx->alg_encrypt_wrapper, ctx->alg_decrypt_wrapper, - ctx->iv, len, out, in); -#else - xts_decrypt_message(ctx->ctx, ctx->ctx_tweak, - ctx->alg_decrypt_native, - ctx->alg_encrypt_native, - ctx->iv, len, out, in); -#endif - break; - case QCRYPTO_CIPHER_MODE_CTR: - ctr_crypt(ctx->ctx, ctx->alg_encrypt_native, - ctx->blocksize, ctx->iv, - len, out, in); - break; - - default: - error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_str(cipher->mode)); - return -1; - } - return 0; -} - -static int -qcrypto_nettle_cipher_setiv(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) -{ - QCryptoCipherNettle *ctx =3D container_of(cipher, QCryptoCipherNettle,= base); - - if (niv !=3D ctx->blocksize) { - error_setg(errp, "Expected IV size %zu not %zu", - ctx->blocksize, niv); - return -1; - } - memcpy(ctx->iv, iv, niv); - return 0; -} - - -static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { - .cipher_encrypt =3D qcrypto_nettle_cipher_encrypt, - .cipher_decrypt =3D qcrypto_nettle_cipher_decrypt, - .cipher_setiv =3D qcrypto_nettle_cipher_setiv, - .cipher_free =3D qcrypto_nettle_cipher_ctx_free, -}; --=20 2.25.1 From nobody Fri May 17 09:18:43 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=linaro.org ARC-Seal: i=1; a=rsa-sha256; t=1597289794; cv=none; d=zohomail.com; s=zohoarc; b=dzTeJjXJSWh+QYikUpVZOm531vJ8iZakTCUMihlgaXhl2+K6Aq8JPzbUkMGw02d8EVcgmCRZV7Xe5lCkijX7MSQU9RbikBgsfX8pMEPuB/dsA1IDGNg5Tadj2kwB+aleLPFncGFsPeIB1AFIFMUjV9b3tzQwy6Umui4xHzT89zQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1597289794; h=Content-Transfer-Encoding:Cc:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=WapXvFLvjsW5WLq7o3+vGvs0T+qx/dbyDx6c37+3X6A=; b=OmpFcBIfuCkS3H/4EY4ppH67FsV5to8vHhkcYlGErgk6i7vnmZwNjmrUFV6Q85T6dtW0VipPs91eaczMLcZFS6YllMBM4Obdye6RITf5YU0VNO5QBTQvgTYlSTeCYg6YCFb7dNdmZsBv+cttTEDxM2TEHPaTVQomyMQ4ceGoOKo= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1597289794068959.7153797542794; Wed, 12 Aug 2020 20:36:34 -0700 (PDT) Received: from localhost ([::1]:53212 helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1k642a-0003B7-SC for importer@patchew.org; Wed, 12 Aug 2020 23:36:32 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]:58722) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1k63sV-0005RF-QN for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:08 -0400 Received: from mail-pj1-x1043.google.com ([2607:f8b0:4864:20::1043]:34021) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.90_1) (envelope-from ) id 1k63sR-0000Aj-LC for qemu-devel@nongnu.org; Wed, 12 Aug 2020 23:26:07 -0400 Received: by mail-pj1-x1043.google.com with SMTP id c10so3674168pjn.1 for ; Wed, 12 Aug 2020 20:26:03 -0700 (PDT) Received: from localhost.localdomain ([71.212.141.89]) by smtp.gmail.com with ESMTPSA id m19sm3633164pgd.21.2020.08.12.20.26.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 12 Aug 2020 20:26:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=WapXvFLvjsW5WLq7o3+vGvs0T+qx/dbyDx6c37+3X6A=; b=ZWnQX6+Unu4KSIOy+asNs+nbpkhsIIy6ZioFIYiECiQ/F2367mEXcPCydfZ7WUcVrH YkmLceLBz5YgPymvve+d81m4aW2NAMdf1G42m9l5J68RdCpFKJVEZeLjHGmmkmbUT7Ob z02oNyY9XwpNy+rRMpvcATKenX00OvzWxS6zJW/6AH+vdNCmNo+YC/uU2RaVk3fIg2ED MYmeqtDUm2UDYCPqu37W/gjqWob/StAcMY8ye7E9pq8kmpsk4D7Yw2DFswDPU3vSCCjj Wcsg+T8em/L3tRQozxHImYd6GMADHiuV5nRl0cee9CQ7LaKXTBJaHQsrZi8g5lUmkOLe O3pA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=WapXvFLvjsW5WLq7o3+vGvs0T+qx/dbyDx6c37+3X6A=; b=WwYa7ErbezAQJDHbYRPR4JadzRJAkI88n8Sea9FtBPnubmtxHjVxHCcjYs4/D5nujk 2jCh36x9Vn/22NbNtA1wSsvUGFUJFp2Ii211/nSLJ0edmuoMg42871j3jzOyJrAu0ko/ lJPkF3HoomWwLZzyXwbbO4YgFIdNBz+rYpgiWrbk0338Te49ZhBDmVqr7q8k/dgdhtmi lnD++KkV2o6oJ2MMO3Ust/srIVryy8iiyyqtUBFw5Ruoo+QNWb/etF+WOj+f45EbDj+2 5gJiME5CAhIUaPey2IaPTll1S6aloNO7qVBc81R2vB/ubGnYoYsgd70Wkcl9u2OfwOk4 qZ8Q== X-Gm-Message-State: AOAM531jbfPtIXJ2IpZqruQ/ypyFMoVCM0O3HEgOTbHPa4P4I1pDVScw hJ/4cQS9dIXMoeJ1iZu9T19mZpk/pno= X-Google-Smtp-Source: ABdhPJwNjsU+uthOFCrImgeWUNKV//LE0yVhL+F1NjsaJkZl6s2iAcZEU1jJsvQIH0cFWZwVWTjIzQ== X-Received: by 2002:a17:902:a714:: with SMTP id w20mr2218553plq.8.1597289161730; Wed, 12 Aug 2020 20:26:01 -0700 (PDT) From: Richard Henderson To: qemu-devel@nongnu.org Subject: [PATCH 17/17] crypto/gcrypt: Split QCryptoCipherGcrypt into subclasses Date: Wed, 12 Aug 2020 20:25:37 -0700 Message-Id: <20200813032537.2888593-18-richard.henderson@linaro.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20200813032537.2888593-1-richard.henderson@linaro.org> References: <20200813032537.2888593-1-richard.henderson@linaro.org> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=2607:f8b0:4864:20::1043; envelope-from=richard.henderson@linaro.org; helo=mail-pj1-x1043.google.com X-detected-operating-system: by eggs.gnu.org: No matching host in p0f cache. That's all we know. X-Spam_score_int: -20 X-Spam_score: -2.1 X-Spam_bar: -- X-Spam_report: (-2.1 / 5.0 requ) BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: berrange@redhat.com Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: "Qemu-devel" X-ZohoMail-DKIM: pass (identity @linaro.org) Content-Type: text/plain; charset="utf-8" With gcrypt, most of the dispatch happens in the library, so there aren't many classes to create. However, we can still create separate dispatch for CTR mode, and for CONFIG_QEMU_PRIVATE_XTS, which avoids needing to check for these modes at runtime. Signed-off-by: Richard Henderson Tested-by: Philippe Mathieu-Daud=C3=A9 --- crypto/cipher-gcrypt.inc.c | 512 ++++++++++++++++++------------------- 1 file changed, 250 insertions(+), 262 deletions(-) diff --git a/crypto/cipher-gcrypt.inc.c b/crypto/cipher-gcrypt.inc.c index 7a1fbc9745..1f9d08a7fa 100644 --- a/crypto/cipher-gcrypt.inc.c +++ b/crypto/cipher-gcrypt.inc.c @@ -24,8 +24,6 @@ =20 #include =20 -static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver; - bool qcrypto_cipher_supports(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode) { @@ -57,36 +55,215 @@ bool qcrypto_cipher_supports(QCryptoCipherAlgorithm al= g, } } =20 -typedef struct QCryptoCipherGcrypt QCryptoCipherGcrypt; -struct QCryptoCipherGcrypt { +typedef struct QCryptoCipherGcrypt { QCryptoCipher base; gcry_cipher_hd_t handle; size_t blocksize; #ifdef CONFIG_QEMU_PRIVATE_XTS gcry_cipher_hd_t tweakhandle; - /* Initialization vector or Counter */ - uint8_t *iv; + uint8_t iv[XTS_BLOCK_SIZE]; #endif -}; +} QCryptoCipherGcrypt; =20 -static void -qcrypto_gcrypt_cipher_free_ctx(QCryptoCipherGcrypt *ctx, - QCryptoCipherMode mode) + +static void qcrypto_gcrypt_ctx_free(QCryptoCipher *cipher) { - if (!ctx) { - return; - } + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); =20 gcry_cipher_close(ctx->handle); -#ifdef CONFIG_QEMU_PRIVATE_XTS - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - gcry_cipher_close(ctx->tweakhandle); - } - g_free(ctx->iv); -#endif g_free(ctx); } =20 +static int qcrypto_gcrypt_encrypt(QCryptoCipher *cipher, const void *in, + void *out, size_t len, Error **errp) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + gcry_error_t err; + + if (len & (ctx->blocksize - 1)) { + error_setg(errp, "Length %zu must be a multiple of block size %zu", + len, ctx->blocksize); + return -1; + } + + err =3D gcry_cipher_encrypt(ctx->handle, out, len, in, len); + if (err !=3D 0) { + error_setg(errp, "Cannot encrypt data: %s", gcry_strerror(err)); + return -1; + } + + return 0; +} + + +static int qcrypto_gcrypt_decrypt(QCryptoCipher *cipher, const void *in, + void *out, size_t len, Error **errp) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + gcry_error_t err; + + if (len & (ctx->blocksize - 1)) { + error_setg(errp, "Length %zu must be a multiple of block size %zu", + len, ctx->blocksize); + return -1; + } + + err =3D gcry_cipher_decrypt(ctx->handle, out, len, in, len); + if (err !=3D 0) { + error_setg(errp, "Cannot decrypt data: %s", + gcry_strerror(err)); + return -1; + } + + return 0; +} + +static int qcrypto_gcrypt_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + gcry_error_t err; + + if (niv !=3D ctx->blocksize) { + error_setg(errp, "Expected IV size %zu not %zu", + ctx->blocksize, niv); + return -1; + } + + gcry_cipher_reset(ctx->handle); + err =3D gcry_cipher_setiv(ctx->handle, iv, niv); + if (err !=3D 0) { + error_setg(errp, "Cannot set IV: %s", gcry_strerror(err)); + return -1; + } + + return 0; +} + +static int qcrypto_gcrypt_ctr_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + gcry_error_t err; + + if (niv !=3D ctx->blocksize) { + error_setg(errp, "Expected IV size %zu not %zu", + ctx->blocksize, niv); + return -1; + } + + err =3D gcry_cipher_setctr(ctx->handle, iv, niv); + if (err !=3D 0) { + error_setg(errp, "Cannot set Counter: %s", gcry_strerror(err)); + return -1; + } + + return 0; +} + + +static const struct QCryptoCipherDriver qcrypto_gcrypt_driver =3D { + .cipher_encrypt =3D qcrypto_gcrypt_encrypt, + .cipher_decrypt =3D qcrypto_gcrypt_decrypt, + .cipher_setiv =3D qcrypto_gcrypt_setiv, + .cipher_free =3D qcrypto_gcrypt_ctx_free, +}; + +static const struct QCryptoCipherDriver qcrypto_gcrypt_ctr_driver =3D { + .cipher_encrypt =3D qcrypto_gcrypt_encrypt, + .cipher_decrypt =3D qcrypto_gcrypt_decrypt, + .cipher_setiv =3D qcrypto_gcrypt_ctr_setiv, + .cipher_free =3D qcrypto_gcrypt_ctx_free, +}; + +#ifdef CONFIG_QEMU_PRIVATE_XTS +static void qcrypto_gcrypt_xts_ctx_free(QCryptoCipher *cipher) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + + gcry_cipher_close(ctx->tweakhandle); + qcrypto_gcrypt_ctx_free(cipher); +} + +static void qcrypto_gcrypt_xts_wrape(const void *ctx, size_t length, + uint8_t *dst, const uint8_t *src) +{ + gcry_error_t err; + err =3D gcry_cipher_encrypt((gcry_cipher_hd_t)ctx, dst, length, src, l= ength); + g_assert(err =3D=3D 0); +} + +static void qcrypto_gcrypt_xts_wrapd(const void *ctx, size_t length, + uint8_t *dst, const uint8_t *src) +{ + gcry_error_t err; + err =3D gcry_cipher_decrypt((gcry_cipher_hd_t)ctx, dst, length, src, l= ength); + g_assert(err =3D=3D 0); +} + +static int qcrypto_gcrypt_xts_encrypt(QCryptoCipher *cipher, const void *i= n, + void *out, size_t len, Error **errp) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + gcry_error_t err; + + if (len & (ctx->blocksize - 1)) { + error_setg(errp, "Length %zu must be a multiple of block size %zu", + len, ctx->blocksize); + return -1; + } + + xts_encrypt(ctx->handle, ctx->tweakhandle, + qcrypto_gcrypt_xts_wrape, qcrypto_gcrypt_xts_wrapd, + ctx->iv, len, out, in); + return 0; +} + +static int qcrypto_gcrypt_xts_decrypt(QCryptoCipher *cipher, const void *i= n, + void *out, size_t len, Error **errp) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + gcry_error_t err; + + if (len & (ctx->blocksize - 1)) { + error_setg(errp, "Length %zu must be a multiple of block size %zu", + len, ctx->blocksize); + return -1; + } + + xts_decrypt(ctx->handle, ctx->tweakhandle, + qcrypto_gcrypt_xts_encrypt, qcrypto_gcrypt_xts_decrypt, + ctx->iv, len, out, in); + return 0; +} + +static int qcrypto_gcrypt_xts_setiv(QCryptoCipher *cipher, + const uint8_t *iv, size_t niv, + Error **errp) +{ + QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); + gcry_error_t err; + + if (niv !=3D ctx->blocksize) { + error_setg(errp, "Expected IV size %zu not %zu", + ctx->blocksize, niv); + return -1; + } + + memcpy(ctx->iv, iv, niv); + return 0; +} + +static const struct QCryptoCipherDriver qcrypto_gcrypt_xts_driver =3D { + .cipher_encrypt =3D qcrypto_gcrypt_xts_encrypt, + .cipher_decrypt =3D qcrypto_gcrypt_xts_decrypt, + .cipher_setiv =3D qcrypto_gcrypt_xts_setiv, + .cipher_free =3D qcrypto_gcrypt_xts_ctx_free, +}; +#endif /* CONFIG_QEMU_PRIVATE_XTS */ + =20 static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCipherAlgorithm alg, QCryptoCipherMode mode, @@ -95,32 +272,10 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoCi= pherAlgorithm alg, Error **errp) { QCryptoCipherGcrypt *ctx; + const QCryptoCipherDriver *drv; gcry_error_t err; int gcryalg, gcrymode; =20 - switch (mode) { - case QCRYPTO_CIPHER_MODE_ECB: - gcrymode =3D GCRY_CIPHER_MODE_ECB; - break; - case QCRYPTO_CIPHER_MODE_XTS: -#ifdef CONFIG_QEMU_PRIVATE_XTS - gcrymode =3D GCRY_CIPHER_MODE_ECB; -#else - gcrymode =3D GCRY_CIPHER_MODE_XTS; -#endif - break; - case QCRYPTO_CIPHER_MODE_CBC: - gcrymode =3D GCRY_CIPHER_MODE_CBC; - break; - case QCRYPTO_CIPHER_MODE_CTR: - gcrymode =3D GCRY_CIPHER_MODE_CTR; - break; - default: - error_setg(errp, "Unsupported cipher mode %s", - QCryptoCipherMode_str(mode)); - return NULL; - } - if (!qcrypto_cipher_validate_key_length(alg, mode, nkey, errp)) { return NULL; } @@ -129,68 +284,92 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCryptoC= ipherAlgorithm alg, case QCRYPTO_CIPHER_ALG_DES_RFB: gcryalg =3D GCRY_CIPHER_DES; break; - case QCRYPTO_CIPHER_ALG_3DES: gcryalg =3D GCRY_CIPHER_3DES; break; - case QCRYPTO_CIPHER_ALG_AES_128: gcryalg =3D GCRY_CIPHER_AES128; break; - case QCRYPTO_CIPHER_ALG_AES_192: gcryalg =3D GCRY_CIPHER_AES192; break; - case QCRYPTO_CIPHER_ALG_AES_256: gcryalg =3D GCRY_CIPHER_AES256; break; - case QCRYPTO_CIPHER_ALG_CAST5_128: gcryalg =3D GCRY_CIPHER_CAST5; break; - case QCRYPTO_CIPHER_ALG_SERPENT_128: gcryalg =3D GCRY_CIPHER_SERPENT128; break; - case QCRYPTO_CIPHER_ALG_SERPENT_192: gcryalg =3D GCRY_CIPHER_SERPENT192; break; - case QCRYPTO_CIPHER_ALG_SERPENT_256: gcryalg =3D GCRY_CIPHER_SERPENT256; break; - case QCRYPTO_CIPHER_ALG_TWOFISH_128: gcryalg =3D GCRY_CIPHER_TWOFISH128; break; - case QCRYPTO_CIPHER_ALG_TWOFISH_256: gcryalg =3D GCRY_CIPHER_TWOFISH; break; - default: error_setg(errp, "Unsupported cipher algorithm %s", QCryptoCipherAlgorithm_str(alg)); return NULL; } =20 + drv =3D &qcrypto_gcrypt_driver; + switch (mode) { + case QCRYPTO_CIPHER_MODE_ECB: + gcrymode =3D GCRY_CIPHER_MODE_ECB; + break; + case QCRYPTO_CIPHER_MODE_XTS: +#ifdef CONFIG_QEMU_PRIVATE_XTS + drv =3D &qcrypto_gcrypt_xts_driver; + gcrymode =3D GCRY_CIPHER_MODE_ECB; +#else + gcrymode =3D GCRY_CIPHER_MODE_XTS; +#endif + break; + case QCRYPTO_CIPHER_MODE_CBC: + gcrymode =3D GCRY_CIPHER_MODE_CBC; + break; + case QCRYPTO_CIPHER_MODE_CTR: + drv =3D &qcrypto_gcrypt_ctr_driver; + gcrymode =3D GCRY_CIPHER_MODE_CTR; + break; + default: + error_setg(errp, "Unsupported cipher mode %s", + QCryptoCipherMode_str(mode)); + return NULL; + } + ctx =3D g_new0(QCryptoCipherGcrypt, 1); + ctx->base.driver =3D drv; =20 err =3D gcry_cipher_open(&ctx->handle, gcryalg, gcrymode, 0); if (err !=3D 0) { error_setg(errp, "Cannot initialize cipher: %s", gcry_strerror(err)); - goto error; + goto error1; } + ctx->blocksize =3D gcry_cipher_get_algo_blklen(gcryalg); + #ifdef CONFIG_QEMU_PRIVATE_XTS if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { + if (ctx->blocksize !=3D XTS_BLOCK_SIZE) { + error_setg(errp, + "Cipher block size %zu must equal XTS block size %d= ", + blocksize, XTS_BLOCK_SIZE); + goto error2; + } err =3D gcry_cipher_open(&ctx->tweakhandle, gcryalg, gcrymode, 0); if (err !=3D 0) { error_setg(errp, "Cannot initialize cipher: %s", gcry_strerror(err)); - goto error; + goto error2; } } #endif @@ -203,224 +382,33 @@ static QCryptoCipher *qcrypto_cipher_ctx_new(QCrypto= CipherAlgorithm alg, uint8_t *rfbkey =3D qcrypto_cipher_munge_des_rfb_key(key, nkey); err =3D gcry_cipher_setkey(ctx->handle, rfbkey, nkey); g_free(rfbkey); - ctx->blocksize =3D 8; } else { #ifdef CONFIG_QEMU_PRIVATE_XTS if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { nkey /=3D 2; - err =3D gcry_cipher_setkey(ctx->handle, key, nkey); - if (err !=3D 0) { - error_setg(errp, "Cannot set key: %s", - gcry_strerror(err)); - goto error; - } err =3D gcry_cipher_setkey(ctx->tweakhandle, key + nkey, nkey); - } else { -#endif - err =3D gcry_cipher_setkey(ctx->handle, key, nkey); -#ifdef CONFIG_QEMU_PRIVATE_XTS + if (err !=3D 0) { + error_setg(errp, "Cannot set key: %s", gcry_strerror(err)); + goto error3; + } } #endif - if (err !=3D 0) { - error_setg(errp, "Cannot set key: %s", - gcry_strerror(err)); - goto error; - } - switch (alg) { - case QCRYPTO_CIPHER_ALG_AES_128: - case QCRYPTO_CIPHER_ALG_AES_192: - case QCRYPTO_CIPHER_ALG_AES_256: - case QCRYPTO_CIPHER_ALG_SERPENT_128: - case QCRYPTO_CIPHER_ALG_SERPENT_192: - case QCRYPTO_CIPHER_ALG_SERPENT_256: - case QCRYPTO_CIPHER_ALG_TWOFISH_128: - case QCRYPTO_CIPHER_ALG_TWOFISH_256: - ctx->blocksize =3D 16; - break; - case QCRYPTO_CIPHER_ALG_3DES: - case QCRYPTO_CIPHER_ALG_CAST5_128: - ctx->blocksize =3D 8; - break; - default: - g_assert_not_reached(); - } + err =3D gcry_cipher_setkey(ctx->handle, key, nkey); } - g_assert(is_power_of_2(ctx->blocksize)); - -#ifdef CONFIG_QEMU_PRIVATE_XTS - if (mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - if (ctx->blocksize !=3D XTS_BLOCK_SIZE) { - error_setg(errp, - "Cipher block size %zu must equal XTS block size %d= ", - ctx->blocksize, XTS_BLOCK_SIZE); - goto error; - } - ctx->iv =3D g_new0(uint8_t, ctx->blocksize); + if (err !=3D 0) { + error_setg(errp, "Cannot set key: %s", gcry_strerror(err)); + goto error3; } -#endif =20 - ctx->base.driver =3D &qcrypto_cipher_lib_driver; return &ctx->base; =20 - error: - qcrypto_gcrypt_cipher_free_ctx(ctx, mode); + error3: +#ifdef CONFIG_QEMU_PRIVATE_XTS + gcry_cipher_close(ctx->tweakhandle); + error2: +#endif + gcry_cipher_close(ctx->handle); + error1: + g_free(ctx); return NULL; } - - -static void -qcrypto_gcrypt_cipher_ctx_free(QCryptoCipher *cipher) -{ - QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); - - qcrypto_gcrypt_cipher_free_ctx(ctx, cipher->mode); -} - - -#ifdef CONFIG_QEMU_PRIVATE_XTS -static void qcrypto_gcrypt_xts_encrypt(const void *ctx, - size_t length, - uint8_t *dst, - const uint8_t *src) -{ - gcry_error_t err; - err =3D gcry_cipher_encrypt((gcry_cipher_hd_t)ctx, dst, length, src, l= ength); - g_assert(err =3D=3D 0); -} - -static void qcrypto_gcrypt_xts_decrypt(const void *ctx, - size_t length, - uint8_t *dst, - const uint8_t *src) -{ - gcry_error_t err; - err =3D gcry_cipher_decrypt((gcry_cipher_hd_t)ctx, dst, length, src, l= ength); - g_assert(err =3D=3D 0); -} -#endif - -static int -qcrypto_gcrypt_cipher_encrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) -{ - QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); - gcry_error_t err; - - if (len & (ctx->blocksize - 1)) { - error_setg(errp, "Length %zu must be a multiple of block size %zu", - len, ctx->blocksize); - return -1; - } - -#ifdef CONFIG_QEMU_PRIVATE_XTS - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - xts_encrypt(ctx->handle, ctx->tweakhandle, - qcrypto_gcrypt_xts_encrypt, - qcrypto_gcrypt_xts_decrypt, - ctx->iv, len, out, in); - return 0; - } -#endif - - err =3D gcry_cipher_encrypt(ctx->handle, - out, len, - in, len); - if (err !=3D 0) { - error_setg(errp, "Cannot encrypt data: %s", - gcry_strerror(err)); - return -1; - } - - return 0; -} - - -static int -qcrypto_gcrypt_cipher_decrypt(QCryptoCipher *cipher, - const void *in, - void *out, - size_t len, - Error **errp) -{ - QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); - gcry_error_t err; - - if (len & (ctx->blocksize - 1)) { - error_setg(errp, "Length %zu must be a multiple of block size %zu", - len, ctx->blocksize); - return -1; - } - -#ifdef CONFIG_QEMU_PRIVATE_XTS - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_XTS) { - xts_decrypt(ctx->handle, ctx->tweakhandle, - qcrypto_gcrypt_xts_encrypt, - qcrypto_gcrypt_xts_decrypt, - ctx->iv, len, out, in); - return 0; - } -#endif - - err =3D gcry_cipher_decrypt(ctx->handle, - out, len, - in, len); - if (err !=3D 0) { - error_setg(errp, "Cannot decrypt data: %s", - gcry_strerror(err)); - return -1; - } - - return 0; -} - -static int -qcrypto_gcrypt_cipher_setiv(QCryptoCipher *cipher, - const uint8_t *iv, size_t niv, - Error **errp) -{ - QCryptoCipherGcrypt *ctx =3D container_of(cipher, QCryptoCipherGcrypt,= base); - gcry_error_t err; - - if (niv !=3D ctx->blocksize) { - error_setg(errp, "Expected IV size %zu not %zu", - ctx->blocksize, niv); - return -1; - } - -#ifdef CONFIG_QEMU_PRIVATE_XTS - if (ctx->iv) { - memcpy(ctx->iv, iv, niv); - return 0; - } -#endif - - if (cipher->mode =3D=3D QCRYPTO_CIPHER_MODE_CTR) { - err =3D gcry_cipher_setctr(ctx->handle, iv, niv); - if (err !=3D 0) { - error_setg(errp, "Cannot set Counter: %s", - gcry_strerror(err)); - return -1; - } - } else { - gcry_cipher_reset(ctx->handle); - err =3D gcry_cipher_setiv(ctx->handle, iv, niv); - if (err !=3D 0) { - error_setg(errp, "Cannot set IV: %s", - gcry_strerror(err)); - return -1; - } - } - - return 0; -} - - -static const struct QCryptoCipherDriver qcrypto_cipher_lib_driver =3D { - .cipher_encrypt =3D qcrypto_gcrypt_cipher_encrypt, - .cipher_decrypt =3D qcrypto_gcrypt_cipher_decrypt, - .cipher_setiv =3D qcrypto_gcrypt_cipher_setiv, - .cipher_free =3D qcrypto_gcrypt_cipher_ctx_free, -}; --=20 2.25.1