From patchwork Mon Jan 24 15:51:26 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selva Nair X-Patchwork-Id: 2251 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director7.mail.ord1d.rsapps.net ([172.31.255.6]) by backend41.mail.ord1d.rsapps.net with LMTP id kFBjOfpl72EgCAAAqwncew (envelope-from ) for ; Mon, 24 Jan 2022 21:52:42 -0500 Received: from proxy2.mail.iad3b.rsapps.net ([172.31.255.6]) by director7.mail.ord1d.rsapps.net with LMTP id yBv0E/tl72GuGgAAovjBpQ (envelope-from ) for ; Mon, 24 Jan 2022 21:52:43 -0500 Received: from smtp29.gate.iad3b ([172.31.255.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy2.mail.iad3b.rsapps.net with LMTPS id aADDC/tl72HlAgAAvAZTew (envelope-from ) for ; Mon, 24 Jan 2022 21:52:43 -0500 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp29.gate.iad3b.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dkim=fail (signature verification failed) header.d=gmail.com; dmarc=fail (p=none; dis=none) header.from=gmail.com X-Suspicious-Flag: YES X-Classification-ID: dd73d32c-7d89-11ec-941d-525400534f55-1-1 Received: from [216.105.38.7] ([216.105.38.7:57344] helo=lists.sourceforge.net) by smtp29.gate.iad3b.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 75/01-08843-AF56FE16; Mon, 24 Jan 2022 21:52:42 -0500 Received: from [127.0.0.1] (helo=sfs-ml-4.v29.lw.sourceforge.com) by sfs-ml-4.v29.lw.sourceforge.com with esmtp (Exim 4.94.2) (envelope-from ) id 1nCBvs-0006XL-It; Tue, 25 Jan 2022 02:51:43 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-4.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nCBvr-0006XF-Jx for openvpn-devel@lists.sourceforge.net; Tue, 25 Jan 2022 02:51:42 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:In-Reply-To:References:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=jkzMhs/mqldpLLboYUeFepVipiF9vczUwvCgcQHAmBI=; b=HSKAPciIVTiypje9g8ez30bfzR W6L9pAV6OjWXxzydhez+Q7OcfRqEUdTCsWwnzU9tdSekp7f94K71gTzQRaK2AgKAA+cGEW8BuemST 5Et6/BqaAKsG0c5e/7pj8ZT6QCWHWoD3mLJA3QquB0bnlIVFcMn4zuEoTYH5cnhVVxtw=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:Message-Id:Date:Subject:Cc:To:From :Sender:Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Id:List-Help:List-Unsubscribe:List-Subscribe:List-Post: List-Owner:List-Archive; bh=jkzMhs/mqldpLLboYUeFepVipiF9vczUwvCgcQHAmBI=; b=g b1ebb6asuAgfq7bETf0UiVAvZIgcGIek6uVIEDi00WcpbiRAMM/DlZ+G3FGKFVtCra0GNJGBD5FSQ PJziTdYJTz651hTq20KXQBZJaw4HYhlQayw1IOjvMXdj5ryOz4fWd46YbEOAvl9OZEr9gxXl6Er/h sly5RLb/be7F5koU=; Received: from mail-qt1-f174.google.com ([209.85.160.174]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92.3) id 1nCBvp-000261-5X for openvpn-devel@lists.sourceforge.net; Tue, 25 Jan 2022 02:51:42 +0000 Received: by mail-qt1-f174.google.com with SMTP id b8so1280512qtt.8 for ; Mon, 24 Jan 2022 18:51:40 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=jkzMhs/mqldpLLboYUeFepVipiF9vczUwvCgcQHAmBI=; b=ZATNL8rEctqgj2nbREBp+ipmSU5uKtyW83XgOkx+wGaSKVJCPfsI2btcmxIdOCdVAa 0eNJRGB5RU4ZdHXs9BA9RG1mKqHl9s81lNuna7AyOp/QOkNu0WBHptnWnicGyEopBI6s HyLmygiqfwby2mrMjRqi9jiB2/7Jn1yzyvVKCbEbvnEUlmQ3Xo2h8HMD++J20ouwD7l4 6Uw72VTw//0oGY/iGuN6b5n8WWlGqDG4Hs2208CcXpXD3HxIELP6qAFfBSjBuBNb2NN3 SbW9w6nRd0OdP8j6fHHm98fnavue7t5m3Zzdhte0YFLfjUq1D1xaQRsUnpyyfpSmK85d qz3g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:mime-version :content-transfer-encoding; bh=jkzMhs/mqldpLLboYUeFepVipiF9vczUwvCgcQHAmBI=; b=JD+/MRRqYvJU0Y/DeX4oZgC080FyYkhu4LAlxtH410vleUzikZnMze8dzDJKKlNLqe 4HbfnyZ2KKdKn0jU6WHh4asYhUxo6BlubyovlOq4paUolPKkalkqFhqDwDMA6jpoEeTj /OW/tBNr5idvOgHlTTsoL3E8dwW3SP+2DY/ohSUdPgRELshoJ1WKUzQ+o8BizyCXINKv fAjffqgCdQG8OtsrBAlOFJh9P2RMIecADB0W/2im4ylm3EMe8dwZklu2x4BYf03r5e1p x4kdz9OC6Jiv9/EIRFAdCF7vfUNXGzYVVIFf57Vid3995f+7ZjSP6lxvk1WsnGClB7ua OqcQ== X-Gm-Message-State: AOAM5307kaavdOzbz27Mr//Ibrv80sM01XRpCZCx28iTg8tU478NWiVO ieSsurZMr4Tfbu8tvTigt/CwK1Ge4pUQIQ== X-Google-Smtp-Source: ABdhPJw2g05kaXoNyldqutK0rhFNkg8dzyU/2TEMdI98K0bDcTa97tRjB4XwD77zohhMkxanZk07vw== X-Received: by 2002:a05:622a:110f:: with SMTP id e15mr7145152qty.68.1643079093336; Mon, 24 Jan 2022 18:51:33 -0800 (PST) Received: from uranus.home.sansel.ca (bras-vprn-tnhlon4053w-lp130-03-70-53-19-97.dsl.bell.ca. [70.53.19.97]) by smtp.gmail.com with ESMTPSA id g21sm8027663qtb.49.2022.01.24.18.51.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jan 2022 18:51:32 -0800 (PST) From: selva.nair@gmail.com To: openvpn-devel@lists.sourceforge.net Date: Mon, 24 Jan 2022 21:51:26 -0500 Message-Id: <20220125025128.2117-1-selva.nair@gmail.com> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 X-Spam-Report: Spam detection software, running on the system "util-spamd-1.v13.lw.sourceforge.com", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Selva Nair D_XKEY = loglev(6, 69, M_DEBUG) is defined and used for all low level debug messages from xkey_provider.c and xkey_helper.c As suggested by Arne Schwabe Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [selva.nair[at]gmail.com] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [209.85.160.174 listed in wl.mailspike.net] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.160.174 listed in list.dnswl.org] -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-Headers-End: 1nCBvp-000261-5X Subject: [Openvpn-devel] [PATCH 1/3] xkey: Use a custom error level for debug messages X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox From: Selva Nair D_XKEY = loglev(6, 69, M_DEBUG) is defined and used for all low level debug messages from xkey_provider.c and xkey_helper.c As suggested by Arne Schwabe Signed-off-by: Selva Nair Acked-By: Arne Schwabe --- src/openvpn/errlevel.h | 1 + src/openvpn/xkey_helper.c | 8 +-- src/openvpn/xkey_provider.c | 98 ++++++++++++++++++------------------- 3 files changed, 54 insertions(+), 53 deletions(-) diff --git a/src/openvpn/errlevel.h b/src/openvpn/errlevel.h index 602e48a8..94c6c282 100644 --- a/src/openvpn/errlevel.h +++ b/src/openvpn/errlevel.h @@ -113,6 +113,7 @@ #define D_TUN_RW LOGLEV(6, 69, M_DEBUG) /* show TUN/TAP reads/writes */ #define D_TAP_WIN_DEBUG LOGLEV(6, 69, M_DEBUG) /* show TAP-Windows driver debug info */ #define D_CLIENT_NAT LOGLEV(6, 69, M_DEBUG) /* show client NAT debug info */ +#define D_XKEY LOGLEV(6, 69, M_DEBUG) /* show xkey-provider debug info */ #define D_SHOW_KEYS LOGLEV(7, 70, M_DEBUG) /* show data channel encryption keys */ #define D_SHOW_KEY_SOURCE LOGLEV(7, 70, M_DEBUG) /* show data channel key source entropy */ diff --git a/src/openvpn/xkey_helper.c b/src/openvpn/xkey_helper.c index c667f7be..582bec5d 100644 --- a/src/openvpn/xkey_helper.c +++ b/src/openvpn/xkey_helper.c @@ -65,7 +65,7 @@ int xkey_digest(const unsigned char *src, size_t srclen, unsigned char *buf, size_t *buflen, const char *mdname) { - dmsg(D_LOW, "In xkey_digest"); + dmsg(D_XKEY, "In xkey_digest"); EVP_MD *md = EVP_MD_fetch(NULL, mdname, NULL); /* from default context */ if (!md) { @@ -163,7 +163,7 @@ int xkey_management_sign(void *unused, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen, XKEY_SIGALG alg) { - dmsg(D_LOW, "In xkey_management_sign with keytype = %s, op = %s", + dmsg(D_XKEY, "In xkey_management_sign with keytype = %s, op = %s", alg.keytype, alg.op); (void) unused; @@ -180,7 +180,7 @@ xkey_management_sign(void *unused, unsigned char *sig, size_t *siglen, /* if management client cannot do digest -- we do it here */ if (!strcmp(alg.op, "DigestSign") && !(flags & MF_EXTERNAL_KEY_DIGEST)) { - dmsg(D_LOW, "xkey_management_sign: computing digest"); + dmsg(D_XKEY, "xkey_management_sign: computing digest"); if (xkey_digest(tbs, tbslen, buf, &buflen, alg.mdname)) { tbs = buf; @@ -379,7 +379,7 @@ encode_pkcs1(unsigned char *enc, size_t *enc_len, const char *mdname, /* combine header and digest */ memcpy(enc, di->header, di->sz); memcpy(enc + di->sz, tbs, tbslen); - dmsg(D_LOW, "encode_pkcs1: digest length = %d encoded length = %d", + dmsg(D_XKEY, "encode_pkcs1: digest length = %d encoded length = %d", (int) tbslen, (int) out_len); ret = true; } diff --git a/src/openvpn/xkey_provider.c b/src/openvpn/xkey_provider.c index c2d560c5..9a02ed13 100644 --- a/src/openvpn/xkey_provider.c +++ b/src/openvpn/xkey_provider.c @@ -146,7 +146,7 @@ keymgmt_import_helper(XKEY_KEYDATA *key, const OSSL_PARAM params[]); static XKEY_KEYDATA * keydata_new() { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_KEYDATA *key = OPENSSL_zalloc(sizeof(*key)); if (!key) @@ -160,7 +160,7 @@ keydata_new() static void keydata_free(XKEY_KEYDATA *key) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); if (!key || key->refcount-- > 0) /* free when refcount goes to zero */ { @@ -181,7 +181,7 @@ keydata_free(XKEY_KEYDATA *key) static void * keymgmt_new(void *provctx) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_KEYDATA *key = keydata_new(); if (key) @@ -195,7 +195,7 @@ keymgmt_new(void *provctx) static void * keymgmt_load(const void *reference, size_t reference_sz) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); return NULL; } @@ -235,7 +235,7 @@ keymgmt_load(const void *reference, size_t reference_sz) static int keymgmt_import(void *keydata, int selection, const OSSL_PARAM params[], const char *name) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_KEYDATA *key = keydata; ASSERT(key); @@ -252,11 +252,11 @@ keymgmt_import(void *keydata, int selection, const OSSL_PARAM params[], const ch if (p && p->data_type == OSSL_PARAM_UTF8_STRING) { key->origin = EXTERNAL_KEY; - xkey_dmsg(D_LOW, "importing external key"); + xkey_dmsg(D_XKEY, "importing external key"); return keymgmt_import_helper(key, params); } - xkey_dmsg(D_LOW, "importing native key"); + xkey_dmsg(D_XKEY, "importing native key"); /* create a native public key and assign it to key->pubkey */ EVP_PKEY *pkey = NULL; @@ -293,14 +293,14 @@ keymgmt_import(void *keydata, int selection, const OSSL_PARAM params[], const ch } EVP_PKEY_CTX_free(ctx); - xkey_dmsg(D_LOW, "imported native %s key", EVP_PKEY_get0_type_name(pkey)); + xkey_dmsg(D_XKEY, "imported native %s key", EVP_PKEY_get0_type_name(pkey)); return 1; } static int rsa_keymgmt_import(void *keydata, int selection, const OSSL_PARAM params[]) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); return keymgmt_import(keydata, selection, params, "RSA"); } @@ -308,7 +308,7 @@ rsa_keymgmt_import(void *keydata, int selection, const OSSL_PARAM params[]) static int ec_keymgmt_import(void *keydata, int selection, const OSSL_PARAM params[]) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); return keymgmt_import(keydata, selection, params, "EC"); } @@ -321,7 +321,7 @@ ec_keymgmt_import(void *keydata, int selection, const OSSL_PARAM params[]) static const OSSL_PARAM * keymgmt_import_types(int selection) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); static const OSSL_PARAM key_types[] = { OSSL_PARAM_END }; @@ -335,7 +335,7 @@ keymgmt_import_types(int selection) static void keymgmt_free(void *keydata) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); keydata_free(keydata); } @@ -343,7 +343,7 @@ keymgmt_free(void *keydata) static int keymgmt_has(const void *keydata, int selection) { - xkey_dmsg(D_LOW, "selection = %d", selection); + xkey_dmsg(D_XKEY, "selection = %d", selection); const XKEY_KEYDATA *key = keydata; int ok = (key != NULL); @@ -366,7 +366,7 @@ keymgmt_match(const void *keydata1, const void *keydata2, int selection) const XKEY_KEYDATA *key1 = keydata1; const XKEY_KEYDATA *key2 = keydata2; - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); int ret = key1 && key2 && key1->pubkey && key2->pubkey; @@ -375,13 +375,13 @@ keymgmt_match(const void *keydata1, const void *keydata2, int selection) if (selection & OSSL_KEYMGMT_SELECT_KEYPAIR) { ret = ret && EVP_PKEY_eq(key1->pubkey, key2->pubkey); - xkey_dmsg(D_LOW, "checking key pair match: res = %d", ret); + xkey_dmsg(D_XKEY, "checking key pair match: res = %d", ret); } if (selection & OSSL_KEYMGMT_SELECT_DOMAIN_PARAMETERS) { ret = ret && EVP_PKEY_parameters_eq(key1->pubkey, key2->pubkey); - xkey_dmsg(D_LOW, "checking parameter match: res = %d", ret); + xkey_dmsg(D_XKEY, "checking parameter match: res = %d", ret); } return ret; @@ -391,7 +391,7 @@ keymgmt_match(const void *keydata1, const void *keydata2, int selection) static const OSSL_PARAM * keymgmt_gettable_params(void *provctx) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); static OSSL_PARAM gettable[] = { OSSL_PARAM_int(OSSL_PKEY_PARAM_BITS, NULL), @@ -405,7 +405,7 @@ keymgmt_gettable_params(void *provctx) static int keymgmt_get_params(void *keydata, OSSL_PARAM *params) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_KEYDATA *key = keydata; if (!key || !key->pubkey) @@ -422,7 +422,7 @@ keymgmt_get_params(void *keydata, OSSL_PARAM *params) static int keymgmt_import_helper(XKEY_KEYDATA *key, const OSSL_PARAM *params) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); const OSSL_PARAM *p; EVP_PKEY *pkey = NULL; @@ -490,7 +490,7 @@ keymgmt_import_helper(XKEY_KEYDATA *key, const OSSL_PARAM *params) { key->free = *(void **)p->data; } - xkey_dmsg(D_LOW, "imported external %s key", EVP_PKEY_get0_type_name(key->pubkey)); + xkey_dmsg(D_XKEY, "imported external %s key", EVP_PKEY_get0_type_name(key->pubkey)); return 1; } @@ -512,7 +512,7 @@ keymgmt_set_params(void *keydata, const OSSL_PARAM *params) XKEY_KEYDATA *key = keydata; ASSERT(key); - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); if (key->origin != OPENSSL_NATIVE) { @@ -533,7 +533,7 @@ keymgmt_set_params(void *keydata, const OSSL_PARAM *params) static const char * rsa_keymgmt_name(int id) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); return "RSA"; } @@ -541,7 +541,7 @@ rsa_keymgmt_name(int id) static const char * ec_keymgmt_name(int id) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); if (id == OSSL_OP_SIGNATURE) { @@ -555,7 +555,7 @@ ec_keymgmt_name(int id) return "ECDH"; } - msg(D_LOW, "xkey ec_keymgmt_name called with op_id != SIGNATURE or KEYEXCH id=%d", id); + msg(D_XKEY, "xkey ec_keymgmt_name called with op_id != SIGNATURE or KEYEXCH id=%d", id); return "EC"; } @@ -666,7 +666,7 @@ xkey_mdname(const char *name) static void * signature_newctx(void *provctx, const char *propq) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); (void) propq; /* unused */ @@ -686,7 +686,7 @@ signature_newctx(void *provctx, const char *propq) static void signature_freectx(void *ctx) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_SIGNATURE_CTX *sctx = ctx; @@ -698,7 +698,7 @@ signature_freectx(void *ctx) static const OSSL_PARAM * signature_settable_ctx_params(void *ctx, void *provctx) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); static OSSL_PARAM settable[] = { OSSL_PARAM_utf8_string(OSSL_SIGNATURE_PARAM_PAD_MODE, NULL, 0), @@ -713,7 +713,7 @@ signature_settable_ctx_params(void *ctx, void *provctx) static int signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_SIGNATURE_CTX *sctx = ctx; const OSSL_PARAM *p; @@ -740,7 +740,7 @@ signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]) (char *)p->data); sctx->sigalg.padmode = "none"; } - xkey_dmsg(D_LOW, "setting padmode as %s", sctx->sigalg.padmode); + xkey_dmsg(D_XKEY, "setting padmode as %s", sctx->sigalg.padmode); } else if (p && p->data_type == OSSL_PARAM_INTEGER) { @@ -762,7 +762,7 @@ signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]) msg(M_WARN, "xkey signature_ctx: padmode <%d>, treating as ", padmode); sctx->sigalg.padmode = "none"; } - xkey_dmsg(D_LOW, "setting padmode <%s>", sctx->sigalg.padmode); + xkey_dmsg(D_XKEY, "setting padmode <%s>", sctx->sigalg.padmode); } else if (p) { @@ -773,7 +773,7 @@ signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]) if (p && p->data_type == OSSL_PARAM_UTF8_STRING) { sctx->sigalg.mdname = xkey_mdname(p->data); - xkey_dmsg(D_LOW, "setting hashalg as %s", sctx->sigalg.mdname); + xkey_dmsg(D_XKEY, "setting hashalg as %s", sctx->sigalg.mdname); } else if (p) { @@ -798,7 +798,7 @@ signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]) (char *)p->data); sctx->sigalg.saltlen = "digest"; /* most common */ } - xkey_dmsg(D_LOW, "setting saltlen to %s", sctx->sigalg.saltlen); + xkey_dmsg(D_XKEY, "setting saltlen to %s", sctx->sigalg.saltlen); } else if (p) { @@ -811,7 +811,7 @@ signature_set_ctx_params(void *ctx, const OSSL_PARAM params[]) static const OSSL_PARAM * signature_gettable_ctx_params(void *ctx, void *provctx) { - xkey_dmsg(D_LOW,"entry"); + xkey_dmsg(D_XKEY,"entry"); static OSSL_PARAM gettable[] = { OSSL_PARAM_END }; /* Empty list */ @@ -821,14 +821,14 @@ signature_gettable_ctx_params(void *ctx, void *provctx) static int signature_get_ctx_params(void *ctx, OSSL_PARAM params[]) { - xkey_dmsg(D_LOW, "not implemented"); + xkey_dmsg(D_XKEY, "not implemented"); return 0; } static int signature_sign_init(void *ctx, void *provkey, const OSSL_PARAM params[]) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_SIGNATURE_CTX *sctx = ctx; @@ -860,7 +860,7 @@ xkey_sign_dispatch(XKEY_SIGNATURE_CTX *sctx, unsigned char *sig, size_t *siglen, else if (sign) { ret = sign(sctx->keydata->handle, sig, siglen, tbs, tbslen, sctx->sigalg); - xkey_dmsg(D_LOW, "xkey_provider: external sign op returned ret = %d siglen = %d", ret, (int) *siglen); + xkey_dmsg(D_XKEY, "xkey_provider: external sign op returned ret = %d siglen = %d", ret, (int) *siglen); } else { @@ -874,7 +874,7 @@ static int signature_sign(void *ctx, unsigned char *sig, size_t *siglen, size_t sigsize, const unsigned char *tbs, size_t tbslen) { - xkey_dmsg(D_LOW, "entry with siglen = %zu\n", *siglen); + xkey_dmsg(D_XKEY, "entry with siglen = %zu\n", *siglen); XKEY_SIGNATURE_CTX *sctx = ctx; ASSERT(sctx); @@ -894,7 +894,7 @@ static int signature_digest_verify_init(void *ctx, const char *mdname, void *provkey, const OSSL_PARAM params[]) { - xkey_dmsg(D_LOW, "mdname <%s>", mdname); + xkey_dmsg(D_XKEY, "mdname <%s>", mdname); msg(M_WARN, "xkey_provider: DigestVerifyInit is not implemented"); return 0; @@ -908,7 +908,7 @@ static int signature_digest_verify(void *ctx, const unsigned char *sig, size_t siglen, const unsigned char *tbs, size_t tbslen) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); msg(M_WARN, "xkey_provider: DigestVerify is not implemented"); return 0; @@ -918,7 +918,7 @@ static int signature_digest_sign_init(void *ctx, const char *mdname, void *provkey, const OSSL_PARAM params[]) { - xkey_dmsg(D_LOW, "mdname = <%s>", mdname); + xkey_dmsg(D_XKEY, "mdname = <%s>", mdname); XKEY_SIGNATURE_CTX *sctx = ctx; @@ -950,7 +950,7 @@ static int signature_digest_sign(void *ctx, unsigned char *sig, size_t *siglen, size_t sigsize, const unsigned char *tbs, size_t tbslen) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_SIGNATURE_CTX *sctx = ctx; @@ -1000,7 +1000,7 @@ int xkey_native_sign(XKEY_KEYDATA *key, unsigned char *sig, size_t *siglen, const unsigned char *tbs, size_t tbslen, XKEY_SIGALG sigalg) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); ASSERT(key); @@ -1019,7 +1019,7 @@ xkey_native_sign(XKEY_KEYDATA *key, unsigned char *sig, size_t *siglen, const char *mdname = sigalg.mdname; const char *padmode = sigalg.padmode; - xkey_dmsg(D_LOW, "digest=<%s>, padmode=<%s>, saltlen=<%s>", mdname, padmode, saltlen); + xkey_dmsg(D_XKEY, "digest=<%s>, padmode=<%s>, saltlen=<%s>", mdname, padmode, saltlen); int i = 0; OSSL_PARAM params[6]; @@ -1090,7 +1090,7 @@ static OSSL_FUNC_provider_teardown_fn teardown; static const OSSL_ALGORITHM * query_operation(void *provctx, int op, int *no_store) { - xkey_dmsg(D_LOW, "op = %d", op); + xkey_dmsg(D_XKEY, "op = %d", op); *no_store = 0; @@ -1103,7 +1103,7 @@ query_operation(void *provctx, int op, int *no_store) return keymgmts; default: - xkey_dmsg(D_LOW, "op not supported"); + xkey_dmsg(D_XKEY, "op not supported"); break; } return NULL; @@ -1112,7 +1112,7 @@ query_operation(void *provctx, int op, int *no_store) static const OSSL_PARAM * gettable_params(void *provctx) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); static const OSSL_PARAM param_types[] = { OSSL_PARAM_DEFN(OSSL_PROV_PARAM_NAME, OSSL_PARAM_UTF8_PTR, NULL, 0), @@ -1126,7 +1126,7 @@ get_params(void *provctx, OSSL_PARAM params[]) { OSSL_PARAM *p; - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); p = OSSL_PARAM_locate(params, OSSL_PROV_PARAM_NAME); if (p) @@ -1140,7 +1140,7 @@ get_params(void *provctx, OSSL_PARAM params[]) static void teardown(void *provctx) { - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); XKEY_PROVIDER_CTX *prov = provctx; if (prov && prov->libctx) @@ -1164,7 +1164,7 @@ xkey_provider_init(const OSSL_CORE_HANDLE *handle, const OSSL_DISPATCH *in, { XKEY_PROVIDER_CTX *prov; - xkey_dmsg(D_LOW, "entry"); + xkey_dmsg(D_XKEY, "entry"); prov = OPENSSL_zalloc(sizeof(*prov)); if (!prov) From patchwork Mon Jan 24 15:51:27 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selva Nair X-Patchwork-Id: 2252 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director13.mail.ord1d.rsapps.net ([172.31.255.6]) by backend41.mail.ord1d.rsapps.net with LMTP id GEbfOvxl72EiCAAAqwncew (envelope-from ) for ; Mon, 24 Jan 2022 21:52:44 -0500 Received: from proxy5.mail.iad3b.rsapps.net ([172.31.255.6]) by director13.mail.ord1d.rsapps.net with LMTP id SB51Ff1l72E+bwAA91zNiA (envelope-from ) for ; Mon, 24 Jan 2022 21:52:45 -0500 Received: from smtp26.gate.iad3b ([172.31.255.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy5.mail.iad3b.rsapps.net with LMTPS id cAYLEP1l72H1LgAA13hMnw (envelope-from ) for ; Mon, 24 Jan 2022 21:52:45 -0500 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp26.gate.iad3b.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dkim=fail (signature verification failed) header.d=gmail.com; dmarc=fail (p=none; dis=none) header.from=gmail.com X-Suspicious-Flag: YES X-Classification-ID: dec4e6ee-7d89-11ec-96d4-5254001088d3-1-1 Received: from [216.105.38.7] ([216.105.38.7:33786] helo=lists.sourceforge.net) by smtp26.gate.iad3b.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id 07/F0-18258-CF56FE16; Mon, 24 Jan 2022 21:52:45 -0500 Received: from [127.0.0.1] (helo=sfs-ml-1.v29.lw.sourceforge.com) by sfs-ml-1.v29.lw.sourceforge.com with esmtp (Exim 4.94.2) (envelope-from ) id 1nCBvu-000647-8H; Tue, 25 Jan 2022 02:51:44 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-1.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nCBvt-000641-BC for openvpn-devel@lists.sourceforge.net; Tue, 25 Jan 2022 02:51:43 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=yQqKDUXJk7hRpr3/3ocPS8nnj47PDXiwbGj3JQ1fzSs=; b=gmNxS/h2Re/I2oM99lRVqFGC7K clV0DMwrgQRexDWuuzegQ6zZjO342/HmiOOvFlKiOLQe+qR8gEbX4n+os5AlNx1FiiLe2EkAi1ad2 sRA6dt4MXIunDxhXYeewiIKh6otMlu8igZ2G2y4KbPNRl7wF3Qfp6uPc8GllKMKAM4rs=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=yQqKDUXJk7hRpr3/3ocPS8nnj47PDXiwbGj3JQ1fzSs=; b=cY/9hVpOeO2/e4Wr4Sl3EpWd4B eWKBG4KTbGKXc54es+zV04yKaGql7MTp/O7HDgtMEknQom8+vJ4PEqx06RTwfiM5He1DbMAQGQ6TG hDatGCSfNWkuA8Mm8sryzIBL7c08ZShsNaJr7qvXRCOJmOhkUNpGQofU6XJ4HBgzXCV4=; Received: from mail-qt1-f177.google.com ([209.85.160.177]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92.3) id 1nCBvq-00026J-SJ for openvpn-devel@lists.sourceforge.net; Tue, 25 Jan 2022 02:51:43 +0000 Received: by mail-qt1-f177.google.com with SMTP id b5so4623948qtq.11 for ; Mon, 24 Jan 2022 18:51:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=yQqKDUXJk7hRpr3/3ocPS8nnj47PDXiwbGj3JQ1fzSs=; b=DHW98B/nmXfj1RCJiCCkvWWQSPuRf/bgXAtkdosavccYhx6vMaxVhMSZ7Y9u3RMgBc /KUiPAhqGfdRXoUFWnE7jlUXcmLD+fyh9LG240VTRZAT5/deE/c+pwnfsyMJYN9BK/rS 3NfNsEimMy9B4LTZk0LYTryo2HdR6r2y5ulUzwgjOR/aV3/dus37clX9J+uyMBIrLo30 zaEact2YCVRsWuaJZKlDd7TROhJ8pIuj2zTspvW3GpFb0kq1hUD1eKVrUgEffFEf7QB5 Sc9iFPadJ7kdWOlHabRqj8RvX+8dUAt+cWYwYyKEe6/v3f6gGfNeaVKUkTyjqGrz2LcW 7c8g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=yQqKDUXJk7hRpr3/3ocPS8nnj47PDXiwbGj3JQ1fzSs=; b=548df1zzlLBIAb/kCQxRETfvOimgh5BYlCFCTdHwW7O0VK+XZn7kGj1Odn/sMxkcNe D1JF+BQYlsNJ/vP9vwod90En0/7kXuJqr2ia1TQmqRN+b/WyTdpi99eZdzFFUtUYZBze WTsQpUNna4fuoV4FyYp3VJCdDEWBh6GKHp6Cll5HjBNUitMgJT4qwtSEjiM2ziyTJeAI wDH046CMbdnaY2oLoupVgcsusu+V44K3lHJQ7ZoDTaqLcK3yoJ+VcUlmMoUAaT3dMMwP zNukb2B7oFCo1F30GNJmk53puj34Eppbee/mQQdPAYPvrLlmEJh0+q6h2LwdhvrG8Q+7 T9oQ== X-Gm-Message-State: AOAM532gnS9yrn9//fOfHpbwo7R1Fft8zfZ/P1RJxtmW7qB/WO8oT/Be o1tjH5seck8aYn3wlbY1vCkNegDC7E7OJw== X-Google-Smtp-Source: ABdhPJwSQumHSijBKpJ3szn+/cbKbtYTv4cThY5Zpo5m9pjJiWSRR4jqPJ0izorOnOVn+3RpCZU7Gg== X-Received: by 2002:ac8:4e90:: with SMTP id 16mr15217835qtp.527.1643079095380; Mon, 24 Jan 2022 18:51:35 -0800 (PST) Received: from uranus.home.sansel.ca (bras-vprn-tnhlon4053w-lp130-03-70-53-19-97.dsl.bell.ca. [70.53.19.97]) by smtp.gmail.com with ESMTPSA id g21sm8027663qtb.49.2022.01.24.18.51.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jan 2022 18:51:34 -0800 (PST) From: selva.nair@gmail.com To: openvpn-devel@lists.sourceforge.net Date: Mon, 24 Jan 2022 21:51:27 -0500 Message-Id: <20220125025128.2117-2-selva.nair@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220125025128.2117-1-selva.nair@gmail.com> References: <20220125025128.2117-1-selva.nair@gmail.com> MIME-Version: 1.0 X-Spam-Report: Spam detection software, running on the system "util-spamd-1.v13.lw.sourceforge.com", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Selva Nair (nbits - 1)/8 should have been rounded up. Fix and move it to an inlined function for reuse in pkcs11_openssl.c (used in the next commit). Note: The error is not triggered in normal use as OpenSSL always seems to use saltlen="digest" for signing. Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.160.177 listed in list.dnswl.org] 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [selva.nair[at]gmail.com] 0.0 RCVD_IN_MSPIKE_H3 RBL: Good reputation (+3) [209.85.160.177 listed in wl.mailspike.net] -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature 0.0 RCVD_IN_MSPIKE_WL Mailspike good senders X-Headers-End: 1nCBvq-00026J-SJ Subject: [Openvpn-devel] [PATCH 2/3] Fix max saltlen calculation in cryptoapi.c X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox From: Selva Nair (nbits - 1)/8 should have been rounded up. Fix and move it to an inlined function for reuse in pkcs11_openssl.c (used in the next commit). Note: The error is not triggered in normal use as OpenSSL always seems to use saltlen="digest" for signing. Signed-off-by: Selva Nair Acked-By: Arne Schwabe --- src/openvpn/cryptoapi.c | 2 +- src/openvpn/xkey_common.h | 14 ++++++++++++++ 2 files changed, 15 insertions(+), 1 deletion(-) diff --git a/src/openvpn/cryptoapi.c b/src/openvpn/cryptoapi.c index 8e0ceba7..56cab962 100644 --- a/src/openvpn/cryptoapi.c +++ b/src/openvpn/cryptoapi.c @@ -843,7 +843,7 @@ xkey_cng_rsa_sign(CAPI_DATA *cd, unsigned char *sig, size_t *siglen, const unsig int saltlen = tbslen; /* digest size by default */ if (!strcmp(sigalg.saltlen, "max")) { - saltlen = (EVP_PKEY_bits(cd->pubkey) - 1)/8 - tbslen - 2; + saltlen = xkey_max_saltlen(EVP_PKEY_bits(cd->pubkey), tbslen); if (saltlen < 0) { msg(M_NONFATAL, "Error in cryptoapicert: invalid salt length (%d)", saltlen); diff --git a/src/openvpn/xkey_common.h b/src/openvpn/xkey_common.h index 75ca5011..1e51e672 100644 --- a/src/openvpn/xkey_common.h +++ b/src/openvpn/xkey_common.h @@ -153,6 +153,20 @@ xkey_load_generic_key(OSSL_LIB_CTX *libctx, void *handle, EVP_PKEY *pubkey, extern OSSL_LIB_CTX *tls_libctx; /* Global */ +/** + * Maximum salt length for PSS signature. + * + * @param modBits Number of bits in RSA modulus + * @param hLen Length of digest to be signed + * @returns the maximum allowed salt length. Caller must check it's not < 0. + */ +static inline int +xkey_max_saltlen(int modBits, int hLen) +{ + int emLen = (modBits - 1 + 7)/8; /* ceil((modBits - 1)/8) */ + + return emLen - hLen - 2; +} #endif /* HAVE_XKEY_PROVIDER */ #endif /* XKEY_COMMON_H_ */ From patchwork Mon Jan 24 15:51:28 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Selva Nair X-Patchwork-Id: 2250 Return-Path: Delivered-To: patchwork@openvpn.net Delivered-To: patchwork@openvpn.net Received: from director15.mail.ord1d.rsapps.net ([172.30.191.6]) by backend41.mail.ord1d.rsapps.net with LMTP id YLeqLvll72EiCAAAqwncew (envelope-from ) for ; Mon, 24 Jan 2022 21:52:41 -0500 Received: from proxy1.mail.ord1d.rsapps.net ([172.30.191.6]) by director15.mail.ord1d.rsapps.net with LMTP id sK4zCfpl72FkcwAAIcMcQg (envelope-from ) for ; Mon, 24 Jan 2022 21:52:42 -0500 Received: from smtp40.gate.ord1c ([172.30.191.6]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) by proxy1.mail.ord1d.rsapps.net with LMTPS id 2F3zCPpl72FcIgAAasrz9Q (envelope-from ) for ; Mon, 24 Jan 2022 21:52:42 -0500 X-Spam-Threshold: 95 X-Spam-Score: 0 X-Spam-Flag: NO X-Virus-Scanned: OK X-Orig-To: openvpnslackdevel@openvpn.net X-Originating-Ip: [216.105.38.7] Authentication-Results: smtp40.gate.ord1c.rsapps.net; iprev=pass policy.iprev="216.105.38.7"; spf=pass smtp.mailfrom="openvpn-devel-bounces@lists.sourceforge.net" smtp.helo="lists.sourceforge.net"; dkim=fail (signature verification failed) header.d=sourceforge.net; dkim=fail (signature verification failed) header.d=sf.net; dkim=fail (signature verification failed) header.d=gmail.com; dmarc=fail (p=none; dis=none) header.from=gmail.com X-Suspicious-Flag: YES X-Classification-ID: dcf531de-7d89-11ec-b592-525400b3abc9-1-1 Received: from [216.105.38.7] ([216.105.38.7:53796] helo=lists.sourceforge.net) by smtp40.gate.ord1c.rsapps.net (envelope-from ) (ecelerity 4.2.38.62370 r(:)) with ESMTPS (cipher=DHE-RSA-AES256-GCM-SHA384) id B8/4F-02554-9F56FE16; Mon, 24 Jan 2022 21:52:41 -0500 Received: from [127.0.0.1] (helo=sfs-ml-2.v29.lw.sourceforge.com) by sfs-ml-2.v29.lw.sourceforge.com with esmtp (Exim 4.94.2) (envelope-from ) id 1nCBvx-0007io-7W; Tue, 25 Jan 2022 02:51:48 +0000 Received: from [172.30.20.202] (helo=mx.sourceforge.net) by sfs-ml-2.v29.lw.sourceforge.com with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1nCBvv-0007ii-BC for openvpn-devel@lists.sourceforge.net; Tue, 25 Jan 2022 02:51:46 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sourceforge.net; s=x; h=Content-Transfer-Encoding:MIME-Version:References: In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type: Content-ID:Content-Description:Resent-Date:Resent-From:Resent-Sender: Resent-To:Resent-Cc:Resent-Message-ID:List-Id:List-Help:List-Unsubscribe: List-Subscribe:List-Post:List-Owner:List-Archive; bh=Vxo0K1B4iMeCr6MbPwTxjFvXnu0JAx57bmNGmAuXGAo=; b=EcjDlg2JTn8+3Cyyrben1SjnTl KR3sgBYXXkIBRv4jbWg+pr2GPr8BAr+3RiWeWPQ1MCoHQLWf3l8yTyI2fYtNVTWBrTUPFNQbozqP8 we9Lc8V1OEfwqEzK7yG5nOA8tpIorv9vkL2LA9lHYMznJEcPKlaauwJa/EUuDoML3ldc=; DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=sf.net; s=x ; h=Content-Transfer-Encoding:MIME-Version:References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:Content-Type:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Id:List-Help:List-Unsubscribe:List-Subscribe: List-Post:List-Owner:List-Archive; bh=Vxo0K1B4iMeCr6MbPwTxjFvXnu0JAx57bmNGmAuXGAo=; b=kmrNRFInJzRRWCEl1+p0eoT8OL IxJeblbyvJr/FLEGCrb547qY7E9PUZd/MeYvC3nf5sP8Yh5UCb1jXFvZ42xZKRJKMtjm2Go0FBnch nQNUY0/t21oeRTeKR72qqs2zY64v8tdOL4GH+vrl4L/u6OxBghSJzy5JiueKZTXBGAwY=; Received: from mail-qk1-f169.google.com ([209.85.222.169]) by sfi-mx-2.v28.lw.sourceforge.com with esmtps (TLSv1.2:ECDHE-RSA-AES128-GCM-SHA256:128) (Exim 4.92.3) id 1nCBvq-00026N-TO for openvpn-devel@lists.sourceforge.net; Tue, 25 Jan 2022 02:51:46 +0000 Received: by mail-qk1-f169.google.com with SMTP id g145so7451502qke.3 for ; Mon, 24 Jan 2022 18:51:42 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=Vxo0K1B4iMeCr6MbPwTxjFvXnu0JAx57bmNGmAuXGAo=; b=QC/m6SRTvuu0BYSFJjxcXq9aoYX0487qMO74zEbQdk1dBA9OZaKs2BePCzrbB6mz5O ZyadwvjTpyRccHbbzmYq3iEta1gmKimoIV02Obd9mgVaFHuN7Lup5a9adrokYpKQAbOr xPL0BlnpfS7aIf4r98qxafkGFzTPplWsoEqCj+19d2gIiPJh5INLzNGwqBlzk4+LweI8 cfQlVKhJsR+qGedqfMsqEciPPE8JeDaYUi5PGXQfFhi6GQU5b1aFQTlmUwz6W2EuodxE 0Pvy57nEY2bIxMTniTsjjBWXry8kdbGqMOhXoyUPNsXF4wbovvU2329qSbS/y0O8TOIz EhFQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references:mime-version:content-transfer-encoding; bh=Vxo0K1B4iMeCr6MbPwTxjFvXnu0JAx57bmNGmAuXGAo=; b=7qluUit65Spx9U9mUN2JkPhZ6HG4uK503oXLC75pjmda9eVkYImxYD+qiaOBC7nVe6 ZUI7YI2dSOFPGzYjXW5JnddnL+vQ5Znzon9Wcq1JQHcU6XlfKPvM7ve1RuhPHWO5BHUr XB1sagVr6oLnfSDO6TLxCLE9ge71xoSCcpeUzDIzYEjJkACsPGstMDGMyX+YQhbJDwji DzrcxCexoG1nokixHFD5oJ/miSdFHe0L/cYsi5B3LH8yZQ4SvfCdKORbhxMLG7wcGy28 xjKOIQvoHxXPHqNwdI52pX6wC9Nexj4jPc1sP9JNgbFbukTwIQrmKmrZLNzc6GaPZtkZ QmWg== X-Gm-Message-State: AOAM532OrtRk7zge0BPG+rAS9aacORyaCv7hccZpG4mbM4LYbMeexor9 1JrxEeR1iTumgh0jNyVP8PR2dEzuIXoVXQ== X-Google-Smtp-Source: ABdhPJywbu+9tH3/7APXipFzpIHQAyOXNysvzzRPaoW6g8sPVNDv/OQcNE5x+wJvYv8ho/CAuM2sVw== X-Received: by 2002:a05:620a:8dc:: with SMTP id z28mr13247965qkz.723.1643079096918; Mon, 24 Jan 2022 18:51:36 -0800 (PST) Received: from uranus.home.sansel.ca (bras-vprn-tnhlon4053w-lp130-03-70-53-19-97.dsl.bell.ca. [70.53.19.97]) by smtp.gmail.com with ESMTPSA id g21sm8027663qtb.49.2022.01.24.18.51.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 24 Jan 2022 18:51:36 -0800 (PST) From: selva.nair@gmail.com To: openvpn-devel@lists.sourceforge.net Date: Mon, 24 Jan 2022 21:51:28 -0500 Message-Id: <20220125025128.2117-3-selva.nair@gmail.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220125025128.2117-1-selva.nair@gmail.com> References: <20220125025128.2117-1-selva.nair@gmail.com> MIME-Version: 1.0 X-Spam-Report: Spam detection software, running on the system "util-spamd-1.v13.lw.sourceforge.com", has NOT identified this incoming email as spam. The original message has been attached to this so you can view it or label similar future email. If you have any questions, see the administrator of that system for details. Content preview: From: Selva Nair - Call pkcs11h_certificate_signAny_ex() when available so that the signature mechanism parameters can be pased. (Required for RSA-PSS signature). Signed-off-by: Selva Nair --- src/openvpn/pkcs11_openssl.c | 123 +++++++++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 5 deletions(-) Content analysis details: (-0.2 points, 6.0 required) pts rule name description ---- ---------------------- -------------------------------------------------- 0.0 SPF_HELO_NONE SPF: HELO does not publish an SPF Record -0.0 SPF_PASS SPF: sender matches SPF record 0.0 FREEMAIL_FROM Sender email is commonly abused enduser mail provider [selva.nair[at]gmail.com] -0.0 RCVD_IN_DNSWL_NONE RBL: Sender listed at https://www.dnswl.org/, no trust [209.85.222.169 listed in list.dnswl.org] -0.0 RCVD_IN_MSPIKE_H2 RBL: Average reputation (+2) [209.85.222.169 listed in wl.mailspike.net] -0.1 DKIM_VALID_EF Message has a valid DKIM or DK signature from envelope-from domain -0.1 DKIM_VALID_AU Message has a valid DKIM or DK signature from author's domain 0.1 DKIM_SIGNED Message has a DKIM or DK signature, not necessarily valid -0.1 DKIM_VALID Message has at least one valid DKIM or DK signature X-Headers-End: 1nCBvq-00026N-TO Subject: [Openvpn-devel] [PATCH 3/3] Support PSS signing using pkcs11-helper >= 1.28 X-BeenThere: openvpn-devel@lists.sourceforge.net X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: openvpn-devel-bounces@lists.sourceforge.net X-getmail-retrieved-from-mailbox: Inbox From: Selva Nair - Call pkcs11h_certificate_signAny_ex() when available so that the signature mechanism parameters can be pased. (Required for RSA-PSS signature). Signed-off-by: Selva Nair --- src/openvpn/pkcs11_openssl.c | 123 +++++++++++++++++++++++++++++++++-- 1 file changed, 118 insertions(+), 5 deletions(-) diff --git a/src/openvpn/pkcs11_openssl.c b/src/openvpn/pkcs11_openssl.c index 9cf46b2c..5d1a5de6 100644 --- a/src/openvpn/pkcs11_openssl.c +++ b/src/openvpn/pkcs11_openssl.c @@ -45,10 +45,112 @@ #ifdef HAVE_XKEY_PROVIDER static XKEY_EXTERNAL_SIGN_fn xkey_pkcs11h_sign; +#if PKCS11H_VERSION > ((1<<16) | (27<<8)) /* version > 1.27 */ + +/* Table linking OpenSSL digest NID with CKM and CKG constants in PKCS#11 */ +#define MD_TYPE(n) {NID_sha##n, CKM_SHA##n, CKG_MGF1_SHA##n} +static const struct +{ + int nid; + unsigned long ckm_id; + unsigned long mgf_id; +} mdtypes[] = {MD_TYPE(224), MD_TYPE(256), MD_TYPE(384), MD_TYPE(512), + {NID_sha1, CKM_SHA_1, CKG_MGF1_SHA1}, /* SHA_1 naming is an oddity */ + {NID_undef, 0, 0}}; + +/* From sigalg, derive parameters for pss signature and fill in pss_params. + * Its of type CK_RSA_PKCS_PSS_PARAMS struct with three fields to be filled in: + * {enum hashAlg, enum mgf, ulong sLen} + * where hashAlg is CKM_SHA256 etc., mgf is CKG_MGF1_SHA256 etc. + */ +static int +set_pss_params(CK_RSA_PKCS_PSS_PARAMS *pss_params, XKEY_SIGALG sigalg, + pkcs11h_certificate_t cert) +{ + int ret = 0; + X509 *x509 = NULL; + EVP_PKEY *pubkey = NULL; + + if ((x509 = pkcs11h_openssl_getX509(cert)) == NULL + || (pubkey = X509_get0_pubkey(x509)) == NULL) + { + msg(M_WARN, "PKCS#11: Unable get public key"); + goto cleanup; + } + + /* map mdname to CKM and CKG constants for hash and mgf algorithms */ + int i = 0; + int nid = OBJ_sn2nid(sigalg.mdname); + while (mdtypes[i].nid != NID_undef && mdtypes[i].nid != nid) + { + i++; + } + pss_params->hashAlg = mdtypes[i].ckm_id; + pss_params->mgf = mdtypes[i].mgf_id; + + /* determine salt length */ + int mdsize = EVP_MD_size(EVP_get_digestbyname(sigalg.mdname)); + + int saltlen = -1; + if (!strcmp(sigalg.saltlen, "digest")) /* same as digest size */ + { + saltlen = mdsize; + } + else if (!strcmp(sigalg.saltlen, "max")) /* maximum possible value */ + { + saltlen = xkey_max_saltlen(EVP_PKEY_get_bits(pubkey), mdsize); + } + + if (saltlen < 0 || pss_params->hashAlg == 0) + { + msg(M_WARN, "WARN: invalid RSA_PKCS1_PSS parameters: saltlen = <%s> " + "mdname = <%s>.", sigalg.saltlen, sigalg.mdname); + goto cleanup; + } + pss_params->sLen = (unsigned long) saltlen; /* saltlen >= 0 at this point */ + + msg(D_XKEY, "set_pss_params: sLen = %lu, hashAlg = %lu, mgf = %lu", + pss_params->sLen, pss_params->hashAlg, pss_params->mgf); + + ret = 1; + +cleanup: + if (x509) + { + X509_free(x509); + } + return ret; +} + +#else + +/* Make set_pss_params a no-op that always succeeds */ +#define set_pss_params(...) (1) + +/* Use a wrapper for pkcs11h_certificate_signAny_ex() for versions < 1.28 + * where its not available. + * We just call pkcs11h_certificate_signAny() unless the padding + * is PSS in which case we return an error. + */ +static CK_RV +pkcs11h_certificate_signAny_ex(const pkcs11h_certificate_t cert, + const CK_MECHANISM *mech, const unsigned char *tbs, + size_t tbslen, unsigned char *sig, size_t *siglen) +{ + if (mech->mechanism == CKM_RSA_PKCS_PSS) + { + msg(M_NONFATAL, "PKCS#11: Error: PSS padding is not supported by " + "this version of pkcs11-helper library."); + return CKR_MECHANISM_INVALID; + } + return pkcs11h_certificate_signAny(cert, mech->mechanism, tbs, tbslen, sig, siglen); +} +#endif /* PKCS11H_VERSION > 1.27 */ + /** * Sign op called from xkey provider * - * We support ECDSA, RSA_NO_PADDING, RSA_PKCS1_PADDING + * We support ECDSA, RSA_NO_PADDING, RSA_PKCS1_PADDING, RSA_PKCS_PSS_PADDING */ static int xkey_pkcs11h_sign(void *handle, unsigned char *sig, @@ -62,7 +164,7 @@ xkey_pkcs11h_sign(void *handle, unsigned char *sig, if (!strcmp(sigalg.op, "DigestSign")) { - dmsg(D_LOW, "xkey_pkcs11h_sign: computing digest"); + msg(D_XKEY, "xkey_pkcs11h_sign: computing digest"); if (xkey_digest(tbs, tbslen, buf, &buflen, sigalg.mdname)) { tbs = buf; @@ -77,18 +179,29 @@ xkey_pkcs11h_sign(void *handle, unsigned char *sig, if (!strcmp(sigalg.keytype, "EC")) { + msg(D_XKEY, "xkey_pkcs11h_sign: signing with EC key"); mech.mechanism = CKM_ECDSA; } else if (!strcmp(sigalg.keytype, "RSA")) { + msg(D_XKEY, "xkey_pkcs11h_sign: signing with RSA key: padmode = %s", + sigalg.padmode); if (!strcmp(sigalg.padmode,"none")) { mech.mechanism = CKM_RSA_X_509; } else if (!strcmp(sigalg.padmode, "pss")) { - msg(M_NONFATAL, "PKCS#11: Error: PSS padding is not yet supported."); - return 0; + CK_RSA_PKCS_PSS_PARAMS pss_params = {0}; + mech.mechanism = CKM_RSA_PKCS_PSS; + + if (!set_pss_params(&pss_params, sigalg, cert)) + { + return 0; + } + + mech.pParameter = &pss_params; + mech.ulParameterLen = sizeof(pss_params); } else if (!strcmp(sigalg.padmode, "pkcs1")) { @@ -114,7 +227,7 @@ xkey_pkcs11h_sign(void *handle, unsigned char *sig, ASSERT(0); /* coding error -- we couldnt have created any such key */ } - return CKR_OK == pkcs11h_certificate_signAny(cert, mech.mechanism, + return CKR_OK == pkcs11h_certificate_signAny_ex(cert, &mech, tbs, tbslen, sig, siglen); }