Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4e8ae72a authored by David Howells's avatar David Howells
Browse files

X.509: Make algo identifiers text instead of enum



Make the identifier public key and digest algorithm fields text instead of
enum.

Signed-off-by: default avatarDavid Howells <dhowells@redhat.com>
Acked-by: default avatarHerbert Xu <herbert@gondor.apana.org.au>
parent d43de6c7
Loading
Loading
Loading
Loading
+7 −7
Original line number Diff line number Diff line
@@ -86,25 +86,25 @@ int mscode_note_digest_algo(void *context, size_t hdrlen,
	oid = look_up_OID(value, vlen);
	switch (oid) {
	case OID_md4:
		ctx->digest_algo = HASH_ALGO_MD4;
		ctx->digest_algo = "md4";
		break;
	case OID_md5:
		ctx->digest_algo = HASH_ALGO_MD5;
		ctx->digest_algo = "md5";
		break;
	case OID_sha1:
		ctx->digest_algo = HASH_ALGO_SHA1;
		ctx->digest_algo = "sha1";
		break;
	case OID_sha256:
		ctx->digest_algo = HASH_ALGO_SHA256;
		ctx->digest_algo = "sha256";
		break;
	case OID_sha384:
		ctx->digest_algo = HASH_ALGO_SHA384;
		ctx->digest_algo = "sha384";
		break;
	case OID_sha512:
		ctx->digest_algo = HASH_ALGO_SHA512;
		ctx->digest_algo = "sha512";
		break;
	case OID_sha224:
		ctx->digest_algo = HASH_ALGO_SHA224;
		ctx->digest_algo = "sha224";
		break;

	case OID__NR:
+8 −10
Original line number Diff line number Diff line
@@ -218,25 +218,25 @@ int pkcs7_sig_note_digest_algo(void *context, size_t hdrlen,

	switch (ctx->last_oid) {
	case OID_md4:
		ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_MD4;
		ctx->sinfo->sig.hash_algo = "md4";
		break;
	case OID_md5:
		ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_MD5;
		ctx->sinfo->sig.hash_algo = "md5";
		break;
	case OID_sha1:
		ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA1;
		ctx->sinfo->sig.hash_algo = "sha1";
		break;
	case OID_sha256:
		ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA256;
		ctx->sinfo->sig.hash_algo = "sha256";
		break;
	case OID_sha384:
		ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA384;
		ctx->sinfo->sig.hash_algo = "sha384";
		break;
	case OID_sha512:
		ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA512;
		ctx->sinfo->sig.hash_algo = "sha512";
		break;
	case OID_sha224:
		ctx->sinfo->sig.pkey_hash_algo = HASH_ALGO_SHA224;
		ctx->sinfo->sig.hash_algo = "sha224";
	default:
		printk("Unsupported digest algo: %u\n", ctx->last_oid);
		return -ENOPKG;
@@ -255,7 +255,7 @@ int pkcs7_sig_note_pkey_algo(void *context, size_t hdrlen,

	switch (ctx->last_oid) {
	case OID_rsaEncryption:
		ctx->sinfo->sig.pkey_algo = PKEY_ALGO_RSA;
		ctx->sinfo->sig.pkey_algo = "rsa";
		break;
	default:
		printk("Unsupported pkey algo: %u\n", ctx->last_oid);
@@ -615,8 +615,6 @@ int pkcs7_sig_note_signature(void *context, size_t hdrlen,
{
	struct pkcs7_parse_context *ctx = context;

	BUG_ON(ctx->sinfo->sig.pkey_algo != PKEY_ALGO_RSA);

	ctx->sinfo->sig.s = kmemdup(value, vlen, GFP_KERNEL);
	if (!ctx->sinfo->sig.s)
		return -ENOMEM;
+3 −5
Original line number Diff line number Diff line
@@ -31,17 +31,15 @@ static int pkcs7_digest(struct pkcs7_message *pkcs7,
	void *digest;
	int ret;

	kenter(",%u,%u", sinfo->index, sinfo->sig.pkey_hash_algo);
	kenter(",%u,%s", sinfo->index, sinfo->sig.hash_algo);

	if (sinfo->sig.pkey_hash_algo >= PKEY_HASH__LAST ||
	    !hash_algo_name[sinfo->sig.pkey_hash_algo])
	if (!sinfo->sig.hash_algo)
		return -ENOPKG;

	/* Allocate the hashing algorithm we're going to need and find out how
	 * big the hash operational data will be.
	 */
	tfm = crypto_alloc_shash(hash_algo_name[sinfo->sig.pkey_hash_algo],
				 0, 0);
	tfm = crypto_alloc_shash(sinfo->sig.hash_algo, 0, 0);
	if (IS_ERR(tfm))
		return (PTR_ERR(tfm) == -ENOENT) ? -ENOPKG : PTR_ERR(tfm);

+4 −20
Original line number Diff line number Diff line
@@ -24,19 +24,6 @@

MODULE_LICENSE("GPL");

const char *const pkey_algo_name[PKEY_ALGO__LAST] = {
	[PKEY_ALGO_DSA]		= "dsa",
	[PKEY_ALGO_RSA]		= "rsa",
};
EXPORT_SYMBOL_GPL(pkey_algo_name);

const char *const pkey_id_type_name[PKEY_ID_TYPE__LAST] = {
	[PKEY_ID_PGP]		= "PGP",
	[PKEY_ID_X509]		= "X509",
	[PKEY_ID_PKCS7]		= "PKCS#7",
};
EXPORT_SYMBOL_GPL(pkey_id_type_name);

/*
 * Provide a part of a description of the key for /proc/keys.
 */
@@ -46,9 +33,7 @@ static void public_key_describe(const struct key *asymmetric_key,
	struct public_key *key = asymmetric_key->payload.data[asym_crypto];

	if (key)
		seq_printf(m, "%s.%s",
			   pkey_id_type_name[key->id_type],
			   pkey_algo_name[key->pkey_algo]);
		seq_printf(m, "%s.%s", key->id_type, key->pkey_algo);
}

/*
@@ -103,15 +88,14 @@ int public_key_verify_signature(const struct public_key *pkey,
	BUG_ON(!sig->digest);
	BUG_ON(!sig->s);

	alg_name = pkey_algo_name[sig->pkey_algo];
	if (sig->pkey_algo == PKEY_ALGO_RSA) {
	alg_name = sig->pkey_algo;
	if (strcmp(sig->pkey_algo, "rsa") == 0) {
		/* The data wangled by the RSA algorithm is typically padded
		 * and encoded in some manner, such as EMSA-PKCS1-1_5 [RFC3447
		 * sec 8.2].
		 */
		if (snprintf(alg_name_buf, CRYPTO_MAX_ALG_NAME,
			     "pkcs1pad(rsa,%s)",
			     hash_algo_name[sig->pkey_hash_algo]
			     "pkcs1pad(rsa,%s)", sig->hash_algo
			     ) >= CRYPTO_MAX_ALG_NAME)
			return -EINVAL;
		alg_name = alg_name_buf;
+2 −2
Original line number Diff line number Diff line
@@ -328,12 +328,12 @@ static int pefile_digest_pe(const void *pebuf, unsigned int pelen,
	void *digest;
	int ret;

	kenter(",%u", ctx->digest_algo);
	kenter(",%s", ctx->digest_algo);

	/* Allocate the hashing algorithm we're going to need and find out how
	 * big the hash operational data will be.
	 */
	tfm = crypto_alloc_shash(hash_algo_name[ctx->digest_algo], 0, 0);
	tfm = crypto_alloc_shash(ctx->digest_algo, 0, 0);
	if (IS_ERR(tfm))
		return (PTR_ERR(tfm) == -ENOENT) ? -ENOPKG : PTR_ERR(tfm);

Loading