diff options
Diffstat (limited to 'crypto/asymmetric_keys/public_key.c')
-rw-r--r-- | crypto/asymmetric_keys/public_key.c | 66 |
1 files changed, 23 insertions, 43 deletions
diff --git a/crypto/asymmetric_keys/public_key.c b/crypto/asymmetric_keys/public_key.c index 97eb001..cb2e291 100644 --- a/crypto/asymmetric_keys/public_key.c +++ b/crypto/asymmetric_keys/public_key.c @@ -22,25 +22,29 @@ MODULE_LICENSE("GPL"); -const char *const pkey_algo_name[PKEY_ALGO__LAST] = { +const char *const pkey_algo[PKEY_ALGO__LAST] = { [PKEY_ALGO_DSA] = "DSA", [PKEY_ALGO_RSA] = "RSA", }; -EXPORT_SYMBOL_GPL(pkey_algo_name); +EXPORT_SYMBOL_GPL(pkey_algo); -const struct public_key_algorithm *pkey_algo[PKEY_ALGO__LAST] = { -#if defined(CONFIG_PUBLIC_KEY_ALGO_RSA) || \ - defined(CONFIG_PUBLIC_KEY_ALGO_RSA_MODULE) - [PKEY_ALGO_RSA] = &RSA_public_key_algorithm, -#endif +const char *const pkey_hash_algo[PKEY_HASH__LAST] = { + [PKEY_HASH_MD4] = "md4", + [PKEY_HASH_MD5] = "md5", + [PKEY_HASH_SHA1] = "sha1", + [PKEY_HASH_RIPE_MD_160] = "rmd160", + [PKEY_HASH_SHA256] = "sha256", + [PKEY_HASH_SHA384] = "sha384", + [PKEY_HASH_SHA512] = "sha512", + [PKEY_HASH_SHA224] = "sha224", }; -EXPORT_SYMBOL_GPL(pkey_algo); +EXPORT_SYMBOL_GPL(pkey_hash_algo); -const char *const pkey_id_type_name[PKEY_ID_TYPE__LAST] = { +const char *const pkey_id_type[PKEY_ID_TYPE__LAST] = { [PKEY_ID_PGP] = "PGP", [PKEY_ID_X509] = "X509", }; -EXPORT_SYMBOL_GPL(pkey_id_type_name); +EXPORT_SYMBOL_GPL(pkey_id_type); /* * Provide a part of a description of the key for /proc/keys. @@ -52,7 +56,7 @@ static void public_key_describe(const struct key *asymmetric_key, if (key) seq_printf(m, "%s.%s", - pkey_id_type_name[key->id_type], key->algo->name); + pkey_id_type[key->id_type], key->algo->name); } /* @@ -74,45 +78,21 @@ EXPORT_SYMBOL_GPL(public_key_destroy); /* * Verify a signature using a public key. */ -int public_key_verify_signature(const struct public_key *pk, - const struct public_key_signature *sig) +static int public_key_verify_signature(const struct key *key, + const struct public_key_signature *sig) { - const struct public_key_algorithm *algo; - - BUG_ON(!pk); - BUG_ON(!pk->mpi[0]); - BUG_ON(!pk->mpi[1]); - BUG_ON(!sig); - BUG_ON(!sig->digest); - BUG_ON(!sig->mpi[0]); - - algo = pk->algo; - if (!algo) { - if (pk->pkey_algo >= PKEY_ALGO__LAST) - return -ENOPKG; - algo = pkey_algo[pk->pkey_algo]; - if (!algo) - return -ENOPKG; - } + const struct public_key *pk = key->payload.data; - if (!algo->verify_signature) + if (!pk->algo->verify_signature) return -ENOTSUPP; - if (sig->nr_mpi != algo->n_sig_mpi) { + if (sig->nr_mpi != pk->algo->n_sig_mpi) { pr_debug("Signature has %u MPI not %u\n", - sig->nr_mpi, algo->n_sig_mpi); + sig->nr_mpi, pk->algo->n_sig_mpi); return -EINVAL; } - return algo->verify_signature(pk, sig); -} -EXPORT_SYMBOL_GPL(public_key_verify_signature); - -static int public_key_verify_signature_2(const struct key *key, - const struct public_key_signature *sig) -{ - const struct public_key *pk = key->payload.data; - return public_key_verify_signature(pk, sig); + return pk->algo->verify_signature(pk, sig); } /* @@ -123,6 +103,6 @@ struct asymmetric_key_subtype public_key_subtype = { .name = "public_key", .describe = public_key_describe, .destroy = public_key_destroy, - .verify_signature = public_key_verify_signature_2, + .verify_signature = public_key_verify_signature, }; EXPORT_SYMBOL_GPL(public_key_subtype); |