mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
keys: Support for ML-DSA module signing
-----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEqG5UsNXhtOCrfGQP+7dXa6fLC2sFAmmFu8gACgkQ+7dXa6fL C2t5UA//Zz3G9/libuvGx3tVuhaub8WQS43GNBN1h5Js0xkbGfhyBfAvGcX1xwiL VCrjZZsQbIp1oijr0G7P0KsGB1aVyBOYN7phLEYLsdDvqZt7mVMNSePq0xELPjMw tF2Ca7TIWx/GOlReInl4gxnzyBlDrYAyvrBCCU1SfQyTqDWQCbVPdFQJtJY2mY6j l5q2qBZ0QB4G34D5sPjYhc23kcl8BdNLzQGe9IRjVqHfDyWa1cBqAI6eQLMX3kt4 wJp8oWVrA/89nk2IwzTPJTIRJm16df4Cpa6Frr9o4CQi+5N8uPhxpN4iEc3G6EGn eZ8ohCoNhsG7k+nd2tSDvp/1kmqL261+rPXcw1MiHs49mTKp4a4r62O4Hdd2jMf4 dR0p2/jBiqeAT2jYuc6iQxfEvzTq8D6K4u0ThlUvE5EpIb2H7Gk8HcWFn5kBbnx/ VxGTPEkzwDn1jxg1VoPg59uT/7rYWVy1MjI54EyFuWmIz7W2J/5QsKFzSSpVn9nW eGuGZvL+EqMPS9GqQimfnwa27RNQZ4oJKr58OqJVEoyaNPoeQO2XlFT1kHWfK3tb RlncfRLqbZ27qpz50InOwHQvGoEW32cnf9SQPTKQpWDXaWe2Sb1wxLcmhsyhXFah erP33Ea3P76+JsXlw385Q33xa4dB/7IQT0kytr1i0kKm4lDlpho= =KaEy -----END PGP SIGNATURE----- Merge tag 'keys-next-20260206' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs Pull keys update from David Howells: "This adds support for ML-DSA signatures in X.509 certificates and PKCS#7/CMS messages, thereby allowing this algorithm to be used for signing modules, kexec'able binaries, wifi regulatory data, etc.. This requires OpenSSL-3.5 at a minimum and preferably OpenSSL-4 (so that it can avoid the use of CMS signedAttrs - but that version is not cut yet). certs/Kconfig does a check to hide the signing options if OpenSSL does not list the algorithm as being available" * tag 'keys-next-20260206' of git://git.kernel.org/pub/scm/linux/kernel/git/dhowells/linux-fs: pkcs7: Change a pr_warn() to pr_warn_once() pkcs7: Allow authenticatedAttributes for ML-DSA modsign: Enable ML-DSA module signing pkcs7, x509: Add ML-DSA support pkcs7: Allow the signing algo to do whatever digestion it wants itself pkcs7, x509: Rename ->digest to ->m x509: Separately calculate sha256 for blacklist crypto: Add ML-DSA crypto_sig support
This commit is contained in:
commit
b63c907203
20 changed files with 472 additions and 70 deletions
|
|
@ -27,7 +27,7 @@
|
|||
#include <openssl/evp.h>
|
||||
#include <openssl/pem.h>
|
||||
#include <openssl/err.h>
|
||||
#if OPENSSL_VERSION_MAJOR >= 3
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x30000000L
|
||||
# define USE_PKCS11_PROVIDER
|
||||
# include <openssl/provider.h>
|
||||
# include <openssl/store.h>
|
||||
|
|
@ -315,18 +315,39 @@ int main(int argc, char **argv)
|
|||
ERR(!digest_algo, "EVP_get_digestbyname");
|
||||
|
||||
#ifndef USE_PKCS7
|
||||
|
||||
unsigned int flags =
|
||||
CMS_NOCERTS |
|
||||
CMS_PARTIAL |
|
||||
CMS_BINARY |
|
||||
CMS_DETACHED |
|
||||
CMS_STREAM |
|
||||
CMS_NOSMIMECAP |
|
||||
#ifdef CMS_NO_SIGNING_TIME
|
||||
CMS_NO_SIGNING_TIME |
|
||||
#endif
|
||||
use_keyid;
|
||||
|
||||
#if OPENSSL_VERSION_NUMBER >= 0x30000000L && OPENSSL_VERSION_NUMBER < 0x40000000L
|
||||
if (EVP_PKEY_is_a(private_key, "ML-DSA-44") ||
|
||||
EVP_PKEY_is_a(private_key, "ML-DSA-65") ||
|
||||
EVP_PKEY_is_a(private_key, "ML-DSA-87")) {
|
||||
/* ML-DSA + CMS_NOATTR is not supported in openssl-3.5
|
||||
* and before.
|
||||
*/
|
||||
use_signed_attrs = 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
flags |= use_signed_attrs;
|
||||
|
||||
/* Load the signature message from the digest buffer. */
|
||||
cms = CMS_sign(NULL, NULL, NULL, NULL,
|
||||
CMS_NOCERTS | CMS_PARTIAL | CMS_BINARY |
|
||||
CMS_DETACHED | CMS_STREAM);
|
||||
cms = CMS_sign(NULL, NULL, NULL, NULL, flags);
|
||||
ERR(!cms, "CMS_sign");
|
||||
|
||||
ERR(!CMS_add1_signer(cms, x509, private_key, digest_algo,
|
||||
CMS_NOCERTS | CMS_BINARY |
|
||||
CMS_NOSMIMECAP | use_keyid |
|
||||
use_signed_attrs),
|
||||
ERR(!CMS_add1_signer(cms, x509, private_key, digest_algo, flags),
|
||||
"CMS_add1_signer");
|
||||
ERR(CMS_final(cms, bm, NULL, CMS_NOCERTS | CMS_BINARY) != 1,
|
||||
ERR(CMS_final(cms, bm, NULL, flags) != 1,
|
||||
"CMS_final");
|
||||
|
||||
#else
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue