From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Cc: linux-integrity@vger.kernel.org, Mimi Zohar <zohar@linux.ibm.com>,
David Woodhouse <dwmw2@infradead.org>,
keyrings@vger.kernel.org
Subject: Re: [PATCH v6 1/6] lib: add ASN.1 encoder
Date: Tue, 03 Mar 2020 20:49:30 +0000 [thread overview]
Message-ID: <1583268570.3638.15.camel@HansenPartnership.com> (raw)
In-Reply-To: <20200303192208.GA5775@linux.intel.com>
On Tue, 2020-03-03 at 21:22 +0200, Jarkko Sakkinen wrote:
> On Mon, Mar 02, 2020 at 07:27:54AM -0500, James Bottomley wrote:
[...]
> > diff --git a/lib/asn1_encoder.c b/lib/asn1_encoder.c
> > new file mode 100644
> > index 000000000000..c7493667656e
> > --- /dev/null
> > +++ b/lib/asn1_encoder.c
> > @@ -0,0 +1,431 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/*
> > + * Simple encoder primitives for ASN.1 BER/DER/CER
> > + *
> > + * Copyright (C) 2019 James.Bottomley@HansenPartnership.com
> > + */
> > +
> > +#include <linux/asn1_encoder.h>
> > +#include <linux/bug.h>
> > +#include <linux/string.h>
> > +#include <linux/module.h>
> > +
> > +/**
> > + * asn1_encode_integer() - encode positive integer to ASN.1
> > + * @data: pointer to the pointer to the data
> > + * @end_data: end of data pointer, points one beyond last
> > usable byte in @data
> > + * @integer: integer to be encoded
> > + *
> > + * This is a simplified encoder: it only currently does
> > + * positive integers, but it should be simple enough to add the
> > + * negative case if a use comes along.
> > + */
> > +unsigned char *
> > +asn1_encode_integer(unsigned char *data, const unsigned char
> > *end_data,
> > + s64 integer)
> > +{
> > + unsigned char *d = &data[2];
>
> So what magic does index 2 contain?
ASN.1 has the form <tag> <length> <content> so a small integer has one
byte for the _tag(UNIV, PRIM, INT), one byte for the length, which must
be between 1 and 4, so the actual integer itself starts at 2.
> > + int i;
> > + bool found = false;
> > + int data_len = end_data - data;
>
> I'd reorder these:
>
> int data_len = end_data - data;
> unsigned char *d = &data[2];
> bool found = false;
> int i;
Ah, reverse Christmas tree ... I can do that.
> Reordering makes easier to comprehend the declarations.
>
> > +
> > + if (WARN(integer < 0,
> > + "BUG: integer encode only supports positive
> > integers"))
> > + return ERR_PTR(-EINVAL);
> > +
> > + if (IS_ERR(data))
> > + return data;
> > +
> > + /* need at least 3 bytes for tag, length and integer
> > encoding */
> > + if (data_len < 3)
> > + return ERR_PTR(-EINVAL);
> > +
> > + /* remaining length where at d (the start of the integer
> > encoding) */
> > + data_len -= 2;
> > +
> > + data[0] = _tag(UNIV, PRIM, INT);
> > + if (integer = 0) {
> > + *d++ = 0;
> > + goto out;
> > + }
> > +
> > + for (i = sizeof(integer); i > 0 ; i--) {
> > + int byte = integer >> (8*(i-1));
>
> Spacing (according to the kernel coding style) is wrong here.
OK, will add spaces around the brackets and the operations.
James
WARNING: multiple messages have this Message-ID (diff)
From: James Bottomley <James.Bottomley@HansenPartnership.com>
To: Jarkko Sakkinen <jarkko.sakkinen@linux.intel.com>
Cc: linux-integrity@vger.kernel.org, Mimi Zohar <zohar@linux.ibm.com>,
David Woodhouse <dwmw2@infradead.org>,
keyrings@vger.kernel.org
Subject: Re: [PATCH v6 1/6] lib: add ASN.1 encoder
Date: Tue, 03 Mar 2020 15:49:30 -0500 [thread overview]
Message-ID: <1583268570.3638.15.camel@HansenPartnership.com> (raw)
In-Reply-To: <20200303192208.GA5775@linux.intel.com>
On Tue, 2020-03-03 at 21:22 +0200, Jarkko Sakkinen wrote:
> On Mon, Mar 02, 2020 at 07:27:54AM -0500, James Bottomley wrote:
[...]
> > diff --git a/lib/asn1_encoder.c b/lib/asn1_encoder.c
> > new file mode 100644
> > index 000000000000..c7493667656e
> > --- /dev/null
> > +++ b/lib/asn1_encoder.c
> > @@ -0,0 +1,431 @@
> > +// SPDX-License-Identifier: GPL-2.0-only
> > +/*
> > + * Simple encoder primitives for ASN.1 BER/DER/CER
> > + *
> > + * Copyright (C) 2019 James.Bottomley@HansenPartnership.com
> > + */
> > +
> > +#include <linux/asn1_encoder.h>
> > +#include <linux/bug.h>
> > +#include <linux/string.h>
> > +#include <linux/module.h>
> > +
> > +/**
> > + * asn1_encode_integer() - encode positive integer to ASN.1
> > + * @data: pointer to the pointer to the data
> > + * @end_data: end of data pointer, points one beyond last
> > usable byte in @data
> > + * @integer: integer to be encoded
> > + *
> > + * This is a simplified encoder: it only currently does
> > + * positive integers, but it should be simple enough to add the
> > + * negative case if a use comes along.
> > + */
> > +unsigned char *
> > +asn1_encode_integer(unsigned char *data, const unsigned char
> > *end_data,
> > + s64 integer)
> > +{
> > + unsigned char *d = &data[2];
>
> So what magic does index 2 contain?
ASN.1 has the form <tag> <length> <content> so a small integer has one
byte for the _tag(UNIV, PRIM, INT), one byte for the length, which must
be between 1 and 4, so the actual integer itself starts at 2.
> > + int i;
> > + bool found = false;
> > + int data_len = end_data - data;
>
> I'd reorder these:
>
> int data_len = end_data - data;
> unsigned char *d = &data[2];
> bool found = false;
> int i;
Ah, reverse Christmas tree ... I can do that.
> Reordering makes easier to comprehend the declarations.
>
> > +
> > + if (WARN(integer < 0,
> > + "BUG: integer encode only supports positive
> > integers"))
> > + return ERR_PTR(-EINVAL);
> > +
> > + if (IS_ERR(data))
> > + return data;
> > +
> > + /* need at least 3 bytes for tag, length and integer
> > encoding */
> > + if (data_len < 3)
> > + return ERR_PTR(-EINVAL);
> > +
> > + /* remaining length where at d (the start of the integer
> > encoding) */
> > + data_len -= 2;
> > +
> > + data[0] = _tag(UNIV, PRIM, INT);
> > + if (integer == 0) {
> > + *d++ = 0;
> > + goto out;
> > + }
> > +
> > + for (i = sizeof(integer); i > 0 ; i--) {
> > + int byte = integer >> (8*(i-1));
>
> Spacing (according to the kernel coding style) is wrong here.
OK, will add spaces around the brackets and the operations.
James
next prev parent reply other threads:[~2020-03-03 20:49 UTC|newest]
Thread overview: 40+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-02 12:27 [PATCH v6 0/6] TPM 2.0 trusted keys with attached policy James Bottomley
2020-03-02 12:27 ` James Bottomley
2020-03-02 12:27 ` [PATCH v6 1/6] lib: add ASN.1 encoder James Bottomley
2020-03-02 12:27 ` James Bottomley
2020-03-03 19:22 ` Jarkko Sakkinen
2020-03-03 19:22 ` Jarkko Sakkinen
2020-03-03 20:49 ` James Bottomley [this message]
2020-03-03 20:49 ` James Bottomley
2020-03-03 21:31 ` Jarkko Sakkinen
2020-03-03 21:31 ` Jarkko Sakkinen
2020-03-02 12:27 ` [PATCH v6 2/6] oid_registry: Add TCG defined OIDS for TPM keys James Bottomley
2020-03-02 12:27 ` James Bottomley
2020-03-03 19:24 ` Jarkko Sakkinen
2020-03-03 19:24 ` Jarkko Sakkinen
2020-03-02 12:27 ` [PATCH v6 3/6] security: keys: trusted: fix TPM2 authorizations James Bottomley
2020-03-02 12:27 ` James Bottomley
2020-03-03 19:33 ` Jarkko Sakkinen
2020-03-03 19:33 ` Jarkko Sakkinen
2020-03-03 20:39 ` James Bottomley
2020-03-03 20:39 ` James Bottomley
2020-03-03 21:32 ` Jarkko Sakkinen
2020-03-03 21:32 ` Jarkko Sakkinen
2020-03-02 12:27 ` [PATCH v6 4/6] security: keys: trusted: use ASN.1 TPM2 key format for the blobs James Bottomley
2020-03-02 12:27 ` James Bottomley
2020-03-03 20:06 ` Jarkko Sakkinen
2020-03-03 20:06 ` Jarkko Sakkinen
2020-03-03 20:42 ` James Bottomley
2020-03-03 20:42 ` James Bottomley
2020-03-03 21:20 ` Jarkko Sakkinen
2020-03-03 21:20 ` Jarkko Sakkinen
2020-03-02 12:27 ` [PATCH v6 5/6] security: keys: trusted: add ability to specify arbitrary policy James Bottomley
2020-03-02 12:27 ` James Bottomley
2020-03-02 12:27 ` [PATCH v6 6/6] security: keys: trusted: implement counter/timer policy James Bottomley
2020-03-02 12:27 ` James Bottomley
2020-03-03 20:08 ` Jarkko Sakkinen
2020-03-03 20:08 ` Jarkko Sakkinen
2020-03-03 20:40 ` James Bottomley
2020-03-03 20:40 ` James Bottomley
2020-03-03 21:20 ` Jarkko Sakkinen
2020-03-03 21:20 ` Jarkko Sakkinen
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=1583268570.3638.15.camel@HansenPartnership.com \
--to=james.bottomley@hansenpartnership.com \
--cc=dwmw2@infradead.org \
--cc=jarkko.sakkinen@linux.intel.com \
--cc=keyrings@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=zohar@linux.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.