From: David Howells <dhowells@redhat.com>
To: Tadeusz Struk <tadeusz.struk@intel.com>
Cc: dhowells@redhat.com, herbert@gondor.apana.org.au,
keescook@chromium.org, jwboyer@redhat.com, smueller@chronox.de,
richard@nod.at, steved@redhat.com, linux-kernel@vger.kernel.org,
linux-crypto@vger.kernel.org, james.l.morris@oracle.com,
jkosina@suse.cz, zohar@linux.vnet.ibm.com, davem@davemloft.net,
vgoyal@redhat.com
Subject: Re: [PATCH 1/2] crypto: KEYS: convert public key to the akcipher API
Date: Thu, 13 Aug 2015 15:23:16 +0100 [thread overview]
Message-ID: <10795.1439475796@warthog.procyon.org.uk> (raw)
In-Reply-To: <20150813035439.25108.62457.stgit@tstruk-mobl1>
Tadeusz Struk <tadeusz.struk@intel.com> wrote:
> const char *const pkey_algo_name[PKEY_ALGO__LAST] = {
> - [PKEY_ALGO_DSA] = "DSA",
> - [PKEY_ALGO_RSA] = "RSA",
> + [PKEY_ALGO_DSA] = "dsa",
> + [PKEY_ALGO_RSA] = "rsa",
> };
Be aware that these are exposed to userspace through /proc. The change
probably doesn't matter, but you might need to update the documentation.
> +int public_key_verify_signature(const struct public_key *pkey,
> const struct public_key_signature *sig)
> {
> ...
> - return algo->verify_signature(pk, sig);
> + return rsa_pkcs1_v1_5_verify_signature(pkey, sig);
> }
No. You can't assume RSA here. It's quite likely we'll have to support ECDSA
or similar soon. This must be contingent on the algorithm selected.
> {
> const struct public_key *pk = key->payload.data;
> +
> return public_key_verify_signature(pk, sig);
> }
That's nothing to do with this patch.
> +static int rsa_signture_verify(const u8 *H, const u8 *EM, size_t k,
'signture' -> 'signature'.
> +/*
> + * Perform the RSA signature verification.
> + * @H: Value of hash of data and metadata
> + * @EM: The computed signature value
> + * @k: The size of EM (EM[0] is an invalid location but should hold 0x00)
> + * @hash_size: The size of H
> + * @asn1_template: The DigestInfo ASN.1 template
> + * @asn1_size: Size of asm1_template[]
> + */
> +static int rsa_signture_verify(const u8 *H, const u8 *EM, size_t k,
> + size_t hash_size, const u8 *asn1_template,
> + size_t asn1_size)
> +{
Why is this here and not in crypto/rsa.c?
> + /* initlialzie out buf */
'initialise'.
> - /* Decode the public key */
> - ret = asn1_ber_decoder(&x509_rsakey_decoder, ctx,
> - ctx->key, ctx->key_size);
> - if (ret < 0)
> + cert->pub->key = kmemdup(ctx->key, ctx->key_size, GFP_KERNEL);
> + if (!cert->pub->key)
> goto error_decode;
The generic public key code should *not* see the container wrappings (ASN.1
from an X.509 cert in this case). The public key could be supplied by OpenPGP
instead, for example, or directly by a driver.
Further, at this point, we need to make sure that the data we were given has
the right bits and emit EBADMSG if it doesn't.
Okay, I can accept that the public_key struct might just have a list of void *
and size_t fields that get filled in, one for each integer that we extract
rather than MPIs, but we should not expose the generic code to the stuff we've
parsed away.
> struct public_key {
> - const struct public_key_algorithm *algo;
> - u8 capabilities;
> -#define PKEY_CAN_ENCRYPT 0x01
> -#define PKEY_CAN_DECRYPT 0x02
> -#define PKEY_CAN_SIGN 0x04
> -#define PKEY_CAN_VERIFY 0x08
You still need the capabilities. The X.509 certificate and the OpenPGP
message indicate restrictions on the key that we need to honour.
David
next prev parent reply other threads:[~2015-08-13 14:23 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-13 3:54 [PATCH 0/2] crypto: KEYS: convert public key to the akcipher API Tadeusz Struk
2015-08-13 3:54 ` [PATCH 1/2] " Tadeusz Struk
2015-08-15 18:08 ` Stephan Mueller
2015-08-24 17:45 ` Tadeusz Struk
2015-08-13 3:54 ` [PATCH 2/2] crypto: qat - Don't move data inside output buffer Tadeusz Struk
2015-08-13 16:40 ` Tadeusz Struk
2015-08-14 5:14 ` Herbert Xu
2015-08-14 6:14 ` Tadeusz Struk
2015-08-14 6:26 ` Herbert Xu
2015-08-14 14:21 ` Tadeusz Struk
2015-08-17 8:48 ` Herbert Xu
2015-08-14 14:24 ` Tadeusz Struk
2015-08-17 8:50 ` Herbert Xu
2015-08-18 1:05 ` Tadeusz Struk
2015-08-18 2:39 ` Herbert Xu
2015-08-13 13:56 ` [PATCH 0/2] crypto: KEYS: convert public key to the akcipher API David Howells
2015-08-13 16:44 ` Tadeusz Struk
2015-08-13 14:23 ` David Howells [this message]
2015-08-13 16:47 ` [PATCH 1/2] " Tadeusz Struk
2015-08-14 1:09 ` Herbert Xu
2015-12-09 23:52 [PATCH 0/2] crypto: KEYS: convert public key to akcipher api Tadeusz Struk
2015-12-09 23:52 ` [PATCH 1/2] crypto: KEYS: convert public key to the " Tadeusz Struk
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=10795.1439475796@warthog.procyon.org.uk \
--to=dhowells@redhat.com \
--cc=davem@davemloft.net \
--cc=herbert@gondor.apana.org.au \
--cc=james.l.morris@oracle.com \
--cc=jkosina@suse.cz \
--cc=jwboyer@redhat.com \
--cc=keescook@chromium.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=richard@nod.at \
--cc=smueller@chronox.de \
--cc=steved@redhat.com \
--cc=tadeusz.struk@intel.com \
--cc=vgoyal@redhat.com \
--cc=zohar@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).