From patchwork Thu Dec 9 08:52:41 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666069 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 65EAFC433F5 for ; Thu, 9 Dec 2021 08:52:59 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235298AbhLII4a (ORCPT ); Thu, 9 Dec 2021 03:56:30 -0500 Received: from mail-am6eur05on2067.outbound.protection.outlook.com ([40.107.22.67]:2017 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235264AbhLII42 (ORCPT ); Thu, 9 Dec 2021 03:56:28 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MSe9ElfdUMVT+DXUHf9Q5F7JUCvDvo7dBVYsPMRZHlNWZiD4sAHYcZbd6SwZ2Sy5MOOa2gZlayqhWTxZhydPZnpEJRjpDXV38kgLYQtx0pcr3hseI5docm+PIaDmN2wQKH1/HGA/9FT/fPhA2YGTgBTCjsf8zNpi2Rn5a54+a9mY2UFyTSW94xU76EGLC8ujS6RtgIZcfo2ieiF+g6f5kIpqIpU4D/+fypoEyiQ8lggPluRkh3PxGaDvhQF71Wl9ZmxGw9PAiQakOFGzu+PuL/33hsbMwPkcyxIAPAnpyZZKTZT1rBDzK0kyc2z2HHg66RR1GNCMwWjvzLruv+ReQw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=48OAVczOPeEXT4UjekR2QYNoE/zGnjRZkD7iPTlopcA=; b=O1iyO8fwIwb1FtxvHzhInExynJg4etWCepqpU51skN/1n0k4CmIdzRJ64wUQWQTsPmBOkgrwRsBdk1jxf2J5h3NpQqGiDxs7yaOuiPluS7tH21IcaG8WYWGDSPz2eHtfM3ZLeuETvT/5R5X6HVa4NS0or0hbiC0vUHvHkp5+yhzyEXTCYN9lJZzJRMA+ukjEbVL6PEiYPVC93wcGNiyEfO2KwXJg5dFacDklMQS0ELeNRXKSUazS2OloBRIHRovUsq6X/HXqUaMUp6afAkB1epuXpiDaMSUjBeGPR4oWOFXGwdD3CDt1Zad6VMR+Z4NNprgLWsPLq3qrOoLOSDjhKA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=48OAVczOPeEXT4UjekR2QYNoE/zGnjRZkD7iPTlopcA=; b=QYLNPmKimMHhxW5LV516Ra3kmL8VB1eUruU2A+H0gkjsIbHOeTVjOw9serRYr/fBFr3E6cSrqTmravJKQsCRuHM3dW7GyqvhmFG4wEstJtPPGJNkCwRd8vR6AUw0dSRbyVsisDMcArph2b7TILeltClbCi8ha7elKy8OgMf6xNk= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB4110.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:a8::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.21; Thu, 9 Dec 2021 08:52:52 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:52:52 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 1/9] t/fmt-merge-msg: do not redirect stderr Date: Thu, 9 Dec 2021 09:52:41 +0100 Message-Id: <20211209085249.13587-2-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AS9PR06CA0012.eurprd06.prod.outlook.com (2603:10a6:20b:462::34) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AS9PR06CA0012.eurprd06.prod.outlook.com (2603:10a6:20b:462::34) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.17 via Frontend Transport; Thu, 9 Dec 2021 08:52:52 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8fc0af76-42ff-47c1-5ee2-08d9baf1491c X-MS-TrafficTypeDiagnostic: PR3PR10MB4110:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:6790; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: HQghRJTqNZoIw/f0tqEdKJhloKyLZn9zmuG078nJaWgEdbZdPEX2xnyb4WlgXU0awciFIwmWgD4J7Jw49UCl7I2m9MtmH+bGd+tbhOxr91FwbXGjQsEbPzJKvlxWAZf6Tigga4jkQNS81tDslOSrUgBZMkUHkVDYe9Uc/HDyEQZDw1Xq+M4QO2vSdLLkAUA/oAl+xhgGO4KkQoarpbWo+TuVKAz5zNS4KcF5ZxFACLORAq9B4rVpWg/zZ4+qnl0SD2eBfYEXDyOLEZrEounPTkp5Zz9DXGuBzaU3OOpr/q1F9yNWhc3e7q8JBSHwNE3Loa90OlT/c0oizEnmjKU+7rXgDxU0mQmz3TgT1SWSVPhK803Fiouw7yNj9HJMNpTBIXFlzikMLKx2V4iGFuiEVv7zOU3hi6/gqCKwuNYIdj3924cCzAqiwC1uKHN8z6L4c1At8bYo6i4kGnO6A09Nb841oG8Y0B4vcSiw4sPtNmUm4CqxyYWL3W2uThoIoM6jMUGJKeli0MqHJnLjyR8X8rME3L7zKLDfNfYpqb6Cvv69ZkFa36hS4zOmJBRPuPgDS/8nCOg1jo3ttkUo6HFdrvh1ZRHR5WMfNbQ/m6UmqGl8IPbY8F2uqYIsxZRfpc44cCWBHVB59jgkoue4dz3hhQ== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(396003)(376002)(39840400004)(366004)(86362001)(36756003)(8676002)(54906003)(8936002)(316002)(6916009)(6496006)(6486002)(508600001)(66946007)(66556008)(66476007)(186003)(4326008)(2616005)(107886003)(2906002)(1076003)(6666004)(83380400001)(38100700002)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: FkScndpX2oDu/QvkkFu62JMu5kVjfLufKjR1/2qbcPW5ZyCq0RDmwz1gCXfGG16R6CQiTQGue+yeGgWmpekee4N2IAAkj2ZqlGig+76hxUvj0QROzHldHTMUYybUA/wYbrtnWMZraMeX4JvmaN1v4tMv8qi9Y3VgEpbCWMILxwuB+wGq5bSEf4VYwD3+NK7DNLxIozs1bPyAc5UoHsL2dy8rk2nDS7Ll8dTQnwLYffZmM/3U5HgSbr5nh2knZ2h+y2yMshQD1P2faIQcO1C+3+bpnnY1Kl1V0r0a4to7cHaW5p/0Rt3DQ/z276uhhXt1JkS6yjicIAWTB2c1qMprut3vR6nAnhWEClq6D8B2aizukU1cl+v+bm5ZW0CgT8/Lqx8EWGTkcS+IkxgXOL4KhTsxh9Ny0ApDzKRaRXyqskFv92oOwTBDKIGLatO6N699fJheN6WZz03W1ApwmhBZz6+IcuhW54GKnWYwpbn5jjYZP1TBh4ErG8zsZNGTRu7SzenZeztANsD8Oug4o0KPzkZK29oC4Y2rxy1aZ9/KZlBNGyCeuGgYLc1bOuG0zwBbW6Yvx/2ezW9m7VD2Czx6u+XJrjtK/A1MG0xEYau1bw0qc1gypLofy1wwnItsXvhaqaFL+K1H/nbl7IRN5EuWu9lfEayCaVW+cTIIIUNQItH4lYMBoME6apNiBUStJVAYk9sYbWlDf3iYm0dAGMYla2Y7nNv2pzi2lD31FB0n+Uy7ITl8mTIECDqirPXgmzsgKg31VzPgz9v9B+ystawBm9Oux8bV2mezd+T4yu5lwyoCElXW3u++tkL9uJKjIBJmzDhf5uAGa97ILxTdPYaFcs+Ly0IvECSlrmfJ+Pcb+vDV4/LN/N50FJSBBISfz5NYtgrnlLY7981x61OFbtDA/D80AO9OuO9H3ADFm4iKgzt/ER1z0Nka9BmGXxEnXa7ArIB6y74xVz3m6S81oetqvullnnLCcP6YQzLAj2n6HmCeCHOCfMa9Gfp1fpyAw1RLnJVhsF4K7O+w2IOOAT/yX8WryLMFLQ6sBoovI8ZYH6Qpqga66NgoxLETsNhgAbooxGQ/GkROOVqoA40rbXn0RlUn11hEStaKOR7YAhZmXJMTKWA4RNFiAIk2T6xRU7fxrsWghXuSdJPbz1ChH6dSAXD980rG1ELTVzum/0W6nfYmLfo6u9uSzQxAPia+7JHf1VPGPZXj+FykcJrqiwjA+eh/mIIVfaaUAecFG2QPUGdFiTSAQ1jqPtASZp2sh6PT3d5cTORZNZdVAucqWH2VXp0Mf7lOXmGqPVJhOo0R1PveYtY9ddPDhNFFOolD31PvlkkOXlIQj0kAViLlTuir50FaVQTaV+NRBE5Dur1DyVSNSEC9YbSexbu7rZExe+jIHUQHn013N4ECasVxov9dRLtbAqPLeMqliBptfzpGwZLcZ7IwoxzY8iPGvIaUFC7RkOTMwI5+5suuo956/A21/eHgSVx+xqqil1XSk9r6bPJONiNweFbRvh/YpngNauQUXNQjg7D+v6/nJpUn805es+etT77v5xvbeAvPqkvNzt3UD8qE78VkBOqkJVMjcsoa7C2WjLpLFiHJAjFNnYs7rFXZfzhCxpPQt2OeNNjuhHmavshAtovkG85otmPL39Re5DI0RLCrav/rYzw5w4GlNrNH8jpayLsQyrTDHoR2JxYuWm5RX4ARhq+IGC5nBRKtitxew9XGYUH1aH8obcj6MA== X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: 8fc0af76-42ff-47c1-5ee2-08d9baf1491c X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:52:52.7082 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: eSABN8qrryQ4fgt8zW/H/mXeiFdEnvoJDhu9xkVnJN+rQhdKa2OL9QVwdQUJrAFIj2VNQezEOA/F1NxgKLtDzGhAMJJytygK2k5i63Gxwv8= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4110 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org All the GPG and GPGSSH tests are redirecing stdout as well as stderr to `actual` and grep for success/failure over the resulting file. However, no output is printed on stderr and we do not need to include it in the grep. Signed-off-by: Fabian Stelzer --- t/t6200-fmt-merge-msg.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/t/t6200-fmt-merge-msg.sh b/t/t6200-fmt-merge-msg.sh index 06c5fb5615..cc68bba064 100755 --- a/t/t6200-fmt-merge-msg.sh +++ b/t/t6200-fmt-merge-msg.sh @@ -104,7 +104,7 @@ test_expect_success 'message for merging local branch' ' test_expect_success GPG 'message for merging local tag signed by good key' ' git checkout main && git fetch . signed-good-tag && - git fmt-merge-msg <.git/FETCH_HEAD >actual 2>&1 && + git fmt-merge-msg <.git/FETCH_HEAD >actual && grep "^Merge tag ${apos}signed-good-tag${apos}" actual && grep "^# gpg: Signature made" actual && grep "^# gpg: Good signature from" actual @@ -113,7 +113,7 @@ test_expect_success GPG 'message for merging local tag signed by good key' ' test_expect_success GPG 'message for merging local tag signed by unknown key' ' git checkout main && git fetch . signed-good-tag && - GNUPGHOME=. git fmt-merge-msg <.git/FETCH_HEAD >actual 2>&1 && + GNUPGHOME=. git fmt-merge-msg <.git/FETCH_HEAD >actual && grep "^Merge tag ${apos}signed-good-tag${apos}" actual && grep "^# gpg: Signature made" actual && grep -E "^# gpg: Can${apos}t check signature: (public key not found|No public key)" actual @@ -123,7 +123,7 @@ test_expect_success GPGSSH 'message for merging local tag signed by good ssh key test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && git checkout main && git fetch . signed-good-ssh-tag && - git fmt-merge-msg <.git/FETCH_HEAD >actual 2>&1 && + git fmt-merge-msg <.git/FETCH_HEAD >actual && grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual && ! grep "${GPGSSH_BAD_SIGNATURE}" actual ' @@ -132,7 +132,7 @@ test_expect_success GPGSSH 'message for merging local tag signed by unknown ssh test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && git checkout main && git fetch . signed-untrusted-ssh-tag && - git fmt-merge-msg <.git/FETCH_HEAD >actual 2>&1 && + git fmt-merge-msg <.git/FETCH_HEAD >actual && grep "${GPGSSH_GOOD_SIGNATURE_UNTRUSTED}" actual && ! grep "${GPGSSH_BAD_SIGNATURE}" actual && grep "${GPGSSH_KEY_NOT_TRUSTED}" actual From patchwork Thu Dec 9 08:52:42 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666067 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 69C84C433F5 for ; Thu, 9 Dec 2021 08:52:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235281AbhLII43 (ORCPT ); Thu, 9 Dec 2021 03:56:29 -0500 Received: from mail-am6eur05on2061.outbound.protection.outlook.com ([40.107.22.61]:64384 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232964AbhLII42 (ORCPT ); Thu, 9 Dec 2021 03:56:28 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=F27/4HJtRR467MidcXM2t0ykJ07NE0MKHcn3SML77UwyyHcCLbqwDM5TpKBZVoLQ3mOn8ffJ3nSmrqoPlVFN/PUhrPgSHKVqOWixZTJRBB4sRvGBfcFMJrs5ZkF5nZINcunOV3oToP6hO3gQLhf62eoXjwOAVLqcH+C3UFnAF6iBRBgp7IpCpTy3bdYc/Uc6vFkGAKYwgkTJiWCIX3eR1bdabxQgQSwm59T+rhqydsfvsxt6zQri3aUdAUs2dB06jkR3tENgO8+4IfOGYcPTZQl8bSHzgLgovgxyWpoKtcPWOeUCZGnAFU5OySmM9DdBt0Hy0+gEVlP5WOPaPt/JSQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=G6ru+Es35gS2kbjH7z59FnIUypNKemjNa//yMlOshns=; b=QrnN3BLw07WH+ex8xn1M8kVTK8ELWR8DlikY/vTgK42rPALGWtXlifOzxHCPacDw92JlpsqVOJovXANJVcVBzxgl/oEaSxvkx/p84Z74PFFwkTSMas9fiip0HehwIJzbUejYkeFd+3uF2DJILCb/5VvwgQtUsC32ChXvui1UEBbvA3ObaheeMkAOWGX93O42hK8Yzx+GvbXwyfzXz9KM8CJAfgYbuQx2HgsBJWvVyIoEGxHWebP31d94ESnl9hTQegoBuzJxoPH89va/3W5zl+incOF7b5eUFSOkhVSRf8ATU7x3deyVRwUxQy1dMGYztfN/Orm8gBvaBr9if56BuA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=G6ru+Es35gS2kbjH7z59FnIUypNKemjNa//yMlOshns=; b=uhjHkPtNZCS54pCvkjZluuQRiGY29688yDxq14NbVAEbZ4J+xzniNPjp379LF27W3SXoXSISBmxxsLNOCbjVbEqUYxjrl4m1m0vZYUB2p3js0yS1b0B3gX7nPyra1mv91W/AJJImv11OaYVsqZzPvOV1p5FSYxdpl+pMSzS88rg= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB3851.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:2a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.22; Thu, 9 Dec 2021 08:52:53 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:52:53 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 2/9] t/fmt-merge-msg: make gpgssh tests more specific Date: Thu, 9 Dec 2021 09:52:42 +0100 Message-Id: <20211209085249.13587-3-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AS8PR04CA0187.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::12) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AS8PR04CA0187.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::12) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.16 via Frontend Transport; Thu, 9 Dec 2021 08:52:53 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2d8f7f45-32c6-487e-4d4a-08d9baf149a1 X-MS-TrafficTypeDiagnostic: PR3PR10MB3851:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:3513; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: scuSjRABQMOi9sCsBPRbr3UjWD9p2vz0AIFgYv+F/cHBR48JWqbZpcJuXKXHUhCw45/LhfHVFRGYn2oG+7XCJPTfJYWWEflLxUMuZHVmKoCIRdqTpcL8WwO7wxsfhwH5mhx8fVvs89A6rrlXjWJrk5Z2AznXwr9XGm7wkoYGU+Vd8V8MSlvinSNf6LacxLx/T1PIykLMT/bR/z6KECiNvy3/grRBlDUpKUHSNsp87o86w2gk4WYpiaR6MYHGAiLFNypfq0lKQqZaOF2UbfQwhylVC2x/H3PnG+zJpriGjnVJZvF2I2p5r5+iQZ+ifKmuq5nQf9ED8iTMoKU7wrOsZe8UeO/KVJvO9RQfvzHy9vQyHUJdjayrlA34cPxLv9JLBqX/oKKUR/KD1sZfshlUX/RmNTbKX+u9ekBq/MOVeTyoLpLBl0ymx5K7gLPVh2YbdVMBVM2bueYXn+w9mQ5OzGJROq5FyTUDRwZYCyUmfByRpwaicmEFE1xHdkOJPyr6/tDTEL2IcUa7YIX9g+TCP7royDBRPpBikM0l790U8rriabJDnwW3YZjZnUxf6m0rxftHTKEIYmYOFG6KFnZvmHLPcqyUVS00zLanD2XhUHxyT50MCdTFNlKPm9qhCcVxTNST9Sne3KiXKWLcT9+HZg== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(39840400004)(396003)(366004)(346002)(376002)(136003)(8676002)(4326008)(36756003)(186003)(316002)(6486002)(6916009)(2906002)(86362001)(1076003)(6666004)(2616005)(66946007)(6496006)(38100700002)(83380400001)(66556008)(8936002)(508600001)(107886003)(54906003)(5660300002)(66476007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: rbBDVtd45h0t8qSrKZVn3p6CtJpjE8lE9L9xpt903uHBslhvvKb6/Nfp9g+OdSYqGNVMjZzMBt/X+IrQCWhuUCGmrD6lhLgP41Fomypaa7/fJc+cCk+KFeycI5VmSyDzuBUpz2gvsK95QEaZPJhzgcbIBb3O+rKT6yVudRpA1FEStxKkZ1NoyuYpslQ8oLLTBUeGv+O1063TvUpsaW0xv+boMtf0dQIKDBuBikUux5P8kdyi2pQq0JzJ7IU76gim7HHJdRfrxMmolv9JMYBnRol/CIDcVeAb9NQDlejwCa1U+BGAjTes5Wp7bM3kAGbl2tNWh8sy2vtRyZrFgNPeQCKR/v5XaBjpv9wZq+S/qf9A3ZFafpMsa5xeRLLmnkmtfina/ujAqdILbp74BY9II6pWNOYYS8wzHzA5PJ5bFMgjE5C3aSBEGVlW2Y4FqaXOTyz5qoticYU88y8/WQc23Bm686/pQ1Cy4Xix1in/YStMEfctZ9KsLm6JOXqKg7bgvrD78EBqxBBL3IXpJz9M94rcxmcg3c/Z1QwkqURJP+hqltbtAXxmlvUHc4u0Cb9CwDMG5omeuNMgBGL2m+5kR3QuWshYUcVN+SuTBDqsQgjUH8pD7v522bqJJeYCDVevTinUUEhMYn4Rzh5Mxp5KjLvA9zcSZrYGQGPeWDDWGW9Yrb3ZaAp8fixKLvUJU2REv+ou72+WOSjIzG1UiIqIVS0teQkqxCUGeFPxrng8U0xU7/czmnHmg9jVyEdUZl7H4c2PsHlxwEHekCI0WuFj9teE0VTPzVY1kx8zW6WzSykMXrfxz/X3aBEGqAiZVlIXiFu0d3DXNHEHBCd3FZCyaYl5+yskIu98xbrNyrBt8qNHFJ7rT70QeB1JYm0IX3fBO3zLw7YvDRF7E+w20z3drhMRMSc+jkmqzDTMgSXnaeMGHWs2aD3CNnIXSi7GSrUagTy+N0pWmk5zqqlZZh7LcsoIuruCT/1u5E7cdwAOdS/mr985qJKOYPnVgKJViPqS68k8AgnBH7S+2MlzFj6gKlfQRB0kh0S0uJbB2j4a7I7DFBJx53A9G5BAPYvisiUxrXFHHb1NMvbNvM0vZwSrT6WPJBtO2cnVzFuLzFUSLCHSRwXyZO/3ofAn+b13cUnbyIcbV0CdqemLA6rGn7KtSr50WsH29L3BDR+LzWD0eaPyY78kSCootId8F2YhzSkHw6dPD6AeO0QYXt7mc0CxmAmkLXcwJxtaS0lBCOwZQQ4BJQXpHCWNf7v7eSxvR499uAe+CbphXuz5tOEMPWDWGI889YF5Q9hxdvlYocsGB1d2hOoVi+J1mvtLFs4VXB2KZPEFPf9at10vfE0NslVsQmfKCn9j4Rund7Tb0Bsf9o8lwRs2Nap5fa4SfM3D/cAMrjdwJrNRwdnyBCbFR1t8eIVCBwDEMm2MqwVzwepKSJjUrOig4tHAochyqVbJ58iQ+XrvCGmThl6Tb9MQ0opyY3GCfk5FTBtCdKSbRiQ0BYulTWhYPGjyfaKLIA67B+dJ5fuhgxe2vavXzPuFOj/KdpVyGPUF/Ep7baC9Xz1sIU/zFFl4Eup1fXK4GjMN2HjQo5Q+zc26JYZE43QU3iCVK8mkkTIheh/n3pUz4kGJl+A/KiakKaawOhJvjEi3yPbzFservVLigBEsshO/zsYE+sMJm35SxjrZa1/PHyhB9EkajtQomiNuCyN5YFLQoDRBc+9mEqOrWwc55vVdF7iI/w== X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: 2d8f7f45-32c6-487e-4d4a-08d9baf149a1 X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:52:53.6033 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: 8o4mLMw+WykIvo+rx/jF0tLqH/ul7jg3hS48MH5BJk4yWN+L5U6YteepiLdavpKkA93IEOxc0m9QXSPVuLQCRv+Ne4fc6+IGH8wUJzhz+nY= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB3851 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Some GPGSSH fmt-merge-msg tests were only grepping for failed/successful signature validation and not checking for the tag in the resulting merge message. Add the missing grep for it. Signed-off-by: Fabian Stelzer --- t/t6200-fmt-merge-msg.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/t/t6200-fmt-merge-msg.sh b/t/t6200-fmt-merge-msg.sh index cc68bba064..eb2a9a4a78 100755 --- a/t/t6200-fmt-merge-msg.sh +++ b/t/t6200-fmt-merge-msg.sh @@ -124,6 +124,7 @@ test_expect_success GPGSSH 'message for merging local tag signed by good ssh key git checkout main && git fetch . signed-good-ssh-tag && git fmt-merge-msg <.git/FETCH_HEAD >actual && + grep "^Merge tag ${apos}signed-good-ssh-tag${apos}" actual && grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual && ! grep "${GPGSSH_BAD_SIGNATURE}" actual ' @@ -133,6 +134,7 @@ test_expect_success GPGSSH 'message for merging local tag signed by unknown ssh git checkout main && git fetch . signed-untrusted-ssh-tag && git fmt-merge-msg <.git/FETCH_HEAD >actual && + grep "^Merge tag ${apos}signed-untrusted-ssh-tag${apos}" actual && grep "${GPGSSH_GOOD_SIGNATURE_UNTRUSTED}" actual && ! grep "${GPGSSH_BAD_SIGNATURE}" actual && grep "${GPGSSH_KEY_NOT_TRUSTED}" actual From patchwork Thu Dec 9 08:52:43 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666071 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 53C28C433EF for ; Thu, 9 Dec 2021 08:53:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235323AbhLII4c (ORCPT ); Thu, 9 Dec 2021 03:56:32 -0500 Received: from mail-am6eur05on2061.outbound.protection.outlook.com ([40.107.22.61]:64384 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235279AbhLII43 (ORCPT ); Thu, 9 Dec 2021 03:56:29 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=EzDjnIcmI2X8ObI29JeWXAJ0aJjCox95p3bcRDPLyk3sMnBvuD+HQ/mBv9HjVcesURfcTCAc9j5myfVmBUUkYBtE3GGH4F03xVFTNQRhmoOgTqrmULskPoHrtptPPpDzUi3UdW1npq2CP3NrShlBqJ4NZ0tn7x/8LxVYkF40GACus+FD8vd15M/ptDXcW6zPgg2cBB01mGcn/Ly+4dlN3tUbFhlwrmqBsRqLS05GK84L7c3LAeA30InUpntzf/tJctLJDDY/eDS9LBcgR/jqtRXLSLe5Dy7xYRL/CYJ2AznZ17XhyHYCPnVp1r4Rq58cyCgOHw62m5O3m8Zexjbhzg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IFWk7mStrYAR15pRt33iPZVLIawsSF5hY44xdMc4tQM=; b=SuipOQ/ab8zVZi49QmhM4vTJdVsRK7WXXrxc11B7AVcgwUAXJdF2P62GNz4lca3ISERBocyDgpQeX112dmsU30CDOspFxkPddW1Rk0DA8PQknUyRRDFTxtEB21QFvnWgD9HQmD6KlF+uFOqgOq+RgUdhpBfjTmHmVVP2v7Mcb7zZh08o5pWCOwMAv+TMYKsTpr76YDB3TKoZ8/3lmmvHLZsjOCtahbaDTfP4oQa2rhZCHASjSIZUzD+ND+SfJFLo53jXf5dOswG9tgiF8t8wngnManYy6n5Pjb92lxJioAIvQI6BAmj5a5zymfWykCIaEXb4Eu4d1GnNVnGwvSHBRA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IFWk7mStrYAR15pRt33iPZVLIawsSF5hY44xdMc4tQM=; b=Zg1t/2XCgn28MhQxYsh9JO51SCIvmLDFrVX46oK39qjTGuRaF/UDyKIp6JiS4EWZzk9FACTgj+wy8wDgB9dJADFaBoDMaypv/zin6mDDsFBRkkqZp5DsyACk+b9Y4Mt/2S74DjyBiiaK5mlBvDz94x7blbCiS4F+xsNtkJjKpiY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB3851.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:2a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.22; Thu, 9 Dec 2021 08:52:55 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:52:55 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 3/9] ssh signing: use sigc struct to pass payload Date: Thu, 9 Dec 2021 09:52:43 +0100 Message-Id: <20211209085249.13587-4-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AS8PR04CA0193.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::18) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AS8PR04CA0193.eurprd04.prod.outlook.com (2603:10a6:20b:2f3::18) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Thu, 9 Dec 2021 08:52:54 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ef670b09-fab5-4057-27d3-08d9baf14a6f X-MS-TrafficTypeDiagnostic: PR3PR10MB3851:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:103; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: tge1z2fRGInVI6CUB5PvLoA6O/wf57LD2Xxo0rvR/c0NZIwRdZ3MgVxu8nEiABQNBkvbkKpeD3QVl/Oks3On80bmvWOy8zcxNrVAa+rF/zJC9vnTeXKDVehcH3KV5aVqIdn+I6PFFXLi7wUWT6WxrwPLo3HxTUUeciqdHs+pT4yOdZ7t2tTj+x7Kikc8XpABjVRpXNlhYlGsqt/iDzK56OtGIp88EcJYopumr2viE3kZMP2i6leK+0WnuweXqBKiHIBKmoeDm3/ApypwUhlfi0bhCf/Rg12C32H+dBH+npXJl/2ZW8tJqBET0kEONSrN0DUPbzWKRVRzpFOsAPf1cwTeo3ehwc0M+xQpkfe7KIEjkAjBJppL7g8mwuANoK+NseL/Y7sIKThGpFC8RB6voLUb3t5vDfDUrDjtp7HDQxPxiyQEH56mi+S9MaKSSPBxXS1UsbgMW5IeKC5RQiQkHC7pr1OkKagNOyQOAfBMFGn/wEnBN9FjWaFBdmSGdIAMaC5QFy3wrMTahFFsNo82LZcthAq7RoslfSOk6Z+8MS6t2YGCpRvtYh1Bah4Ba84i+iFg+K4JN7Z+pFYVDV6A7zuX+ImUFLwKyNsILBuqUNbI5b3tlNrTNZv+4WHinuwF55HYcv2g0pJEYPYyf7yoJTxbUWlXrL5NkXuj3HspYQrFpx/hgb5b16y3R9VUYstSpzpoemq/IQj0PCwHYHF3r68BtoekL9KwcJZbjU5DiRt/PN4bV0s2nQldRbfoJJhxLpWw0zMo3QD+/Z8PLl/yLo4WR4o+x2gYs6yoozer670= X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(39840400004)(396003)(366004)(346002)(376002)(136003)(84970400001)(8676002)(4326008)(36756003)(186003)(316002)(6486002)(6916009)(2906002)(86362001)(1076003)(6666004)(2616005)(66946007)(6496006)(38100700002)(83380400001)(66556008)(8936002)(508600001)(107886003)(54906003)(5660300002)(66476007)(309714004);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: es4TnQE4tmJdhFJZyciIl2Ck4sb38h+i2Hceia4+C1oJNEslNTUtqkgyGBVB/JYUsXLbLfcUoXOZeDTqKfdV+XbHAzjS0RldnAyEfE2gx+0yhxvlpb8UhzPn5Y7hzgk60bax6LJUtXfmIBNUaWuFI0a7cUqO1gxSUlSdS2Ajuih3HEqHv4NPxgAL/FrsRzP10DuIujGcW+5lnWGajz33amsBNtTVZ7AFHSsS23UxKhOiostavdS0Tm5BgPAH+LSBJcpi755ZpDvcxagyLNMPXe+5WqgXnfUrnXlQGGVKYBXcmJnrDYQu+KDMIPld+DqkUFpe8HvjHZplv/XYswgBzJDvSP3brkkTliLbxhCd7RiSsIipkUp50pmFZlcvumRisZ6wxv6tvvTOjj+4LPmHrj60URrxRvExLmQRb/M6COn5h7QkhY4LR7piJ7H8tU+vuooLujhHJJ9lSC08DzcXh79ji6BXySzr9f3lifo14psuT2y8ZekCk+t9YQ63++IZynig/+TPa/tYFQHkxYfFoWakLHcWRKnXhbIt/jpXzLZeRLdM6VVe5SohOLn365jsMUpIvyigtzfawcuYd16QwBTTrYBwSfXYlUvNoMWTNWKhRkZDkpP8Gfj/JEoFsxV67rz3plzyMNk7ItmtrrO63ykJSUZI5urhxwZGc8pk5XcVpieAPkN+R+dl0fZxuEL1Do2bHEu9K8qmOHyc3+r1xYVt5uqXdi5e1iTxG0SH0yu5NBFWgRaBzauHk9RGdKDlY+CLyLPF1KY+w209l4lD27Afj+ZkbWgzXtZ2nRlY3ta3xoKbbexw5gDhMm8bchQJB4f0QX3n7hr/rH5NmcPwLxQHuW72ddHspRwq8B45dQUx52fzOU8kpxqrKAsBBXRRElhD/oF5ABEoi22g1dnjkL/V5rmIRgRd9wX4R9KVFuudhIckgj9dNNNeHYpVDmRkieyZatyaVzh9d380ZdYbxFda7EJJuWRpiUgMl3Azr8KQIXF3BuLulm2dtPFlQEL+i/sc7mBtf1MYWvWz6wfKPqiscVJMfeytiHhDPWnb/5A5WVHrclZtA0rpOZodA1YQPOPzGQFbgjRlURfEVDbNg/2O/krR2ZjnwJ/k4TFCHZNZbYNqNDTtmy+k21wrhktUXAL0ZJclK2yvd6KVt2GgG8q5TiwLJClOZZ2uOy14yD9OMuJrz86cdDY5Ja/47uSUxTgpqoJPvGQwZ+cSacXIbGMbAZW8y22MoQIHljR/sqQ2EWR3YffvbBqUvUsRZB0XcQWV2LxDICyrTzy/aTrm9jeFTu/5ZXhgcqRWZmnAX0NyrZrXYRaCi9QIn2PkumDBMk78O1T8VaaPVsrefr09wmeVbhacbXa6yU+RoNngfn5yoc2KyFGKzGmOPoqMzJ+oyY2PYxAD1Y/dspXUT7T8tfYavb/CfUXggy9k3R+iQaPsOpGKV/PXudt6pjIMrzDdbgR28CT58pTw6/82PHgoOLF1ZnyNbeYqaVpeJVEcq0D5R5qExZhEfqD+HeOUJdGD4xV76+Kaw9yGg4G5mjb+G05GahldlLy+z7qiTR9lFukFk7I4sNzziq650ze1jj55kkhjvSZf+IS/acDw6VbOsXNGIURP05chLBtRA+QtJAwtZ8tUYYM8rC0Orfbr7ho2Yp/V0TMt5e1lxLwNquNp9Z5D+Kt6gM/SAC308mcugGt+IlG8eOv/lnPnuGbuElmLLLriIBI6Jn0tgsAGMnz0cw== X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: ef670b09-fab5-4057-27d3-08d9baf14a6f X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:52:55.0061 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: EcfaJwq9oL65kj/plb/hwDGR+UXeU77CkZy0M0cWqO7nNLNN/ovWwikTJtcZdyG0vddYbs8e3cRxaCUQqqanjTw7syKdqeOvJE7sDm7hJz4= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB3851 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org To be able to extend the payload metadata with things like its creation timestamp or the creators ident we remove the payload parameters to check_signature() and use the already existing sigc->payload field instead, only adding the length field to the struct. This also allows us to get rid of the xmemdupz() calls in the verify functions. Since sigc is now used to input data as well as output the result move it to the front of the function list. - Add payload_length to struct signature_check - Populate sigc.payload/payload_len on all call sites - Remove payload parameters to check_signature() - Remove payload parameters to internal verify_* functions and use sigc instead - Remove xmemdupz() used for verbose output since payload is now already populated. Signed-off-by: Fabian Stelzer --- builtin/receive-pack.c | 6 ++++-- commit.c | 5 +++-- fmt-merge-msg.c | 4 ++-- gpg-interface.c | 37 +++++++++++++++++-------------------- gpg-interface.h | 6 +++--- log-tree.c | 8 ++++---- tag.c | 4 ++-- 7 files changed, 35 insertions(+), 35 deletions(-) diff --git a/builtin/receive-pack.c b/builtin/receive-pack.c index 49b846d960..61ab63c2ea 100644 --- a/builtin/receive-pack.c +++ b/builtin/receive-pack.c @@ -769,8 +769,10 @@ static void prepare_push_cert_sha1(struct child_process *proc) memset(&sigcheck, '\0', sizeof(sigcheck)); bogs = parse_signed_buffer(push_cert.buf, push_cert.len); - check_signature(push_cert.buf, bogs, push_cert.buf + bogs, - push_cert.len - bogs, &sigcheck); + sigcheck.payload = xmemdupz(push_cert.buf, bogs); + sigcheck.payload_len = bogs; + check_signature(&sigcheck, push_cert.buf + bogs, + push_cert.len - bogs); nonce_status = check_nonce(push_cert.buf, bogs); } diff --git a/commit.c b/commit.c index 551de4903c..64e040a99b 100644 --- a/commit.c +++ b/commit.c @@ -1212,8 +1212,9 @@ int check_commit_signature(const struct commit *commit, struct signature_check * if (parse_signed_commit(commit, &payload, &signature, the_hash_algo) <= 0) goto out; - ret = check_signature(payload.buf, payload.len, signature.buf, - signature.len, sigc); + + sigc->payload = strbuf_detach(&payload, &sigc->payload_len); + ret = check_signature(sigc, signature.buf, signature.len); out: strbuf_release(&payload); diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index 5216191488..deca1ea3a3 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -533,8 +533,8 @@ static void fmt_merge_msg_sigs(struct strbuf *out) else { buf = payload.buf; len = payload.len; - if (check_signature(payload.buf, payload.len, sig.buf, - sig.len, &sigc) && + sigc.payload = strbuf_detach(&payload, &sigc.payload_len); + if (check_signature(&sigc, sig.buf, sig.len) && !sigc.output) strbuf_addstr(&sig, "gpg verification failed.\n"); else diff --git a/gpg-interface.c b/gpg-interface.c index 3e7255a2a9..75ab6faacb 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -19,8 +19,8 @@ struct gpg_format { const char **verify_args; const char **sigs; int (*verify_signed_buffer)(struct signature_check *sigc, - struct gpg_format *fmt, const char *payload, - size_t payload_size, const char *signature, + struct gpg_format *fmt, + const char *signature, size_t signature_size); int (*sign_buffer)(struct strbuf *buffer, struct strbuf *signature, const char *signing_key); @@ -53,12 +53,12 @@ static const char *ssh_sigs[] = { }; static int verify_gpg_signed_buffer(struct signature_check *sigc, - struct gpg_format *fmt, const char *payload, - size_t payload_size, const char *signature, + struct gpg_format *fmt, + const char *signature, size_t signature_size); static int verify_ssh_signed_buffer(struct signature_check *sigc, - struct gpg_format *fmt, const char *payload, - size_t payload_size, const char *signature, + struct gpg_format *fmt, + const char *signature, size_t signature_size); static int sign_buffer_gpg(struct strbuf *buffer, struct strbuf *signature, const char *signing_key); @@ -314,8 +314,8 @@ static void parse_gpg_output(struct signature_check *sigc) } static int verify_gpg_signed_buffer(struct signature_check *sigc, - struct gpg_format *fmt, const char *payload, - size_t payload_size, const char *signature, + struct gpg_format *fmt, + const char *signature, size_t signature_size) { struct child_process gpg = CHILD_PROCESS_INIT; @@ -343,14 +343,13 @@ static int verify_gpg_signed_buffer(struct signature_check *sigc, NULL); sigchain_push(SIGPIPE, SIG_IGN); - ret = pipe_command(&gpg, payload, payload_size, &gpg_stdout, 0, + ret = pipe_command(&gpg, sigc->payload, sigc->payload_len, &gpg_stdout, 0, &gpg_stderr, 0); sigchain_pop(SIGPIPE); delete_tempfile(&temp); ret |= !strstr(gpg_stdout.buf, "\n[GNUPG:] GOODSIG "); - sigc->payload = xmemdupz(payload, payload_size); sigc->output = strbuf_detach(&gpg_stderr, NULL); sigc->gpg_status = strbuf_detach(&gpg_stdout, NULL); @@ -426,8 +425,8 @@ static void parse_ssh_output(struct signature_check *sigc) } static int verify_ssh_signed_buffer(struct signature_check *sigc, - struct gpg_format *fmt, const char *payload, - size_t payload_size, const char *signature, + struct gpg_format *fmt, + const char *signature, size_t signature_size) { struct child_process ssh_keygen = CHILD_PROCESS_INIT; @@ -480,7 +479,7 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, "-n", "git", "-s", buffer_file->filename.buf, NULL); - pipe_command(&ssh_keygen, payload, payload_size, + pipe_command(&ssh_keygen, sigc->payload, sigc->payload_len, &ssh_keygen_out, 0, &ssh_keygen_err, 0); /* @@ -526,7 +525,7 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, } sigchain_push(SIGPIPE, SIG_IGN); - ret = pipe_command(&ssh_keygen, payload, payload_size, + ret = pipe_command(&ssh_keygen, sigc->payload, sigc->payload_len, &ssh_keygen_out, 0, &ssh_keygen_err, 0); sigchain_pop(SIGPIPE); @@ -540,7 +539,6 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, } } - sigc->payload = xmemdupz(payload, payload_size); strbuf_stripspace(&ssh_keygen_out, 0); strbuf_stripspace(&ssh_keygen_err, 0); /* Add stderr outputs to show the user actual ssh-keygen errors */ @@ -562,8 +560,8 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, return ret; } -int check_signature(const char *payload, size_t plen, const char *signature, - size_t slen, struct signature_check *sigc) +int check_signature(struct signature_check *sigc, + const char *signature, size_t slen) { struct gpg_format *fmt; int status; @@ -575,8 +573,7 @@ int check_signature(const char *payload, size_t plen, const char *signature, if (!fmt) die(_("bad/incompatible signature '%s'"), signature); - status = fmt->verify_signed_buffer(sigc, fmt, payload, plen, signature, - slen); + status = fmt->verify_signed_buffer(sigc, fmt, signature, slen); if (status && !sigc->output) return !!status; @@ -593,7 +590,7 @@ void print_signature_buffer(const struct signature_check *sigc, unsigned flags) sigc->output; if (flags & GPG_VERIFY_VERBOSE && sigc->payload) - fputs(sigc->payload, stdout); + fwrite(sigc->payload, 1, sigc->payload_len, stdout); if (output) fputs(output, stderr); diff --git a/gpg-interface.h b/gpg-interface.h index beefacbb1e..5ee7d8b6b9 100644 --- a/gpg-interface.h +++ b/gpg-interface.h @@ -17,6 +17,7 @@ enum signature_trust_level { struct signature_check { char *payload; + size_t payload_len; char *output; char *gpg_status; @@ -70,9 +71,8 @@ const char *get_signing_key(void); * Either a GPG KeyID or a SSH Key Fingerprint */ const char *get_signing_key_id(void); -int check_signature(const char *payload, size_t plen, - const char *signature, size_t slen, - struct signature_check *sigc); +int check_signature(struct signature_check *sigc, + const char *signature, size_t slen); void print_signature_buffer(const struct signature_check *sigc, unsigned flags); diff --git a/log-tree.c b/log-tree.c index 644893fd8c..a46cf60e1e 100644 --- a/log-tree.c +++ b/log-tree.c @@ -513,8 +513,8 @@ static void show_signature(struct rev_info *opt, struct commit *commit) if (parse_signed_commit(commit, &payload, &signature, the_hash_algo) <= 0) goto out; - status = check_signature(payload.buf, payload.len, signature.buf, - signature.len, &sigc); + sigc.payload = strbuf_detach(&payload, &sigc.payload_len); + status = check_signature(&sigc, signature.buf, signature.len); if (status && !sigc.output) show_sig_lines(opt, status, "No signature\n"); else @@ -583,8 +583,8 @@ static int show_one_mergetag(struct commit *commit, status = -1; if (parse_signature(extra->value, extra->len, &payload, &signature)) { /* could have a good signature */ - status = check_signature(payload.buf, payload.len, - signature.buf, signature.len, &sigc); + sigc.payload = strbuf_detach(&payload, &sigc.payload_len); + status = check_signature(&sigc, signature.buf, signature.len); if (sigc.output) strbuf_addstr(&verify_message, sigc.output); else diff --git a/tag.c b/tag.c index 3e18a41841..62fb09f5a5 100644 --- a/tag.c +++ b/tag.c @@ -25,8 +25,8 @@ static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags) return error("no signature found"); } - ret = check_signature(payload.buf, payload.len, signature.buf, - signature.len, &sigc); + sigc.payload = strbuf_detach(&payload, &sigc.payload_len); + ret = check_signature(&sigc, signature.buf, signature.len); if (!(flags & GPG_VERIFY_OMIT_STATUS)) print_signature_buffer(&sigc, flags); From patchwork Thu Dec 9 08:52:44 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666073 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id DA200C433F5 for ; Thu, 9 Dec 2021 08:53:08 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235395AbhLII4k (ORCPT ); Thu, 9 Dec 2021 03:56:40 -0500 Received: from mail-am6eur05on2061.outbound.protection.outlook.com ([40.107.22.61]:64384 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S232964AbhLII4a (ORCPT ); Thu, 9 Dec 2021 03:56:30 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=jbzZSshMhSO8AY+pXMl0iddR+uTZGQ1QTGtc0GtFAD2S1WezRdR7MfYfNytPv5abFRNxEnID90C8yAwSmjH0gpVy3iysgYvwChqNllQ0Rgf8qxgjLBn8AD1uRGtor0iSF4SzpwPPwoccwyeShd9IuFzDf4CURPRbKEzU5HFwDnkVG6zWB0KKm0Je/d1g5Vt6uJi2pncvkFGgouf/Oi56G2JwwwWDla9DKXyOV6q/pZocDVmShkL4U4HCrixxwAtxpRrKNfC76zSIWziNpGH1kOyx7mgh6/areYgqVSgdWPLuKBpVlRj8dNPAEzvNbOFnAVf0UbC7SVSIMTToAb9rdw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=K3sccrQyi7gwNykk7BAg8YyNI3Nho2xKTBAsNPAwDAE=; b=aPV32kHrehcMn/eXayqWc/Y39Wbdd5atDI6AvCSpurjFC2aNlJTsygPUMv/AjPh5sdf9vAUwwfzbtvhpxXd5Zs1cMaDIqZatfv+BpWASrFh/VSpeah/w3as6gVh4R0gprW02l6lG4uNbParIVtBJkrBgp1MS+R5+/Ys2OHKZTS1dN9yoyLCVj/hzXT0YAfYP+ysAWSIfPdJ4d3QQhHHJuKFo3oZhzyLTm/hQ/FB7wUfYxXZYnnJfhCfb/KP2H2V5DUmaq5NY8usEnqyq9BI1D7gy/yOHflrepOv0gb6VsfvHOnBPKWWTHnpFOtirr4qkrXvEyv6hKJhgV9jQQTx0Ug== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=K3sccrQyi7gwNykk7BAg8YyNI3Nho2xKTBAsNPAwDAE=; b=f+RRfb9OidUACr7NFqMQxZJrIgK7vvZ0mQkbYny3xcV8Zn366d6/qbCtkZQEBczFJVXOWHKTXztnCdqauVc6Ut/C03I3Jze427wMNHId9uz2IynyPBesF2bEXOGuY+Rn0XGWA7L4OOK0ZtkhEVP9GoW62du81zYMlTQJw0UISdY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB3851.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:2a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.22; Thu, 9 Dec 2021 08:52:56 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:52:56 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 4/9] ssh signing: add key lifetime test prereqs Date: Thu, 9 Dec 2021 09:52:44 +0100 Message-Id: <20211209085249.13587-5-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AS9PR05CA0032.eurprd05.prod.outlook.com (2603:10a6:20b:489::30) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AS9PR05CA0032.eurprd05.prod.outlook.com (2603:10a6:20b:489::30) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Thu, 9 Dec 2021 08:52:55 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 2cfe5e71-ee3f-4aea-d69e-08d9baf14b13 X-MS-TrafficTypeDiagnostic: PR3PR10MB3851:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:1850; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: 8/XVqbH2IGbgSJ/0XWbQy9VvVGG3cI5wlooU8ueLe/lg2rQneQ00K3FTBwnBy93Bvwe+VTAG9JewKijZfueAj4tRAY+b118g+BayWHMSnMt1EETh48yskj9dL7g50YEEMRJSyxJ/IL+nlzZU5Vc/7jAVRhmUTfKhl7BIahQT2rnE2lNDmFhXm/w+AWhCfhIAolBBB8OuMPyXVuDubuvPAEG1Xkl2CRls097beABPciL9J5RpVomKUdKCKS4DmFXdeGMJFr0IMEOdl6s87e9VJwvN9aFT93sGtIS4yG4HBSXgRnn9q0sTq1vc/TppJpU83H9aZ6NDPjSvLiSjBp8+1/BT7LhV/t47gruFdvM5BmQ6y7UjIH1ZdF735C2BBtl17PAV23wq15we2z/Mw9J/fIc82YyYpLbDSdYjHtKj8yJaay120Ls7qw2VlfMNBgEJ6/R/ObCrLtb/eE+FhXtzrfhmdKNi6zfRqrN7LqIKxxIlz/H4rmZCcsFAHvhoaL9IzjlDejoq9544RGIXkYE18/Gg7b36EH9vFzB51AwOHAIwv9w/huVPfFWrLG6SBCz1gihZOPT2ZkjWKxbBN7LmuuySGp8jdIwHGEKOiztSiN1EcVdfoWjjglziCpkf9W0E4gCRZohEqzK3AEmrU99n1g== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(39840400004)(396003)(366004)(346002)(376002)(136003)(8676002)(4326008)(36756003)(186003)(316002)(6486002)(6916009)(2906002)(86362001)(1076003)(6666004)(2616005)(66946007)(6496006)(38100700002)(83380400001)(66556008)(8936002)(508600001)(107886003)(54906003)(5660300002)(66476007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: aICoys6zFFnx6yFwf09gSkUhyYvbiV5ykfkntr//vNp1ahV3+mRKUQAMCzp09mHVbXTMwUb9CmE/xrFzIWgN4/duo4uAGeKhpwHNl1ZceXukY7i9SseIhovp2VduaHbxT+86PhjB3HO2g8IkYgZidOsP4hZrlAY0d27MgfxMmesyR+FNcB6ruoanHaGjuxCgcAlJKuyIDUKvaT+ycTPpe6adutQxPQWXsGGI9SSRH9rYxC2XhE8XJh0h8VL6K6tmQWkcSqatCxfSL5Bm9P8+wnwDqzZU+s+rr9HVK5Th9+v2rKDzsuJ19xLR+6fHBDVLH1F3Br+tEVJ/lmOTcH3+oYVvHFN88KwkRFP4lTC5uQ9MxQ+0MdWWEV24BeBA4viz/QKXjh0cJKsPyAJVIJj4zWQr5HTl/ynjIFLmTwDnWoj37fhrKxWp+ZSmWLVoqVaTsC5FKsIDOIRRU5kTikx/zFvhMoQVKWEVV/uSLvk7mssj6inZQglHpGYhvYctsHzVBBPtKa+VQJMgursq/VPPe7oIvYticXYcF6a1N2PvpeeuiTo55QYqMIaOc91fPsaaCifzlPHn3XY5hcupkVBVLuTHYOLYHd8rG8GtvUn5xTC0ccxN/tD6QObqsgkFPP1yPK8O0vuiAnrZDjNYCx8O2uCF8ogw1oOb9DenJcNO0XYsAyrTe3WKBRAvM9cTOvv5nqDCSQDTwIWBGYqoKah5Xuj+aalBsrtAusUFAueFgrPBXORojIy3/fT9QChHwvXBGQ/FK3rRzVr/KFh7e/xGU06FiPj62RkrGWETavz3AlOsiiDkaZzV3Ew5xF2eMpibCJ2AWcJF6U+madtO+wXUBiof7lMx29u1sKtHiEqsTTu+aQ3ZsT2mma6nLcCwZOkbmIYwnwdUCyJtOQCNJvsDb9wjaxXWJCRgdW0xSHSrchJHbs31q+v4bngv95B8X7B/v381xgz3X8zDmI7PDKy4pkTn5ORunCgalnVZWQV/otk/Xnng3FA2cmJWw0vkAIDWHGl/hU0r+hApse/ItOmEF9YdZWCoWPi+ndhYWBK7wz0Cpr9feEFzRyuDjNth1SCopHMkloQNLcyUjNsruTwlB+UXBrDm7mleaHW/+YQ792THGEAZHQC1yZOZGJQv3vcNONGE1motrutxQQ/FG/BatvOUyMAYS0vt+FtJ0t9OQaT6yc41tfGp/jK3aYdrGZx0nbn6kVt3xqNSTPQQ67KAuWppSFpwWdmo7eO92yRGfgIOFDXwwx1VdtJcqVTW0U+HOr/EmbyGA6Y0OcbRcQTNwO8vlFTcTZaEfHy0DC/cv/4HVqDz+gjnvdetNu4W4H1cEAhog+hhLCBy2ktbEiqEX2ZzaH+mVrmGpbvg85/wYY5VdXXGejVaBr/VJO919OArFW2EKduwqCnQeL8m2Z2L3tHLlt6yoPoIKAfQq+vAP/rmYvvEBXGkGCyNKGrbeWxDGjrcqfGrjPNECr5ZNf+ii7PFbpOePogr44mRd+Nxv28FO2ewVL0DUOWBNCnZcTcQmtxQVHh1PDvgZ2g9ZXbdNQqnVVE4aMOfK+1cyn0U6/P4lxaPGUTw1xX3Co4cq7iw+9b+pdZJoEF08y7tfGFUGCXs7UwbTLvyWeEV3NB/Y4J8M5Ro7tsRxsU8keAJL4BskwwMhQym6sLm1b56zvWTr1BbIAoRE+NuZ0D0CB7YRgxmg5so7cV2RqrILwavQ1yPu7dmOAIg3fmu4Sx7cixoow== X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: 2cfe5e71-ee3f-4aea-d69e-08d9baf14b13 X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:52:55.9808 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: OF4BP/Gi2Ny+nONQUmAUVVssv+qnnLRQb1V+ex+LHfXY0ZM82suqXFynRBsvPsjCvlggEWQ2PcyFdNSA+mHCK9LqSBoQxI0E6CEt9qhkIWs= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB3851 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org if ssh-keygen supports -Overify-time, add test keys marked as expired, not yet valid and valid both within the test_tick timeframe and outside of it. Signed-off-by: Fabian Stelzer --- t/lib-gpg.sh | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/t/lib-gpg.sh b/t/lib-gpg.sh index a3f285f515..fc03c8f89b 100644 --- a/t/lib-gpg.sh +++ b/t/lib-gpg.sh @@ -90,6 +90,10 @@ test_lazy_prereq RFC1991 ' GPGSSH_KEY_PRIMARY="${GNUPGHOME}/ed25519_ssh_signing_key" GPGSSH_KEY_SECONDARY="${GNUPGHOME}/rsa_2048_ssh_signing_key" GPGSSH_KEY_UNTRUSTED="${GNUPGHOME}/untrusted_ssh_signing_key" +GPGSSH_KEY_EXPIRED="${GNUPGHOME}/expired_ssh_signing_key" +GPGSSH_KEY_NOTYETVALID="${GNUPGHOME}/notyetvalid_ssh_signing_key" +GPGSSH_KEY_TIMEBOXEDVALID="${GNUPGHOME}/timeboxed_valid_ssh_signing_key" +GPGSSH_KEY_TIMEBOXEDINVALID="${GNUPGHOME}/timeboxed_invalid_ssh_signing_key" GPGSSH_KEY_WITH_PASSPHRASE="${GNUPGHOME}/protected_ssh_signing_key" GPGSSH_KEY_PASSPHRASE="super_secret" GPGSSH_ALLOWED_SIGNERS="${GNUPGHOME}/ssh.all_valid.allowedSignersFile" @@ -119,7 +123,20 @@ test_lazy_prereq GPGSSH ' echo "\"principal with number 2\" $(cat "${GPGSSH_KEY_SECONDARY}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && ssh-keygen -t ed25519 -N "${GPGSSH_KEY_PASSPHRASE}" -C "git ed25519 encrypted key" -f "${GPGSSH_KEY_WITH_PASSPHRASE}" >/dev/null && echo "\"principal with number 3\" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && - ssh-keygen -t ed25519 -N "" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null + ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null +' + +test_lazy_prereq GPGSSH_VERIFYTIME ' + # Check if ssh-keygen has a verify-time option by passing an invalid date to it + ssh-keygen -Overify-time=INVALID -Y check-novalidate -s doesnotmatter 2>&1 | grep -q -F "Invalid \"verify-time\"" && + ssh-keygen -t ed25519 -N "" -C "timeboxed valid key" -f "${GPGSSH_KEY_TIMEBOXEDVALID}" >/dev/null && + echo "\"timeboxed valid key\" valid-after=\"20050407000000\",valid-before=\"200504100000\" $(cat "${GPGSSH_KEY_TIMEBOXEDVALID}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && + ssh-keygen -t ed25519 -N "" -C "timeboxed invalid key" -f "${GPGSSH_KEY_TIMEBOXEDINVALID}" >/dev/null && + echo "\"timeboxed invalid key\" valid-after=\"20050401000000\",valid-before=\"20050402000000\" $(cat "${GPGSSH_KEY_TIMEBOXEDINVALID}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && + ssh-keygen -t ed25519 -N "" -C "expired key" -f "${GPGSSH_KEY_EXPIRED}" >/dev/null && + echo "\"principal with expired key\" valid-before=\"20000101000000\" $(cat "${GPGSSH_KEY_EXPIRED}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && + ssh-keygen -t ed25519 -N "" -C "not yet valid key" -f "${GPGSSH_KEY_NOTYETVALID}" >/dev/null && + echo "\"principal with not yet valid key\" valid-after=\"29990101000000\" $(cat "${GPGSSH_KEY_NOTYETVALID}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" ' sanitize_pgp() { From patchwork Thu Dec 9 08:52:45 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666075 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD561C433EF for ; Thu, 9 Dec 2021 08:53:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235325AbhLII4m (ORCPT ); Thu, 9 Dec 2021 03:56:42 -0500 Received: from mail-am6eur05on2061.outbound.protection.outlook.com ([40.107.22.61]:64384 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235337AbhLII4h (ORCPT ); Thu, 9 Dec 2021 03:56:37 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=DVVOgVus388z5mrjTJeqVU3/gsM+vIE5qrBeZ4PzHHxtbTHpKKwq9zUDQqcRDiGpslkgEPtZ13J/AeRgD/JL7OT9zIZ+m0jn6t+QIj+56V5+SVTGhenjdO/inVHC90Lx7MtCxSv1/7SMbmgURXTZYjlhqiTYd03OePUbatRXeFFpOZpaheq/3nCpDRPEd68VO8Pc7ABdiGiFT6J/6mJRJ5VWKLfwCtyDeQc3dsxsKVLRBLLj+oatAQk3Z02zwC8R6K6xoaMOHKeps6s1mub3JPwmFVTGh0EcNvvoguuoy2XUzqrErZwj7aOlhkg9nJXSpfAEDsBp2A6liR1DoAbbeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=xRZHm4oyw3rcqEpk5Et3zIGO7W3mYBS0JOU6Fk/tIkE=; b=SCvU0YlSQiCURobWofNTeVX+tqqTBrJF2gt4Rbn8NVXnc4APCsKhnUieVgwoirfJxEUYWxc54Ilu9+PZAg6F5D6knIKo6+RrTkgbllvMRs82yvIBS0DMygmbv5JqX41eAov/ZYwuCISct67MU2KwLbw2CZf36MumcAYcvM7d+zcRfiMQbt81DVYW6g+nOKSszoD/je2sbykmjNvEudTymFlCcmsQT5RVG9plsDaoi1gSS8YcPdJ2lSdelxYoGPvUE5LPxN9wI2N8mW85HZok1UH7CFr6GTveVs+3jKuczc6yiYuzls+tjZ8wAbIeo6it3dH8cBP2p326CBeS/9BU8Q== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=xRZHm4oyw3rcqEpk5Et3zIGO7W3mYBS0JOU6Fk/tIkE=; b=FQX89TjVO8jW/MF/V+rlYScv3MrzL2dl59elLW4RkQt9ON3VslbuATziV7SfrtixkvvDW4fGJlZBDhNCXkMc9voVHYglBKJnmOaqA8gl8gnaQnF6K9FVEBbHhPSqgM6rS3FwfvAUSBg45NeY6P4cdVv2eqdOd3X7mPr+WDAcDdY= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB3851.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:2a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.22; Thu, 9 Dec 2021 08:52:57 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:52:57 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 5/9] ssh signing: make verify-commit consider key lifetime Date: Thu, 9 Dec 2021 09:52:45 +0100 Message-Id: <20211209085249.13587-6-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AM6P192CA0023.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:83::36) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AM6P192CA0023.EURP192.PROD.OUTLOOK.COM (2603:10a6:209:83::36) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.17 via Frontend Transport; Thu, 9 Dec 2021 08:52:56 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: ff169e95-be0d-4671-ec68-08d9baf14ba4 X-MS-TrafficTypeDiagnostic: PR3PR10MB3851:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:883; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: BrEIbPZhAHp0s2CbeOEZ3n2O4E2h1u1t6ZgcjFI1/AnQEqmGz8z6HD/uB9fwUdZna+973Yzh3ZTTB3cbir+RtdhZzi6Hpj1Eowmx4Juqi5CFckmcIvKvx8/3cFUKHEDEMseJWwKjMY5YWf1uY/ZvATXPqRSTrqRdzt8/zUmcgG9BZs97YHbcDy4GAdPqayXzrBwV6cyRV9kRp/ZGZ3eLtA9d/0zz7uBPITv9GsdrDnhM3PyShLW6T3LNtc+alv2uYp6xv+/sH5XvDR8ZvbYDX4IyzOJP3VGzFSnVl4JU62SgQCfvA8Rm7UQkZ0kaiNn8fefKVKbMtKSif0fKZfUuFmD+NgXCUC0WaJx9WuwZ0gGDksIYxk3pn4h7Scu//YK3zxm+rk8jhfrjz7zXuY+6f2WD42Ldi7+s8dvOJlsukxt5XF705MCXNiEp+noQFeCH6t7CseylN3UMddaOXPEeat6kKNtC0micTDxhIkbp+oA2aVb1SYERgLTK/SYRonvwDgiSucBou9dowFwRkXMyWaN8Om9MxJG1IuPtStMjCxLcV4VfrXBNlTMYaKsMMDwRp2zewDFKw9IwDCyeucqbwDjVKmIgBKZdGyUY+Yc9nilC4FzHtT0x+DGILyjiOat611+sZTwlHUwbzaguDOQOcw== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(39840400004)(396003)(366004)(346002)(376002)(136003)(8676002)(4326008)(36756003)(186003)(316002)(6486002)(6916009)(2906002)(86362001)(1076003)(6666004)(2616005)(66946007)(6496006)(38100700002)(83380400001)(15650500001)(66556008)(8936002)(508600001)(107886003)(54906003)(5660300002)(66476007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: 5czyKk9gXtwvylOel7UrcEWfwqStyRFWRIB4cRMChKlQCo40KqWDNiMrn5kJNHV6hX1JVqpIa6bCpE3oOPCO+GGd/lQ0wMjYzIY1YCgEjIyzC73j91ljWNeGNrBdn8f9K8+yDIaPgeJfLRo9GK+ALxwd3tmkxDs+VeTqec2NP2GIR+/zbHk7eA4mhbyqbhfpaI9OA0PrCiY5LgXvxs5IqS9pqMTY3etcGX93MmMv1ugih3Gk9cPhO4G+9NgWI5n062RtG5p3+vRRloUBSf03fp1Snz3FMGHz4xuNS4ARalabXrpGq7LAwqgDE0rvSb0S0NpoUIx7st+3oiCcuyrGu3AHXst/2VHrnfLzglXbauQt7ntwJFL6Xd5q9GV1ZUVzLOwlbeyvdo98X2Um7qZZHy9wh/CMn3vli2bD02V/XYH00I09XSZKn8LUGusJzU8nDOy5jiryaJiL9xF9qsuNkvyU4B6ZfhZ5nDy2MBNH7zGCduGV9V+/RgwYnFniDwPbSZ3Yi4u96lw7v1Mikgb698jIDevixPGPVSuN1epvmrqyB8wEb1JHUiTf4GPsjNYHIxopoXmsraBeVypCNe4oRUVAtxN7mrMg0V4hPBjirUZ+pstJ8WUv1Ekh98vYu/jvE3bVwZir7UGG4I5m0DpsAdR/bY9zFLnr0BnTRTdwGhAB4a5jjVP24FUI+Igv5deA3FZ6qIdiS2045kuHG8uXDa9VZDA1/iWFPnR3kFNphzwIAhGFnAWGz8ZJt3XXvY/oIJkC3W2CdyeD+C1Xd66GMpt9MevCmyz91zTgK1TyEMCoHBPPmyC8sogDT4ORFueBxlprJDcnR4/FHgwUXGRG9gojRv2qgUeFj7FhSWu5f5IBP3eiyE9kXFqhZdVPw/7PPixiYhJXAay7FUjpvDg064Y0yh7O+8ohPiErYqJNYXQxRhWVPOyfLnngVfNMDxH5IkYT0pCGb9cqKaebPWi0+q7xuVzr1bsyUtWddxFyZrODUWR1MrJohEgQWyGgnN3+B2XcUZ/LtOKOmVkUuiwrxLHyLJfzH0ePtMM/w3v+y3F07QUvFmCBiYkau6DterLQCEr5HN0uPR5sw1ihMLppstQnwr960Y6Ahy30mdPzGqGa6OADLIeopQSn3fqHPVsaV4IyBmK8iO5lkbcfPs8m5ZLNXc43mEqmdAz/WzLFMZYPZJxCWNwusP6vVqK4WL8JizUeTTWVpbvrFjRvTGjsuTpFclZLktiWTqTBAP8SyT3ZweTLSYYHKbGpKg+rsOxKkskXT3sI+AvlBLqkD5V/yij1R4TL7i+m3oq+//bdreGcSx3YljPj+NY2PSod/0mck56v4QNQz+XDud9Iz70fSO2Io1RzUhHDBko1+FPMThCRSCmWSrDYJMXb6oElwAtwdR7vfmXZSMBTVans9Fnz+gxLzHtgzHOVQxtNJu67RhwiFR0ifMxHBnS+1FanNgsqJekSb6kqpIfzoCJYuKh7xGft8I2X2pbh5V3/9G6eotTcih6thZJv2LTrHvGcg5nJx3hfVZHtL1QpmScOIP5f4RIpU4SeR99ouLgIs/KiJJVt1Cbi6F6jO9vmwOVu//IcWkLGLYlVKpsHi9WphkdWyW3WNXiZMpGkCT+zjJyy2/fTE7arACe3yrUdNzW2dCYAbot4QRxxZshUYpUQQ7cwDzE2n4gqapUX6KHH10FeZ709ROIeMIXMRKL+zwU6fMu8qdTiGzOAuvLYYLzZ1vHjXt1ROAcSaCp9KAnn7H/FsZ8= X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: ff169e95-be0d-4671-ec68-08d9baf14ba4 X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:52:56.9665 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: D9A/eT3UPqwOfU9O97A9tkb9kCvbJdrca8zj3rAFcCzmXKB36DowbCnOwuGkUKLtjEIWlpthySuxp3bTCLsI5LE4oyhMhci7CxYsYgHH1do= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB3851 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org If valid-before/after dates are configured for this signatures key in the allowedSigners file then the verification should check if the key was valid at the time the commit was made. This allows for graceful key rollover and revoking keys without invalidating all previous commits. This feature needs openssh > 8.8. Older ssh-keygen versions will simply ignore this flag and use the current time. Strictly speaking this feature is available in 8.7, but since 8.7 has a bug that makes it unusable in another needed call we require 8.8. Timestamp information is present on most invocations of check_signature. However signer ident is not. We will need the signer email / name to be able to implement "Trust on first use" functionality later. Since the payload contains all necessary information we can parse it from there. The caller only needs to provide us some info about the payload by setting payload_type in the signature_check struct. - Add payload_type field & enum and payload_timestamp to struct signature_check - Populate the timestamp when not already set if we know about the payload type - Pass -Overify-time={payload_timestamp} in the users timezone to all ssh-keygen verification calls - Set the payload type when verifying commits - Add tests for expired, not yet valid and keys having a commit date outside of key validity as well as within Signed-off-by: Fabian Stelzer --- Documentation/config/gpg.txt | 5 ++++ commit.c | 1 + gpg-interface.c | 53 ++++++++++++++++++++++++++++++++++++ gpg-interface.h | 9 ++++++ t/t7528-signed-commit-ssh.sh | 42 ++++++++++++++++++++++++++++ 5 files changed, 110 insertions(+) diff --git a/Documentation/config/gpg.txt b/Documentation/config/gpg.txt index 4f30c7dbdd..c9be554c73 100644 --- a/Documentation/config/gpg.txt +++ b/Documentation/config/gpg.txt @@ -64,6 +64,11 @@ A repository that only allows signed commits can store the file in the repository itself using a path relative to the top-level of the working tree. This way only committers with an already valid key can add or change keys in the keyring. + +Since OpensSSH 8.8 this file allows specifying a key lifetime using valid-after & +valid-before options. Git will mark signatures as valid if the signing key was +valid at the time of the signatures creation. This allows users to change a +signing key without invalidating all previously made signatures. ++ Using a SSH CA key with the cert-authority option (see ssh-keygen(1) "CERTIFICATES") is also valid. diff --git a/commit.c b/commit.c index 64e040a99b..a348f085b2 100644 --- a/commit.c +++ b/commit.c @@ -1213,6 +1213,7 @@ int check_commit_signature(const struct commit *commit, struct signature_check * if (parse_signed_commit(commit, &payload, &signature, the_hash_algo) <= 0) goto out; + sigc->payload_type = SIGNATURE_PAYLOAD_COMMIT; sigc->payload = strbuf_detach(&payload, &sigc->payload_len); ret = check_signature(sigc, signature.buf, signature.len); diff --git a/gpg-interface.c b/gpg-interface.c index 75ab6faacb..330cfc5845 100644 --- a/gpg-interface.c +++ b/gpg-interface.c @@ -439,6 +439,13 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, struct strbuf ssh_principals_err = STRBUF_INIT; struct strbuf ssh_keygen_out = STRBUF_INIT; struct strbuf ssh_keygen_err = STRBUF_INIT; + struct strbuf verify_time = STRBUF_INIT; + const struct date_mode verify_date_mode = { + .type = DATE_STRFTIME, + .strftime_fmt = "%Y%m%d%H%M%S", + /* SSH signing key validity has no timezone information - Use the local timezone */ + .local = 1, + }; if (!ssh_allowed_signers) { error(_("gpg.ssh.allowedSignersFile needs to be configured and exist for ssh signature verification")); @@ -456,11 +463,16 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, return -1; } + if (sigc->payload_timestamp) + strbuf_addf(&verify_time, "-Overify-time=%s", + show_date(sigc->payload_timestamp, 0, &verify_date_mode)); + /* Find the principal from the signers */ strvec_pushl(&ssh_keygen.args, fmt->program, "-Y", "find-principals", "-f", ssh_allowed_signers, "-s", buffer_file->filename.buf, + verify_time.buf, NULL); ret = pipe_command(&ssh_keygen, NULL, 0, &ssh_principals_out, 0, &ssh_principals_err, 0); @@ -478,6 +490,7 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, "-Y", "check-novalidate", "-n", "git", "-s", buffer_file->filename.buf, + verify_time.buf, NULL); pipe_command(&ssh_keygen, sigc->payload, sigc->payload_len, &ssh_keygen_out, 0, &ssh_keygen_err, 0); @@ -512,6 +525,7 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, "-f", ssh_allowed_signers, "-I", principal, "-s", buffer_file->filename.buf, + verify_time.buf, NULL); if (ssh_revocation_file) { @@ -556,10 +570,46 @@ static int verify_ssh_signed_buffer(struct signature_check *sigc, strbuf_release(&ssh_principals_err); strbuf_release(&ssh_keygen_out); strbuf_release(&ssh_keygen_err); + strbuf_release(&verify_time); return ret; } +static int parse_payload_metadata(struct signature_check *sigc) +{ + const char *ident_line = NULL; + size_t ident_len; + struct ident_split ident; + const char *signer_header; + + switch (sigc->payload_type) { + case SIGNATURE_PAYLOAD_COMMIT: + signer_header = "committer"; + break; + case SIGNATURE_PAYLOAD_TAG: + signer_header = "tagger"; + break; + case SIGNATURE_PAYLOAD_UNDEFINED: + case SIGNATURE_PAYLOAD_PUSH_CERT: + /* Ignore payloads we don't want to parse */ + return 0; + default: + BUG("invalid value for sigc->payload_type"); + } + + ident_line = find_commit_header(sigc->payload, signer_header, &ident_len); + if (!ident_line || !ident_len) + return 1; + + if (split_ident_line(&ident, ident_line, ident_len)) + return 1; + + if (!sigc->payload_timestamp && ident.date_begin && ident.date_end) + sigc->payload_timestamp = parse_timestamp(ident.date_begin, NULL, 10); + + return 0; +} + int check_signature(struct signature_check *sigc, const char *signature, size_t slen) { @@ -573,6 +623,9 @@ int check_signature(struct signature_check *sigc, if (!fmt) die(_("bad/incompatible signature '%s'"), signature); + if (parse_payload_metadata(sigc)) + return 1; + status = fmt->verify_signed_buffer(sigc, fmt, signature, slen); if (status && !sigc->output) diff --git a/gpg-interface.h b/gpg-interface.h index 5ee7d8b6b9..b30cbdcd3d 100644 --- a/gpg-interface.h +++ b/gpg-interface.h @@ -15,9 +15,18 @@ enum signature_trust_level { TRUST_ULTIMATE, }; +enum payload_type { + SIGNATURE_PAYLOAD_UNDEFINED, + SIGNATURE_PAYLOAD_COMMIT, + SIGNATURE_PAYLOAD_TAG, + SIGNATURE_PAYLOAD_PUSH_CERT, +}; + struct signature_check { char *payload; size_t payload_len; + enum payload_type payload_type; + timestamp_t payload_timestamp; char *output; char *gpg_status; diff --git a/t/t7528-signed-commit-ssh.sh b/t/t7528-signed-commit-ssh.sh index badf3ed320..dae76ded0c 100755 --- a/t/t7528-signed-commit-ssh.sh +++ b/t/t7528-signed-commit-ssh.sh @@ -76,6 +76,23 @@ test_expect_success GPGSSH 'create signed commits' ' git tag twelfth-signed-alt $(cat oid) ' +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'create signed commits with keys having defined lifetimes' ' + test_when_finished "test_unconfig commit.gpgsign" && + test_config gpg.format ssh && + + echo expired >file && test_tick && git commit -a -m expired -S"${GPGSSH_KEY_EXPIRED}" && + git tag expired-signed && + + echo notyetvalid >file && test_tick && git commit -a -m notyetvalid -S"${GPGSSH_KEY_NOTYETVALID}" && + git tag notyetvalid-signed && + + echo timeboxedvalid >file && test_tick && git commit -a -m timeboxedvalid -S"${GPGSSH_KEY_TIMEBOXEDVALID}" && + git tag timeboxedvalid-signed && + + echo timeboxedinvalid >file && test_tick && git commit -a -m timeboxedinvalid -S"${GPGSSH_KEY_TIMEBOXEDINVALID}" && + git tag timeboxedinvalid-signed +' + test_expect_success GPGSSH 'verify and show signatures' ' test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && test_config gpg.mintrustlevel UNDEFINED && @@ -122,6 +139,31 @@ test_expect_success GPGSSH 'verify-commit exits failure on untrusted signature' grep "${GPGSSH_KEY_NOT_TRUSTED}" actual ' +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-commit exits failure on expired signature key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + test_must_fail git verify-commit expired-signed 2>actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-commit exits failure on not yet valid signature key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + test_must_fail git verify-commit notyetvalid-signed 2>actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-commit succeeds with commit date and key validity matching' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git verify-commit timeboxedvalid-signed 2>actual && + grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual && + ! grep "${GPGSSH_BAD_SIGNATURE}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-commit exits failure with commit date outside of key validity' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + test_must_fail git verify-commit timeboxedinvalid-signed 2>actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + test_expect_success GPGSSH 'verify-commit exits success with matching minTrustLevel' ' test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && test_config gpg.minTrustLevel fully && From patchwork Thu Dec 9 08:52:46 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666077 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 036B0C433F5 for ; Thu, 9 Dec 2021 08:53:11 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235350AbhLII4n (ORCPT ); Thu, 9 Dec 2021 03:56:43 -0500 Received: from mail-am6eur05on2089.outbound.protection.outlook.com ([40.107.22.89]:26977 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235315AbhLII4c (ORCPT ); Thu, 9 Dec 2021 03:56:32 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=n27+PWUCmlA+A8q2noJLgvsKii9nOtLH+lV2v9FKcI601wGT7ZRwXkC1gMIuS7/S0mkBIzNQFHRznmVYB8zeStEwpxXuhYLf4SAY3wCRiSyyxF/VMi0vp1ZJLiKO4J43gKEbeDGRgsthhbG22MfwqwErS1qDG2kTUn6KWyCXt3ef8h1yaRxyaUoIQzc9qWjMn+N2ZMHYtZ6AgJCYBv5h3oz+iOtBfsMSyx2mQtyBhBYVlS1EtvFDeFZ3ygTgkecDmrwJ5RGVawDH5GIgN7Wnj6Gc9Uq/Vt8NtQLyy/kbzNhicVun4HdhHwuiz6o/pTw9ghXCYP/f95G1iPPsJAEPgw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=1l9qmJoDiqvIXf+fkiDiFP54F8XDYP7oD2aRaUktoYs=; b=C8FG4ZNFz0QMwHfX0FvH4/HkVr+c4zQEmye/ybymeIJ3bOBkZRQFJC9sSIdpb5UO0+2Y/dwFPUcZCmTX163wQBBh4hMKyYwa/coc/bHQD38Hs+dvrxE/GlJBeB6gzJ7e9XZqrhF1ikIe3S16/KEL31rzqoklHWc2ykxGJhT5JT+aYsRtcAvEanCGRNqlLiI0ahFqywW7wwtf8k5evOBPFCR5HZqO11tm5MZOU8hEzzOhmJar79hFGwD+IoOWoXNWEpfLEMn5guaRInVK1evsJ0y4jXtuw4Maiodug47X5Y/8DtDPZQ4fAtNygJbK/AXUg61D28itbdOvC2h1s/5OlA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=1l9qmJoDiqvIXf+fkiDiFP54F8XDYP7oD2aRaUktoYs=; b=SsQlx8LjC0J+H85sV2/nJgCI3qLT3OMyY4wki3DaUWNRsyUmlNaN5uMeYfO8uVJ8V8v7W6wEZgteOR2agpuaFcnt8K8DDXRoGGi0cKYCM5doT8fxb3nudlpT/GtZnGoWySXCfCHl7rTL2X0a2+HG1abhkhdidrH8+o6sI0VsCAQ= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB4110.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:a8::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.21; Thu, 9 Dec 2021 08:52:58 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:52:58 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 6/9] ssh signing: make git log verify key lifetime Date: Thu, 9 Dec 2021 09:52:46 +0100 Message-Id: <20211209085249.13587-7-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AS9PR05CA0046.eurprd05.prod.outlook.com (2603:10a6:20b:489::29) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AS9PR05CA0046.eurprd05.prod.outlook.com (2603:10a6:20b:489::29) with Microsoft SMTP Server (version=TLS1_2, cipher=) via Frontend Transport; Thu, 9 Dec 2021 08:52:57 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 8c7b4934-5c2d-456c-c434-08d9baf14c2a X-MS-TrafficTypeDiagnostic: PR3PR10MB4110:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:655; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ZSJZSB87hzCI4oGb/ZUC8ixsRUNQKvbH5xPs16CKY1NVpT3DU4rvF0+VMvZ7h/AMT/em3YGGjtF1Cpq1ZU5Az6OIm8DRh0THnuNtRC66CILD9F8h/hG3X1+90deC8UPNYYggGG+kVAvIqgd/S9LlmhPdIzJC9HgVyQmvKOywGNPcrU9i/4G5WHyFWBC8vTEt/Ce3eTFQLWfQJow0DWQKeYOcwbECJQV5GZQ3zjffIXmqaD6O9wZDb2wkLpzRzD2Kag7GtUon/AewbGetbREB1tPcQ++FqScTTYtmr+rJQpnlBBWQV3dO/8CjEl/6OuW6BTAnxpb3iTfgllEF4FoSjZW+OhjRQ9nmRsNqfVYQTEkolI9WkXqWL+dfkb/Y3cIBIYnjdOYsIKCtn2CVXTvE5/Jdj/YRBPSy077wwfOrN/Ow9V2/XAOdqQAzDVK0ZtKWO3d9dH1Mbgp9+vSU88LeALFVi+OdAxccWFb4u2MY/1bDAUfv5V0HWgy9Mb7fYIppD62HHSnPdGg2BNGn2nYUqYeqItepFUpczp1kUZ2foMF7L+h/199Kzk4VmRY4Xq0iB/HoIy71Q1JyYKy7Tm0U3bY4ST4zVBx/S72iiQLRb8dfKTbnXC/GtDyIY0t6h/nYugHiXuTTo/OCsB90S4ANjA== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(396003)(376002)(39840400004)(366004)(86362001)(15650500001)(36756003)(8676002)(54906003)(8936002)(316002)(6916009)(6496006)(6486002)(508600001)(66946007)(66556008)(66476007)(186003)(4326008)(2616005)(107886003)(2906002)(1076003)(6666004)(83380400001)(38100700002)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: +MD2L+JMpnPL9Sm/jmYvJeUIu/vP06zeI38xy0md/+Cad2lCU/ccS2p+wiNDKZOR9Uwmb41fgVET1Yv6phh6eZ9Ov+XJYgs0uTIPHogSNTjMVMZzGP/PA6+/RDqZVeIz/gLN8QhmRcsKxUevMPAafsguKMXdakl2J5+gPyHp0BAVz+dr7/suEtm0Mc+mMa8GvFjJFXc8moHu1GgD5CNErWXuerG4gI4oCf8ANQuEM7l4l0IDBZ69FWv95XIFvaEOCdclqggqVAbOrBaSjbDG+Ly7Fjv7Plx4HzCXkM9RUj99+TAORgzLjZLb5kbKH9mwm13slr5zgP49sJHmWlo2GG1OTfRT92ObjbM9ufOi/U7t+EfcC12tCSHETbk4jtSGxTa7/lLpY9XfFm3IU1kaWCR4eAK4Z/7IC2ybYxYazmrpmq64JGOhql9gRZYR3EYEzRfc8XJEsI2k5D1UzLeThTzNI0sP8aQsEuVuvRRs1Yo202T8Kt71pWBbgHpIpe3MqGkq/pDbuTTRCYMnxMmNeemJqiuGVWje82Tm18I8Z67Mldn9jGfHmQzZ6XTi/XrRGr7zsWmmuy5se9PUbKVAW9vnFRCx2kEqdVQc0UBhp/r6mnNpcOOpUkACqvG8WTX0lUhTnnBaHXDDIZbrVav8ZssrZ7BP6zUoYu42u1k3JitWOGLDI0367akIVKb2cOIXilWoGYLh8A8Qo/ffKOOyzYzUyGwQGkMpGC6GGhlvj8+8HbOX87yERkZIjFE5Ks8+OcJybMIVDgq4pvWLhT7MDZ1iUcKgoFD/O9fBeguvHbKxwQoTUJZ7c3WRqxAWky5V3YT2tPbrG3suTAgO9x/jI3g+V8KMv8qcdYarUxp9dO3a9B/7u5EGU1YZ5pod5yW0hSDBSrBbBOI5DYrjH9xs0oyNiispRciDVlCMI4amA4BqHXHrzc/alCTOsCc+yAP+i31QDD4offaU1d6vyfBEqN3FRjc8pm6vb/H/YdVz28zHtpE7JBkR0l1uJDq/N4xP4JtG73wlsJC76tIjiLNbr3ijFstYOvP0fyx2xlueSky70QMzkZNkZefaAagCkDCMVkEjbzTymqtl863hD/lyk5BAdo/nSfrucuoZrDUnUOiFKNFz736fPUVJ0OmUhnzA6FPMbFGIQuYe2MvYbmf+YXxgHosLjyOfTu97HcbjVieXF89QTOsOc9B7HITjBB1y5p/r2V9jO8AaOqRqRk3O85AKR1y6cg94uPL3kivR7Q14BhPr5l7TIDtUIQAp8hFAmiXFtW4v/2jra0Q6G2D/2bQX0rwsJQmSpHQjAeFJqzj69GvVV9Qt5sIbQUNKeZqbyiUKPO0kwib+x+9OwcdZj57XMxIHS+GpD/ABHeWbKsM294GR7reGYteDgoVkVqeFBC2ExScKF0QPRUEZhbgynT0W8Ooq9CGaA8SddYM/3w+86Ygqoopst9/xlBJ8F+NpRvIulPUCLiBZ0x5Am8XrCHT2HHmMwOdPfgQXBk3GTc67mJsW4QOnq6f67lLqjGhSDKXjV8Yr1Ex3JVjL5YT1dA76hxJ/QUiVbKyk6uxCFDN39zSK2YLD5d4wntDNJQvYgoKsc3ocGBbceySQOpepz7E645/q0Lh+BBznXQjus49uKZ01c4+fsKk1Wll/dGIvCAy2ShYGn20oGAuSSKpph1oD+bIaCMKK+p9Nm/Lr0pUBvNN5KbpwF1p8vMd97yHr1N4jPmzCEyG20pgdHt24rMSBwMqs/d8VRfs6ZpbIWVo= X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: 8c7b4934-5c2d-456c-c434-08d9baf14c2a X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:52:57.8994 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: nB9wIB8MHGF9n71VWifvff6CkTR04mBRj+8UWixsKwHC6N4b0rq4xcRld2OcgPdgBZKk9JcWg9nv0I4BogWoDsnrE/Vwne+BwV6l4zw39Rk= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4110 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Set the payload_type for check_signature() when calling git log. Implements the same tests as for verify-commit. Signed-off-by: Fabian Stelzer --- log-tree.c | 2 ++ t/t4202-log.sh | 43 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/log-tree.c b/log-tree.c index a46cf60e1e..d3e7a40b64 100644 --- a/log-tree.c +++ b/log-tree.c @@ -513,6 +513,7 @@ static void show_signature(struct rev_info *opt, struct commit *commit) if (parse_signed_commit(commit, &payload, &signature, the_hash_algo) <= 0) goto out; + sigc.payload_type = SIGNATURE_PAYLOAD_COMMIT; sigc.payload = strbuf_detach(&payload, &sigc.payload_len); status = check_signature(&sigc, signature.buf, signature.len); if (status && !sigc.output) @@ -583,6 +584,7 @@ static int show_one_mergetag(struct commit *commit, status = -1; if (parse_signature(extra->value, extra->len, &payload, &signature)) { /* could have a good signature */ + sigc.payload_type = SIGNATURE_PAYLOAD_TAG; sigc.payload = strbuf_detach(&payload, &sigc.payload_len); status = check_signature(&sigc, signature.buf, signature.len); if (sigc.output) diff --git a/t/t4202-log.sh b/t/t4202-log.sh index 7884e3d46b..ba855ec893 100755 --- a/t/t4202-log.sh +++ b/t/t4202-log.sh @@ -1677,6 +1677,24 @@ test_expect_success GPGSSH 'setup sshkey signed branch' ' git commit -S -m signed_commit ' +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'create signed commits with keys having defined lifetimes' ' + test_config gpg.format ssh && + touch file && + git add file && + + echo expired >file && test_tick && git commit -a -m expired -S"${GPGSSH_KEY_EXPIRED}" && + git tag expired-signed && + + echo notyetvalid >file && test_tick && git commit -a -m notyetvalid -S"${GPGSSH_KEY_NOTYETVALID}" && + git tag notyetvalid-signed && + + echo timeboxedvalid >file && test_tick && git commit -a -m timeboxedvalid -S"${GPGSSH_KEY_TIMEBOXEDVALID}" && + git tag timeboxedvalid-signed && + + echo timeboxedinvalid >file && test_tick && git commit -a -m timeboxedinvalid -S"${GPGSSH_KEY_TIMEBOXEDINVALID}" && + git tag timeboxedinvalid-signed +' + test_expect_success GPGSM 'log x509 fingerprint' ' echo "F8BF62E0693D0694816377099909C779FA23FD65 | " >expect && git log -n1 --format="%GF | %GP" signed-x509 >actual && @@ -1714,6 +1732,31 @@ test_expect_success GPGSSH 'log --graph --show-signature ssh' ' grep "${GOOD_SIGNATURE_TRUSTED}" actual ' +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'log shows failure on expired signature key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git log --graph --show-signature -n1 expired-signed >actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'log shows failure on not yet valid signature key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git log --graph --show-signature -n1 notyetvalid-signed >actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'log show success with commit date and key validity matching' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git log --graph --show-signature -n1 timeboxedvalid-signed >actual && + grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual && + ! grep "${GPGSSH_BAD_SIGNATURE}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'log shows failure with commit date outside of key validity' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git log --graph --show-signature -n1 timeboxedinvalid-signed >actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + test_expect_success GPG 'log --graph --show-signature for merged tag' ' test_when_finished "git reset --hard && git checkout main" && git checkout -b plain main && From patchwork Thu Dec 9 08:52:47 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666079 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id CB9B7C433EF for ; Thu, 9 Dec 2021 08:53:12 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235369AbhLII4p (ORCPT ); Thu, 9 Dec 2021 03:56:45 -0500 Received: from mail-am6eur05on2089.outbound.protection.outlook.com ([40.107.22.89]:26977 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235376AbhLII4k (ORCPT ); Thu, 9 Dec 2021 03:56:40 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YfkSonPIZGaVEpsOBpzIeb7mbKf6Oa1hsR8r2ZHlM5ZOaCigYv/oOuPlQC7K/hg23XmIowapfEQd2wTh4ytddfGVMlQ38FCYDvSG1dppcRQFbBWjkZ4qr3HLhSy29hpzOPHzJdovx7ZnJmJF2N71b4a24Qt+vATQ/SN1hC1+745IoheroptsbazdATVBhuzWhWI5XyKREMqhQ0LYKUPaxOC1t1chFmPDZLwNAvGlM9ZSSLjQRT9iAGGDuORveI4xZCY/BPgGwgvr+XJl5/oqcfR9+KiQa+bfl2xwTHt3lzoSAPQTDruW3GgLQjMtMt+xwyyIjnk2cXLiF0YjPYwssw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=IW3HmvIC+coz5Fp1EH38QJ0Hs52tSu4XrwUA3cBq5Tc=; b=fnnP3lKyuHyvA79bNdwvu922GsJKELk061J4HxLJvQVlmxASrK1NI04u2OLuWOHFC+jrVhPyxVmPsSMMM52vYhB1bUaKlP+NvoAV+Y7MXcNhvSaKVa7SSyDf/+Yuuz6X+V/tY+rdGLTAT68yR81/8H3TsU4x3AtJxNEQehaIjhTFImFDJIQfZAlDuqHjXEgGOV27PmLdxLFnt75/m9hNcO9tw5ZiKeSMgH/EIzAZ0u3PCgOkrQk9DRe5MBEhR6gwriUUGyau/Ktw/S73cJUti709uZGZmi8sMhExoN4tHHlVEh7GT3qsu7sqnlKiO4nMJG0VuEqMLRB/pqTtGtGiig== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=IW3HmvIC+coz5Fp1EH38QJ0Hs52tSu4XrwUA3cBq5Tc=; b=Ope2DOQ3mmNFEAEeaJSZ9kx38t4j5rKeBo0glmLczlw4Ac9bBoLx3oZNH+RrgD/TVPbTKHJNYhaJgr/2Wfn4xv2ArZJEnkKSAfEEXWoTesP2iaPnYD3LwYIi7Af71AaVI1dhxEsKnR1v1Gs0qbIK3iy/f02UEZtTYjttnZsXP6A= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB4110.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:a8::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.21; Thu, 9 Dec 2021 08:52:58 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:52:58 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 7/9] ssh signing: make verify-tag consider key lifetime Date: Thu, 9 Dec 2021 09:52:47 +0100 Message-Id: <20211209085249.13587-8-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AM6PR04CA0071.eurprd04.prod.outlook.com (2603:10a6:20b:f0::48) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AM6PR04CA0071.eurprd04.prod.outlook.com (2603:10a6:20b:f0::48) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.20 via Frontend Transport; Thu, 9 Dec 2021 08:52:58 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 7cfa0e99-2e85-47bb-7f52-08d9baf14cbf X-MS-TrafficTypeDiagnostic: PR3PR10MB4110:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:54; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: W6hVACOrFquaQzt3Exc4id2bch3A7zL/jtkTV62YhCJMO+8Nz9H8Os+tiW4iobznNTxL+Y7ny3EA09Epe0LeervfL0tNIwPMfZbw5YochMQXE9yNylgV8/7UGR0EJTou/JNn4Fh3KeqsDCVTYPX88vjKS39F/tMrOrhAKJvIXkVnmml2FJDv1nlJTiV6Gt3rRpqHonYLR1pTeSspU+G1mC28S0KkkJEZ8L7fqScpdV/pCJcdjUp0iCUkoRJ3KLdlNR6tSQgDjQi0cPx8IGIw696Dp38uiHuzMCayoLuxSUqzJdB2pvzRXS20ozbBrt5iJBp7AzGA9cRStIDnnlbLLVVgtOl8y+pF5ccY3gBLEAs+uZv5sr8KJ8mlGef0B9aEv68V9KHMizP4iuTaC9l2OhRtDCuk6Q5Oas0dIezfW8TYYOSDtvND6LC1yUEu4ijRctOSkcQUyKlI/EMYDIz7uGPZNdDYAA4UJR++3Rv2dAU0tOMA1MqEseZ75iwfTdaHVmyGhFLufOTyMRxc0czglxX61oWPqt/H/eAdtYaYXhsPIEiTnPwSyNneDdSuCOOhZIUN5IcQxB6gyw0sPVx220x9Oav6Bk9y72Ryuvvl8pU7p5xJZX3TpkQkAs88k0x5C+bdp/oFKAAY7lYkoBmqig== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(396003)(376002)(39840400004)(366004)(86362001)(15650500001)(36756003)(8676002)(54906003)(8936002)(316002)(6916009)(6496006)(6486002)(508600001)(66946007)(66556008)(66476007)(186003)(4326008)(2616005)(107886003)(2906002)(1076003)(6666004)(83380400001)(38100700002)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: ywrnx3B+NYZm6ZQtCVCcAr40Yh0wgGKPigWuxDDCiBFx3MFFXmOsxto+uhQnyOECEvoOKm/7tJEc24O/vwi87ml62kZKyNnlgYZ6Pch45j4U3fhIKv+0NEjiybtOMsFcrrxz4PqcI1C3P4VKavrdiYaZt6w4FEMlb6omDzHlx1ED+Ow67QLPCQzJ1UQRB9ikuun7DYdt1U/vpozKigtCfnwsjLlJs0hQGQhiFm6AgQE3Rciqc+GVm86018DVgDEkTJOwQI88y3wGe/Hsnae8or2fMn7LsQN1i/QijVkyOlVdRS+q+kdLcgC/rIg3qdjCMc3UzkaQIMhPvfppqCGilrLgw3jh5sRc4rXA8lg2AhXYuGrzX/hFf/Vr8SMcRGy8tea5igDXAkrH4hKRAEz6kki0s0Uls/wa9NdCU+1b/ZsBJG3WIQtJMWbiH+/+K1VYRQmRQzLG0RgAV2fvdIfjc8MHL6RimnxAOhZd8CW7rcY2iLCc5ZCrdkHkMaXK+DgvDCQzsKajr3bTn/1xI8MGbZ/NsOxcAR0ASgGL2hkTXDA7T+WeeW5CtePyyeLo1PJzd2rJjyp8Lt0c0ixrEIvmdYMLM2GFS2TTbHv5ouOtP+I39TEXhTmVdSD4V5LVskFapo03Dh/wsHAuHbJ3UtKsQEkDdddSKkhhlUAcFutFbdTe+HrD3bmSNBjp45E/Nw985u99Y2OqeseqaZ8cwoaErFOCwLuAyzTOyoCjgAqkBbDfLSa7wB6oD2NcQoyznJJvPQjM5gtQLA5Fa+E/MqzHyc2NJHT5aI8Sqb9N+y26QWI4ahiV0mS5pVhJdfJ8prZ5Pcv60ahf4PH0qUybHPMds0VfswApMcNsPjiPT4S8QD4YvK6kgJtv3v6bvy/yuF0R4KMPKe7Ccz7V8OqI2Ac2POQEIkdLEUverKDTpQdlPqUNycl57R7CXVYJIRIFYHUOIL6R7aUFnRPev99107aiz7gG5DhZQp64V37E3OyvVH15L9kOIrwnM7UXmhZvBRT97T8zGhJbPd5+dqPFlbaTwPaSlxQiGvMueWLxVa55YIUuyEI3AdBAZAyR/SZwQnZG3L4qOVVTKO0BSF0qvqgIqJblZp1zs6oE63/2CiuMcvvBSWyNIyfZHi6Kx4e/J4w82KkkT8NluXZ5MlM85EBIzz7DKSpFOO5tbDipQwEUk6nCZkczy1gQKLeiEHBpKej69BNI/BJ3GKL7s1osZo1OUzQAV66O6tM3ww/0tuSFr+kJkG2E3G44mIHSBNAT2aqGLcGf9mAtZqAqBsabQHDY9CPznDbx4rAzgBDW+5oANwICCPPgcIz/J+XPcbpcxOqNVrbKyLuM+4a4R+aabt66lrVMEpN+M9ay/xw6zZT4//VM+c90USrj6iNQmRdquwEzjWHg2kdahr9PQTN1UzeYrO8t7aw7IdzArD06OUvzzFmcAXF79lCmmH7/IEJqiZsdFxDtcIx9kzh+iu/uPCwprmMXRMhGsTdWQ2Lep1ya6sjspf5+FjtlFhczj2D5dzA5DmZWMhC341D/St3kfXLFbQ8vKYAhaO6uB5Yg+IOncyx5Qpzb1TfOhw8zrDsr3Pdyhcs1+aYnDbGG4Ymi59KL/4d54oiqx3/sFVVPoW6ft5ApvhBm+ZSYLMt8UxSPD0Vyxv/UFHl9aROddv0l+pRhpofIxi9DOq6+D3b227YhWnuSCIB1qpOPvc2WyB9zM/t936Mp3ey9KTkmGm5I6lbQOGDNw7E7Uk4cI4MLAO4dgrE= X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: 7cfa0e99-2e85-47bb-7f52-08d9baf14cbf X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:52:58.8323 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BXXFv4GjONgI0ehNax2N4E1exi7qT3IWzHFLUFF8bsinkuiN3UX3n6K+ujQAgnzDbxRRE4pNIpSCbjwBn6AVpLLeSCGa0rAfNP8dQIEvpyA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4110 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Set the payload_type for check_signature() when calling verify-tag. Implements the same tests as for verify-commit. Signed-off-by: Fabian Stelzer --- t/t7031-verify-tag-signed-ssh.sh | 42 ++++++++++++++++++++++++++++++++ tag.c | 1 + 2 files changed, 43 insertions(+) diff --git a/t/t7031-verify-tag-signed-ssh.sh b/t/t7031-verify-tag-signed-ssh.sh index 06c9dd6c93..1cb36b9ab8 100755 --- a/t/t7031-verify-tag-signed-ssh.sh +++ b/t/t7031-verify-tag-signed-ssh.sh @@ -48,6 +48,23 @@ test_expect_success GPGSSH 'create signed tags ssh' ' git tag -u"${GPGSSH_KEY_UNTRUSTED}" -m eighth eighth-signed-alt ' +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'create signed tags with keys having defined lifetimes' ' + test_when_finished "test_unconfig commit.gpgsign" && + test_config gpg.format ssh && + + echo expired >file && test_tick && git commit -a -m expired -S"${GPGSSH_KEY_EXPIRED}" && + git tag -s -u "${GPGSSH_KEY_EXPIRED}" -m expired-signed expired-signed && + + echo notyetvalid >file && test_tick && git commit -a -m notyetvalid -S"${GPGSSH_KEY_NOTYETVALID}" && + git tag -s -u "${GPGSSH_KEY_NOTYETVALID}" -m notyetvalid-signed notyetvalid-signed && + + echo timeboxedvalid >file && test_tick && git commit -a -m timeboxedvalid -S"${GPGSSH_KEY_TIMEBOXEDVALID}" && + git tag -s -u "${GPGSSH_KEY_TIMEBOXEDVALID}" -m timeboxedvalid-signed timeboxedvalid-signed && + + echo timeboxedinvalid >file && test_tick && git commit -a -m timeboxedinvalid -S"${GPGSSH_KEY_TIMEBOXEDINVALID}" && + git tag -s -u "${GPGSSH_KEY_TIMEBOXEDINVALID}" -m timeboxedinvalid-signed timeboxedinvalid-signed +' + test_expect_success GPGSSH 'verify and show ssh signatures' ' test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && ( @@ -80,6 +97,31 @@ test_expect_success GPGSSH 'verify and show ssh signatures' ' ) ' +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-tag exits failure on expired signature key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + test_must_fail git verify-tag expired-signed 2>actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-tag exits failure on not yet valid signature key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + test_must_fail git verify-tag notyetvalid-signed 2>actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-tag succeeds with tag date and key validity matching' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git verify-tag timeboxedvalid-signed 2>actual && + grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual && + ! grep "${GPGSSH_BAD_SIGNATURE}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'verify-tag failes with tag date outside of key validity' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + test_must_fail git verify-tag timeboxedinvalid-signed 2>actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + test_expect_success GPGSSH 'detect fudged ssh signature' ' test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && git cat-file tag seventh-signed >raw && diff --git a/tag.c b/tag.c index 62fb09f5a5..dfbcd7fcc2 100644 --- a/tag.c +++ b/tag.c @@ -25,6 +25,7 @@ static int run_gpg_verify(const char *buf, unsigned long size, unsigned flags) return error("no signature found"); } + sigc.payload_type = SIGNATURE_PAYLOAD_TAG; sigc.payload = strbuf_detach(&payload, &sigc.payload_len); ret = check_signature(&sigc, signature.buf, signature.len); From patchwork Thu Dec 9 08:52:48 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666081 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B02D8C433FE for ; Thu, 9 Dec 2021 08:53:13 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235334AbhLII4q (ORCPT ); Thu, 9 Dec 2021 03:56:46 -0500 Received: from mail-am6eur05on2061.outbound.protection.outlook.com ([40.107.22.61]:64384 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235293AbhLII4k (ORCPT ); Thu, 9 Dec 2021 03:56:40 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Og1oaoG1ODImbAcivW0/Uiji9hmZbpsdaX3SfisDfgKSq9sYVPD+taKN7SH2zEGYKdzvlHTGDAqcH9YtQ38v1knyssxnC6GG2JMraQGO/r5MiT24ne7sO+nCokxV1Uws6pvs2XbmqzxLHRjzWjiIvbSSfDu4rUriTzFH9rruRlWKl8n53KG4ti3LYHdT6p+AHlCLmPhFouYcbIaqNyZD2fO6rU1GF4TaMws5ave+tOCl/NFwEOGcUGz2BWjNVj46K3m39ACcm/l7xX7lSpZMpueI7H+ZaypfF662EvRZr0SBdSXMbOb3zjN1YCYuRKnUx24ZWgjqhwhlcFLljDOrJg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=mYPX/41RHSRer8SjutnJT+YSrKXkTUZjhFw9YjE/748=; b=LU0ATvHt5p9ZolDYmWnb6jwcu2bUbGUDMGf1Loe877kutDfJtsMwpnjcTxHweLzwEOqplQ0Jkoy/ykYmBR5//KBIbzJw8AM0M3ww6tDQ6WgtdYdQjy7gpvbxA6lffek9wHq6EGZ1f0FAWyZ/i7p425lRLl238lI4DeMdPiNKiCKVbOnH3d2FBdxsdE/c+D2frJCvuKETrnPltmDC2Abv8I8A0B3nvDJkh51EXk0GJd2ixv8WwKf1odNauoVjb0mK9E7WoBJ8joF9Jpqb6/1XnEwdD5I1lSL8rJC7sMlxROpHVoFHqlolcy01vtT5E+iAja3pOIDG2lJuk2nZc/KNJw== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=mYPX/41RHSRer8SjutnJT+YSrKXkTUZjhFw9YjE/748=; b=XXsO0YipnujfD8huFNw47lcpBqyVd2p4jS9V1Ef1UBGtUjRbzEIyv0BL3jtL2RNDTUIWXwxwlssDwwJh16tDYxhLxT4X2Y9L4c9jXaCJgCHCN0UmMB+qB8UDY87jwCTmXGwwTemTy204l6L/2NArkEK8MriuoIbF2C5x3n2mUnA= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB3851.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:2a::15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.22; Thu, 9 Dec 2021 08:53:00 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:53:00 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 8/9] ssh signing: make fmt-merge-msg consider key lifetime Date: Thu, 9 Dec 2021 09:52:48 +0100 Message-Id: <20211209085249.13587-9-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AS9PR05CA0034.eurprd05.prod.outlook.com (2603:10a6:20b:489::7) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AS9PR05CA0034.eurprd05.prod.outlook.com (2603:10a6:20b:489::7) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.20 via Frontend Transport; Thu, 9 Dec 2021 08:53:00 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 13e0133e-cccb-4080-90fc-08d9baf14d8e X-MS-TrafficTypeDiagnostic: PR3PR10MB3851:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:67; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: QCto17OS2VVmJAxGcHdYSYVQx/LZkq+qv3goya8tsX/4HouAUPmkodyPrYVFXhFbnU2u57xNLTWjj3RNfVOaZm9yfa22ITuuqtGnCvY56KcSxPZKpaa55PIApPEN/145pVNUboDaVr3BpG8aP/7b8VCSGu12yGWGZlPWgk5I2qNL0dA3k55cizUYD0N9+6WluGZJnRUIR3aDoysza8nUBU1BD8X6rOnl1R+RLPMYqIpgKjWMtoN2Gu6UEzeytX++op7jM2LYjpTcTfiqAUVAW5KtuT6uh7wyrb1Ztk9S+uKY4nm/E7k1pautZ+YIsijrhq0ZPMx+Mvt+Ktcusq7AhyO55Pi+YsjXf80T+V5/H1Kc1G0yYG2RommPHtgHmXfpx6YcGBLGF/QNOxpWmwF0tmJOfgBsAVx35zv1o/JdifewpVdgHsB+rdQjRIGCLhto0xO14QdDAupGAgqg/cW7PexF04MPrkwVLxd6I9UM02U1Kdzt4/tJwPrSciV+rDuL7r6Uv/Q65t4UwEssV2ZIQIDVl6UR+MIIA9RLTD+rL9TTpQMInY/TBC8nl2kfHoODMUv7MwZpp3ZadI61bN9Tu7BB/jN+6IevAXLRspIG4iGSxUMbkDzffzCMlMNpEUGddp719Nt4u7pLNBKWzMIXig== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(39840400004)(396003)(366004)(346002)(376002)(136003)(8676002)(4326008)(36756003)(186003)(316002)(6486002)(6916009)(2906002)(86362001)(1076003)(6666004)(2616005)(66946007)(6496006)(38100700002)(83380400001)(66556008)(8936002)(508600001)(107886003)(54906003)(5660300002)(66476007);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: hfChPXvNu7c635jk7R0NNALEOId20t/S1cb+ZcIu9QzpFtCz9ZzLKkdu9TAZ4x51qgxPB7k3say2w2zzHUUNkfO9ushZ8MBlKgemH6gFq7a/5S4bQicNdk9qIG2u3hnsuwKD5r7g2vHljFgFXSN+MJqE84Y8SUzd1/vXMj3ma1MI4AC4AFi7D2ZQy+a8f0z/mYxHdM23w0YEHqEUMK+JoXgIRex+IubHBtWZ/Dt7R5fo0qU6h7dquGToE7wZLl4B+AtgURLe6qW5UjvFBjmQ0talcXDEsBj0nCM01qiZpxIvv8BUUiy9PI0/85panrB4KgZEPfWyqb8BBHOTCEG6T0mV+3+pWJArAq1BZXKghafIAmu6iW1JV1EAkQ9dV/FNgUKr4ddG0Bvr9Y8f+h+esjBPii2zKM37qgrQJ42zq8bSZGGWEGjOgu/jQ15S4FhUctkD1Jjo57wcoRi2gNz0YIpUTAR4ItHppiM0DXB4vDNInxVY2HMX2toEaFLhhqKxPPay4WPRAHdkpWJJ6guyBkA4OZlD89hLCNrAnNcWlL+Hqm8q2ekwt0CTxTU6T8j353O06m+hag2uw4oHfKIaZfuP0pzOwNmjekEwrPdwPc9Ljhq/txfKjE/fP68gzho/16YbMycpVxzseT1U0PQvVDyde7ZPRirS/uo5BM/XerSw2ApAv/Wcz+hl/w9W0ax6Xy1sOl+JSeYV44hQlndSBoe/0zD6CEMueFgaW+ZLe+559Xmynf5qpmC8OsuGIEyjsqPumH/5WlkxxN+7TZ5MldFKQeZbmeuzf1S3EFHir6LTRyehgRjuC1O2O5pkHGtNwtuseb4/C/UPLJxbQ68wkJ//w9QkJgm1++e12zG55g7l1ssryAggKjLNFxyRWfb7HXhRA/1e0uiH1jJbbivq0eW78tURtqmjcIcg3mudmvdWw9HRS49KW6dC5kqXiLXiAJtC4fQ2xlVvyB+YDADCvPySvpaJzAAJFyW2ZtChFIgFG92Id2JZTnyikm0Fe9JKb8fGGZJI7pvqOkBAz7s8GQgQkh1HYZYVNspvxt/jwngHcdMOMDZu4uEyxMPXzdbA19/buOUGji3MAiHdQ4jaeOXyunOhegib7d/MChWRqsQHLRPsk7hdWnOeA+mwq6RfstHKP4kTdEPQAqgTBtx12SlLhhY3lismm02EjJXrec9BSFoigobSXC2SwxouldwSMr6Dxt+WIYuNkbiD2RreaNdcASkwn3Oc+/UygsXiVltte8byT9jQLm8YC05WXlpVZpWrp6DwkJxEcp/lPgm+jkW8XVQxgF9ptUePFre919VGquExe5wcjsEVr6LkzfXejoVc+a1Y4ozXtamWiBaSiVc8dUj9pYtwNxbhq39b1mPxM+kPN3w19WSh0tcJNchjcapYkwzFIBhDCugADu8Faje9L0NGdyynLouhHYzLvMKN1q6MQ+UMPJ2oVXvsPJg5jEbT90/TYmgGuyx6W+2rcDkiXypI5+Uf6rrGpGCpeWU/jP/z5kr6vUB9SyTI1/6lQhmE8OEMX6SNv6k6rMDHlzENaIabJ3ftd3rzTMVN/vReyTsHpItRuN1r1WMJN+t8yV90WvBTPZDFjvxctlDnaDiF8fNgqnEMIos5C0kdgXMbE+qSEULMZaZ6TtG9+PB701p/UIm0NpPu4fEu9odj7Y5SoT5KR0CBgxO9sWbe2RXXOrMtNYz9uU9vpHOJfjbFs95tilfAnfGuXpSnWmyxu92WDfAVwY8PDhsyJE+5Uh4= X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: 13e0133e-cccb-4080-90fc-08d9baf14d8e X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:53:00.1575 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: BXsF9fvBpNz48Ayyh3K/k3EXkeWvR2LOLq5kynK+a9vuOejqLJWPc/7pSOwnutn8m6wgo+zs0CFEFUlpFW2Ba/UrmzndvO/N3Z1wu/QV7Co= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB3851 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Set the payload_type for check_signature() when generating merge messages to verify merged tags signatures key lifetimes. Implements the same tests as for verify-commit. Signed-off-by: Fabian Stelzer --- fmt-merge-msg.c | 1 + t/t6200-fmt-merge-msg.sh | 58 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+) diff --git a/fmt-merge-msg.c b/fmt-merge-msg.c index deca1ea3a3..e4f7810be2 100644 --- a/fmt-merge-msg.c +++ b/fmt-merge-msg.c @@ -533,6 +533,7 @@ static void fmt_merge_msg_sigs(struct strbuf *out) else { buf = payload.buf; len = payload.len; + sigc.payload_type = SIGNATURE_PAYLOAD_TAG; sigc.payload = strbuf_detach(&payload, &sigc.payload_len); if (check_signature(&sigc, sig.buf, sig.len) && !sigc.output) diff --git a/t/t6200-fmt-merge-msg.sh b/t/t6200-fmt-merge-msg.sh index eb2a9a4a78..6e10a539ce 100755 --- a/t/t6200-fmt-merge-msg.sh +++ b/t/t6200-fmt-merge-msg.sh @@ -91,6 +91,26 @@ test_expect_success GPGSSH 'created ssh signed commit and tag' ' git tag -s -u"${GPGSSH_KEY_UNTRUSTED}" -m signed-ssh-tag-msg-untrusted signed-untrusted-ssh-tag left ' +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'create signed tags with keys having defined lifetimes' ' + test_when_finished "test_unconfig commit.gpgsign" && + test_config gpg.format ssh && + git checkout -b signed-expiry-ssh && + touch file && + git add file && + + echo expired >file && test_tick && git commit -a -m expired -S"${GPGSSH_KEY_EXPIRED}" && + git tag -s -u "${GPGSSH_KEY_EXPIRED}" -m expired-signed expired-signed && + + echo notyetvalid >file && test_tick && git commit -a -m notyetvalid -S"${GPGSSH_KEY_NOTYETVALID}" && + git tag -s -u "${GPGSSH_KEY_NOTYETVALID}" -m notyetvalid-signed notyetvalid-signed && + + echo timeboxedvalid >file && test_tick && git commit -a -m timeboxedvalid -S"${GPGSSH_KEY_TIMEBOXEDVALID}" && + git tag -s -u "${GPGSSH_KEY_TIMEBOXEDVALID}" -m timeboxedvalid-signed timeboxedvalid-signed && + + echo timeboxedinvalid >file && test_tick && git commit -a -m timeboxedinvalid -S"${GPGSSH_KEY_TIMEBOXEDINVALID}" && + git tag -s -u "${GPGSSH_KEY_TIMEBOXEDINVALID}" -m timeboxedinvalid-signed timeboxedinvalid-signed +' + test_expect_success 'message for merging local branch' ' echo "Merge branch ${apos}left${apos}" >expected && @@ -139,6 +159,44 @@ test_expect_success GPGSSH 'message for merging local tag signed by unknown ssh ! grep "${GPGSSH_BAD_SIGNATURE}" actual && grep "${GPGSSH_KEY_NOT_TRUSTED}" actual ' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'message for merging local tag signed by expired ssh key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git checkout main && + git fetch . expired-signed && + git fmt-merge-msg <.git/FETCH_HEAD >actual && + grep "^Merge tag ${apos}expired-signed${apos}" actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'message for merging local tag signed by not yet valid ssh key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git checkout main && + git fetch . notyetvalid-signed && + git fmt-merge-msg <.git/FETCH_HEAD >actual && + grep "^Merge tag ${apos}notyetvalid-signed${apos}" actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'message for merging local tag signed by valid timeboxed ssh key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git checkout main && + git fetch . timeboxedvalid-signed && + git fmt-merge-msg <.git/FETCH_HEAD >actual && + grep "^Merge tag ${apos}timeboxedvalid-signed${apos}" actual && + grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual && + ! grep "${GPGSSH_BAD_SIGNATURE}" actual +' + +test_expect_success GPGSSH,GPGSSH_VERIFYTIME 'message for merging local tag signed by invalid timeboxed ssh key' ' + test_config gpg.ssh.allowedSignersFile "${GPGSSH_ALLOWED_SIGNERS}" && + git checkout main && + git fetch . timeboxedinvalid-signed && + git fmt-merge-msg <.git/FETCH_HEAD >actual && + grep "^Merge tag ${apos}timeboxedinvalid-signed${apos}" actual && + ! grep "${GPGSSH_GOOD_SIGNATURE_TRUSTED}" actual +' + test_expect_success 'message for merging external branch' ' echo "Merge branch ${apos}left${apos} of $(pwd)" >expected && From patchwork Thu Dec 9 08:52:49 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Fabian Stelzer X-Patchwork-Id: 12666083 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 8FD83C433F5 for ; Thu, 9 Dec 2021 08:53:15 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S235388AbhLII4r (ORCPT ); Thu, 9 Dec 2021 03:56:47 -0500 Received: from mail-am6eur05on2089.outbound.protection.outlook.com ([40.107.22.89]:26977 "EHLO EUR05-AM6-obe.outbound.protection.outlook.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S235299AbhLII4l (ORCPT ); Thu, 9 Dec 2021 03:56:41 -0500 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=OKAkvHejO2D3CUDK033eh+q6npRZbA8XdB/UOrbAU8WaDy4OczP4xt3fIPbBj5RkVPNISx/7DtksUsS12BhfYL2L+aqdTBGfzCWw7BomOJzsZEbTWtW3bdp5QcFRg6FuTyVWKbliwLbWyg82mbl4Zfh/8EpPshf61DoM7hE7kEJtdyGmyw6jsg5cuBniRPKPAbMqEvcq8Tv9xKbBM1pdPDBOhk2eKUjDcAEuWAkTAXY246qQHy/SIrf2SGKX4zsySmkWou4apyupjlOijbRaJPM+1vC5YqLRqoBuYzYy/Shl4IXfCn4wVPJ+lk1EjIyYFWKHpOxYkFOZpBJzhYwJWw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=/GJazhYhjfKBtvvh1iR5lBPvTFZKmn7Fey6rbc/EDBE=; b=Nnw05n85fgw9+efBvN9GWL4oI2fzUPhYatmGTLLxrZStMNASnGJ3m3yO6khesmtFlO/rb9+HHxz4BY820LEsllvtjkwg09yzUVYwkRfDLhkkVuCTx46q6y0D3Ke333NO4TFsnsq2Tk0L9ha9TXoUCmrHGvHKyMuGsqKQo6gefNT7Fpeu2wVrkSZv1Q0+/FLagqKj6zcRLddpJ6B37ym0S2d/z8xiTze3Fljxgq8qhz7FnQ1oFLAnTfILsQ4+Zw0ZvJAFhYs9WjQ2dDEHfBBc1e9A+goQJQadsxzj8XaHGJWKqSfthepYFzowuTAj3YwboCMm5GNaODUfx4wIztFRBQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=gigacodes.de; dmarc=pass action=none header.from=gigacodes.de; dkim=pass header.d=gigacodes.de; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gigacodes.de; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=/GJazhYhjfKBtvvh1iR5lBPvTFZKmn7Fey6rbc/EDBE=; b=XPXgI04aZIYYXboarAL5tWdt6j0NXCcuNybZiKz74K/mVV+E9ITX/FxK/4ra8iAMycYmlRhU8hS/UEkgmkOZMCjF6+oByxwsvJg54ZQlYGi0r3ndt0fikCrLe53IzOvWej52HUyYRpamte8hLMWAEDQoD6lA37kz9FtilybDqhM= Authentication-Results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=gigacodes.de; Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) by PR3PR10MB4110.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:a8::22) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.21; Thu, 9 Dec 2021 08:53:01 +0000 Received: from PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b]) by PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM ([fe80::d9de:b41b:461d:fb5b%8]) with mapi id 15.20.4755.014; Thu, 9 Dec 2021 08:53:01 +0000 From: Fabian Stelzer To: git@vger.kernel.org Cc: =?utf-8?b?w4Z2YXIgQXJuZmrDtnLDsCBCamFybWFzb24=?= , Junio C Hamano , =?utf-8?q?SZEDER_G=C3=A1bor?= , Fabian Stelzer Subject: [PATCH v6 9/9] ssh signing: verify ssh-keygen in test prereq Date: Thu, 9 Dec 2021 09:52:49 +0100 Message-Id: <20211209085249.13587-10-fs@gigacodes.de> X-Mailer: git-send-email 2.31.1 In-Reply-To: <20211209085249.13587-1-fs@gigacodes.de> References: <20211208163335.1231795-1-fs@gigacodes.de> <20211209085249.13587-1-fs@gigacodes.de> X-ClientProxiedBy: AM6PR04CA0046.eurprd04.prod.outlook.com (2603:10a6:20b:f0::23) To PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM (2603:10a6:102:12e::15) MIME-Version: 1.0 Received: from localhost (2003:ea:5820:600:3e55:2984:f78e:8b18) by AM6PR04CA0046.eurprd04.prod.outlook.com (2603:10a6:20b:f0::23) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.4755.17 via Frontend Transport; Thu, 9 Dec 2021 08:53:00 +0000 X-MS-PublicTrafficType: Email X-MS-Office365-Filtering-Correlation-Id: 062156fd-4241-4c7a-41d8-08d9baf14e14 X-MS-TrafficTypeDiagnostic: PR3PR10MB4110:EE_ X-Microsoft-Antispam-PRVS: X-MS-Oob-TLC-OOBClassifiers: OLM:2733; X-MS-Exchange-SenderADCheck: 1 X-MS-Exchange-AntiSpam-Relay: 0 X-Microsoft-Antispam: BCL:0; X-Microsoft-Antispam-Message-Info: ppq9MsDrU9V6TNdp7HY3AYdvxs4uUT3EUyBJBg8ATQWmZa/cUS5uTmQvHWtiuH0rRX931nERR2s2O6CKLf1qvowEv7Fw0hTwX+3ZwAnj5Na9jPyOzDRWTquW1eDTQvcxAkFqH5qfpuAIorbRmfuGFBYQWy1OLpICvH9stpmBZSH3Kz87iaEM+SsHuzgG2z9rAcvVXdfSvJofRqNqRv9WG1TJAM4i034wfUwQf5sDyz7fJC8EMYynsHnbVODusnl1ya4px3kCRMqRw1Yq3OM9UsKlPNfSV6tr4mcHNw/AUfPwv4reo+iwgQjWcAuAppaJWuzN3SrLCYzfOysJaUY6GyTk3fLkn61uctCkDGNIT9H4/wKpnCDAFRPYtCqFa1O+lxI/SlPj4YyAICUSew6RONZyhpjMNjUGuiazOgdHp7wtpluqe+FeIgNV1d0N+GzawzPOiKt4Mxgez+ucLTEu0pqqorcxiG0ojeuDNsyjX/gbzZnxa90ilrJqX9X/7IkTxhQgVDOM+I8r/40czplDQSyQko12TvKCw2oQvkdrTEldobPZ78jmvbU4wKPJ6RKBzsST/4Yzfxmwe6h2kZK0l+wTIxWBhtTerr/nXIwwbr/+rMcn9BY9o62+Lty6R/qBh8fsh+zLOSeg+iTzkk4i/w== X-Forefront-Antispam-Report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM;PTR:;CAT:NONE;SFS:(4636009)(136003)(346002)(396003)(376002)(39840400004)(366004)(86362001)(15650500001)(36756003)(8676002)(54906003)(8936002)(316002)(6916009)(6496006)(6486002)(508600001)(66946007)(66556008)(66476007)(186003)(4326008)(2616005)(107886003)(2906002)(1076003)(6666004)(83380400001)(38100700002)(5660300002);DIR:OUT;SFP:1101; X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: I4tj4LMCtvf6Lron4bXEca3igoVgHNqpSGKjKt+5X67FEo2H290AIFy9Mnpg8lTyqqdgm0SnXHskv5zbXhHAbzfxxCHSMdot7lpqvrpDVLlOlKtukKU6nsiXLhuSHZySyu3HXjteXQ3UrJtLcNkCeqetoGArou7J34ScXsLX19u90wdiCbLT4jpzLqhb4QgcKZqHmbPVnPlYITxVEfTgqjmoQ5bcI1zXmRdODqTJq2ZK/MNF5cUKhl/Idno59ziUhLIsDyXi7HEb5kn8ldBCjLPun7KkU9XGqdTtQ6JSrai2zIobM84l1/77z6OSjSLD7VUgGxmTea95Y6t+fP3KM1lGhcHblHKF/Pim8INqJeZ80imUKfaOasBVa+V/7GVkKxmqY1Q63b6pvTwNdsUCYO/1cWwS8SnG9JmVUzwXlCdneqIenIywjRn9J8+jKjv4voMaWn/9Mw2ICWLXUUS+eHd21wrBkp82C1hni4J24Cp87IuGjYaKXZLfbRv73/ZOcSbqV5lsm2qOlOF9jZk2Z/O4WnCEZsc1qLIFeRuVqv+JjMEQXMt3sA6Ulc1OR/3w2QCfgKGQ+KHUKhiYzBlUBfnhlBrMN3bz+kqeztmzF/RoMdmVj1jjYDF3iWEdxEMm2zoeef0dM/Jrf1oZddoDmMElpFPxRYg1VtqFQFAKtfnmrWT5dagciZSV4FDwi6FpZfhvFY9tMG1phszykxAh5oAIIzoJcRe2zRrZe3n9xuPXLqCDV5ONNLL5PLZU6tUnt0NLW+PtrV5dlCuB9RuG24lqCr0/wWktdMYChadcFMbKrnrmoJVpHBWfRvl3IuOU/obB4MJSTWy6lPOkrpMkEZD/CEwc0xtaeePaEuvHrn5cPL5LksJBtzn2eGH/GFCtRe9hzVRSt3xkGUNTjTtmjFjil9gKSYZMMTQ7ALYiE7y82R81sRTSaSWDjtUzRd2C3wI+t1ScTluhnR/XK0U8ImfScbFDVhWkqwIzgJZUCyp9G7PGd1rUwrKxP2eTEWltjpDYUJ/foHU6RzkIzi+LfEPxGGV8u9KYVG2gUdnbTqlFzqvutEFeFHTaCILAg4C9xmUbw6DrBSHxZO+Uj4oXqFlWOQrRcnlAxRnKYtQdILQytzM17JD0PbeSkhVLn6BmgVE/07z9LL7CqI/1UdeZelT3PabS5cxZqiHMDikV6x6ebSEOaFRahUfGxknVUNOEHuL8zheMoox0qeHSvVdx0w3ZzKSt+OXy6VLezrI65z+zNWOJF+i1EkABJnXtESmpcLoHebxULOtkkpuQWQZkGZROz09m7Oa+tqy2JN7u5PYWv3/E+eI+eI/19Rag2fb10hr78JERf26ppRXhzQMruHPVgYV25hb5Qrirz1u7eMoDZWzETULNjW4S4j5qvbSOjyOhQeeT20rMiVRaj5U+lqnANuF3f8IANZjuNA5k5TOYUlTFijOcvSN0xt7Erbq1KX9NyAZKfuitwn/uyQfbHwWw1aBEjdYW1raSHpnnO1Vllfueh8SHBJAPDIGa1F9fc76G3IEP0e0Ldhg5SwOKyzR4ZC2E4jzsh0TVTQ14CJsML3YNEidmtPzyV8gDxrPg47ecpgDEYmNn+nz9GddQFbTtTodSx76K4szB2O6MTDHlSnJHZBwjS9iwbJ9d/XZ2prGjGuVs0duEc6xXDf4VHvQjFUknA3CqFa5Jvj6UQOTu1kiOqMMsy3IRRFa6/vIJBIvcWIMRhU3zrW+WmFdHs/Bu/4HVoou9yJFt4hss6YU= X-OriginatorOrg: gigacodes.de X-MS-Exchange-CrossTenant-Network-Message-Id: 062156fd-4241-4c7a-41d8-08d9baf14e14 X-MS-Exchange-CrossTenant-AuthSource: PAXPR10MB4734.EURPRD10.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 09 Dec 2021 08:53:01.0546 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 80e41b3b-ea1f-4dbc-91eb-225a572951fb X-MS-Exchange-CrossTenant-MailboxType: HOSTED X-MS-Exchange-CrossTenant-UserPrincipalName: XZ5cXf0l3NkynA4DXX9cv1lWTfykz/aoPq4dQRshlGQVNyz+H1jacexmEiskBRUewwW7p7/SuIpCY9gKCvTyK4F9B9GeEJLM9tkqrujAWQA= X-MS-Exchange-Transport-CrossTenantHeadersStamped: PR3PR10MB4110 Precedence: bulk List-ID: X-Mailing-List: git@vger.kernel.org Do a full ssh signing, find-principals and verify operation in the test prereq's to make sure ssh-keygen works as expected. Only generating the keys and verifying its presence is not sufficient in some situations. One example was ssh-keygen creating unusable ssh keys in cygwin because of unsafe default permissions for the key files. The other a broken openssh 8.7 that segfaulted on any find-principals operation. This extended prereq check avoids future test breakages in case ssh-keygen or any environment behaviour changes. Signed-off-by: Fabian Stelzer --- t/lib-gpg.sh | 53 +++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 40 insertions(+), 13 deletions(-) diff --git a/t/lib-gpg.sh b/t/lib-gpg.sh index fc03c8f89b..3fadfcb306 100644 --- a/t/lib-gpg.sh +++ b/t/lib-gpg.sh @@ -109,34 +109,61 @@ test_lazy_prereq GPGSSH ' echo $ssh_version | grep -q "find-principals:missing signature file" test $? = 0 || exit 1; - # some broken versions of ssh-keygen segfault on find-principals; - # avoid testing with them. - ssh-keygen -Y find-principals -f /dev/null -s /dev/null - test $? = 139 && exit 1 - + # Setup some keys and an allowed signers file mkdir -p "${GNUPGHOME}" && chmod 0700 "${GNUPGHOME}" && (setfacl -k "${GNUPGHOME}" 2>/dev/null || true) && ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_PRIMARY}" >/dev/null && - echo "\"principal with number 1\" $(cat "${GPGSSH_KEY_PRIMARY}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && ssh-keygen -t rsa -b 2048 -N "" -C "git rsa2048 key" -f "${GPGSSH_KEY_SECONDARY}" >/dev/null && - echo "\"principal with number 2\" $(cat "${GPGSSH_KEY_SECONDARY}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && ssh-keygen -t ed25519 -N "${GPGSSH_KEY_PASSPHRASE}" -C "git ed25519 encrypted key" -f "${GPGSSH_KEY_WITH_PASSPHRASE}" >/dev/null && - echo "\"principal with number 3\" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && - ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null + ssh-keygen -t ed25519 -N "" -C "git ed25519 key" -f "${GPGSSH_KEY_UNTRUSTED}" >/dev/null && + + cat >"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF && + "principal with number 1" $(cat "${GPGSSH_KEY_PRIMARY}.pub")" + "principal with number 2" $(cat "${GPGSSH_KEY_SECONDARY}.pub")" + "principal with number 3" $(cat "${GPGSSH_KEY_WITH_PASSPHRASE}.pub")" + EOF + + # Verify if at least one key and ssh-keygen works as expected + echo "testpayload" | + ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_PRIMARY}" >gpgssh_prereq.sig && + ssh-keygen -Y find-principals -f "${GPGSSH_ALLOWED_SIGNERS}" -s gpgssh_prereq.sig && + echo "testpayload" | + ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with number 1" -s gpgssh_prereq.sig ' test_lazy_prereq GPGSSH_VERIFYTIME ' # Check if ssh-keygen has a verify-time option by passing an invalid date to it ssh-keygen -Overify-time=INVALID -Y check-novalidate -s doesnotmatter 2>&1 | grep -q -F "Invalid \"verify-time\"" && + + # Set up keys with key lifetimes ssh-keygen -t ed25519 -N "" -C "timeboxed valid key" -f "${GPGSSH_KEY_TIMEBOXEDVALID}" >/dev/null && - echo "\"timeboxed valid key\" valid-after=\"20050407000000\",valid-before=\"200504100000\" $(cat "${GPGSSH_KEY_TIMEBOXEDVALID}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && + key_valid=$(cat "${GPGSSH_KEY_TIMEBOXEDVALID}.pub") && ssh-keygen -t ed25519 -N "" -C "timeboxed invalid key" -f "${GPGSSH_KEY_TIMEBOXEDINVALID}" >/dev/null && - echo "\"timeboxed invalid key\" valid-after=\"20050401000000\",valid-before=\"20050402000000\" $(cat "${GPGSSH_KEY_TIMEBOXEDINVALID}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && + key_invalid=$(cat "${GPGSSH_KEY_TIMEBOXEDINVALID}.pub") && ssh-keygen -t ed25519 -N "" -C "expired key" -f "${GPGSSH_KEY_EXPIRED}" >/dev/null && - echo "\"principal with expired key\" valid-before=\"20000101000000\" $(cat "${GPGSSH_KEY_EXPIRED}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" && + key_expired=$(cat "${GPGSSH_KEY_EXPIRED}.pub") && ssh-keygen -t ed25519 -N "" -C "not yet valid key" -f "${GPGSSH_KEY_NOTYETVALID}" >/dev/null && - echo "\"principal with not yet valid key\" valid-after=\"29990101000000\" $(cat "${GPGSSH_KEY_NOTYETVALID}.pub")" >> "${GPGSSH_ALLOWED_SIGNERS}" + key_notyetvalid=$(cat "${GPGSSH_KEY_NOTYETVALID}.pub") && + + # Timestamps outside of test_tick span + ts2005a=20050401000000 ts2005b=200504020000 && + # Timestamps within test_tick span + ts2005c=20050407000000 ts2005d=200504100000 && + # Definitely not yet valid / expired timestamps + ts2000=20000101000000 ts2999=29990101000000 && + + cat >>"${GPGSSH_ALLOWED_SIGNERS}" <<-EOF && + "timeboxed valid key" valid-after="$ts2005c",valid-before="$ts2005d" $key_valid" + "timeboxed invalid key" valid-after="$ts2005a",valid-before="$ts2005b" $key_invalid" + "principal with expired key" valid-before="$ts2000" $key_expired" + "principal with not yet valid key" valid-after="$ts2999" $key_notyetvalid" + EOF + + # and verify ssh-keygen verifies the key lifetime + echo "testpayload" | + ssh-keygen -Y sign -n "git" -f "${GPGSSH_KEY_EXPIRED}" >gpgssh_verifytime_prereq.sig && + ! (ssh-keygen -Y verify -n "git" -f "${GPGSSH_ALLOWED_SIGNERS}" -I "principal with expired key" -s gpgssh_verifytime_prereq.sig) ' sanitize_pgp() {