From: Jarkko Sakkinen <jarkko@kernel.org>
To: keyrings@vger.kernel.org
Cc: David Howells <dhowells@redhat.com>,
linux-crypto@vger.kernel.org, linux-integrity@vger.kernel.org,
David Woodhouse <dwmw2@infradead.org>,
James Bottomley <James.Bottomley@hansenpartnership.com>,
Stefan Berger <stefanb@linux.ibm.com>,
Herbert Xu <herbert@gondor.apana.org.au>,
Jarkko Sakkinen <jarkko@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
James Bottomley <James.Bottomley@HansenPartnership.com>,
Mimi Zohar <zohar@linux.ibm.com>,
Paul Moore <paul@paul-moore.com>,
James Morris <jmorris@namei.org>,
"Serge E. Hallyn" <serge@hallyn.com>,
linux-kernel@vger.kernel.org (open list),
linux-security-module@vger.kernel.org (open list:SECURITY
SUBSYSTEM)
Subject: [PATCH v8 1/3] lib/asn1_encoder: Add asn1_encode_integer_bytes()
Date: Sun, 24 May 2026 08:15:12 +0300 [thread overview]
Message-ID: <20260524051519.3708075-2-jarkko@kernel.org> (raw)
In-Reply-To: <20260524051519.3708075-1-jarkko@kernel.org>
Add a helper encoding a positive integer from a byte array in big-endian
format.
Signed-off-by: Jarkko Sakkinen <jarkko@kernel.org>
---
include/linux/asn1_encoder.h | 3 ++
lib/asn1_encoder.c | 62 ++++++++++++++++++++++++++++++++++++
2 files changed, 65 insertions(+)
diff --git a/include/linux/asn1_encoder.h b/include/linux/asn1_encoder.h
index d17484dffb74..e206bd425854 100644
--- a/include/linux/asn1_encoder.h
+++ b/include/linux/asn1_encoder.h
@@ -12,6 +12,9 @@ unsigned char *
asn1_encode_integer(unsigned char *data, const unsigned char *end_data,
s64 integer);
unsigned char *
+asn1_encode_integer_bytes(unsigned char *data, const unsigned char *end_data,
+ const unsigned char *integer, u32 integer_len);
+unsigned char *
asn1_encode_oid(unsigned char *data, const unsigned char *end_data,
u32 oid[], int oid_len);
unsigned char *
diff --git a/lib/asn1_encoder.c b/lib/asn1_encoder.c
index 92f35aae13b1..22e0acd6fe08 100644
--- a/lib/asn1_encoder.c
+++ b/lib/asn1_encoder.c
@@ -10,6 +10,8 @@
#include <linux/string.h>
#include <linux/module.h>
+static int asn1_encode_length(unsigned char **data, int *data_len, int len);
+
/**
* asn1_encode_integer() - encode positive integer to ASN.1
* @data: pointer to the pointer to the data
@@ -85,6 +87,66 @@ asn1_encode_integer(unsigned char *data, const unsigned char *end_data,
}
EXPORT_SYMBOL_GPL(asn1_encode_integer);
+/**
+ * asn1_encode_integer_bytes() - encode positive integer bytes 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
+ * @bytes: integer bytes
+ * @bytes_len: amount of bytes
+ *
+ * Encode a positive integer from a byte array in big-endian format. Strip
+ * leading zeros.
+ */
+unsigned char *
+asn1_encode_integer_bytes(unsigned char *data, const unsigned char *end_data,
+ const unsigned char *bytes, u32 bytes_len)
+{
+ static const unsigned char zero;
+ int data_len = end_data - data;
+ bool add_pad = false;
+ int ret;
+
+ if (IS_ERR(data))
+ return data;
+
+ if (!bytes || !bytes_len)
+ return ERR_PTR(-EINVAL);
+
+ /* Strip leading zeros: */
+ while (bytes_len > 1 && bytes[0] == 0) {
+ bytes++;
+ bytes_len--;
+ }
+
+ if (!bytes_len) {
+ bytes = &zero;
+ bytes_len = 1;
+ } else {
+ add_pad = bytes[0] & 0x80;
+ }
+
+ if (data_len < 2)
+ return ERR_PTR(-EINVAL);
+
+ *(data++) = _tag(UNIV, PRIM, INT);
+ data_len--;
+
+ ret = asn1_encode_length(&data, &data_len, bytes_len + add_pad);
+ if (ret)
+ return ERR_PTR(ret);
+
+ if (data_len < bytes_len + add_pad)
+ return ERR_PTR(-EINVAL);
+
+ if (add_pad)
+ *(data++) = 0;
+
+ memcpy(data, bytes, bytes_len);
+ data += bytes_len;
+ return data;
+}
+EXPORT_SYMBOL_GPL(asn1_encode_integer_bytes);
+
/* calculate the base 128 digit values setting the top bit of the first octet */
static int asn1_encode_oid_digit(unsigned char **_data, int *data_len, u32 oid)
{
--
2.47.3
next prev parent reply other threads:[~2026-05-24 5:15 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-24 5:15 [PATCH v8 0/3] Jarkko Sakkinen
2026-05-24 5:15 ` Jarkko Sakkinen [this message]
2026-05-24 5:15 ` [PATCH v8 2/3] crypto: Migrate TPMKey ASN.1 objects from trusted-keys Jarkko Sakkinen
2026-05-24 5:15 ` [PATCH v8 3/3] keys: asymmetric: tpm2_asymmetric Jarkko Sakkinen
2026-05-24 5:20 ` [PATCH v8 0/3] Jarkko Sakkinen
2026-05-24 23:18 ` Jarkko Sakkinen
2026-05-24 23:43 ` 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=20260524051519.3708075-2-jarkko@kernel.org \
--to=jarkko@kernel.org \
--cc=James.Bottomley@hansenpartnership.com \
--cc=akpm@linux-foundation.org \
--cc=dhowells@redhat.com \
--cc=dwmw2@infradead.org \
--cc=herbert@gondor.apana.org.au \
--cc=jmorris@namei.org \
--cc=keyrings@vger.kernel.org \
--cc=linux-crypto@vger.kernel.org \
--cc=linux-integrity@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=paul@paul-moore.com \
--cc=serge@hallyn.com \
--cc=stefanb@linux.ibm.com \
--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.