CoseSigner.Key теперь может иметь значение NULL

Теперь свойство CoseSigner.Key в .NET 10 может возвращать null. Если CoseSigner используется ключ RSA или ECDSA, возвращается CoseSigner.Key ненулевой ключ. Однако при CoseSigner поддержке ключа, который не является производным от AsymmetricAlgorithm( MLDsa нового алгоритма подписи PQC), CoseSigner.Key возвращается null.

Представленная версия

.NET 10

Предыдущее поведение

CoseSigner.Key Ранее не мог бытьnull. Он имел тип AsymmetricAlgorithm.

Новое поведение

Начиная с .NET 10, CoseSigner.Key может быть null. Его тип — AsymmetricAlgorithm?.

using RSA rsaKey = RSA.Create();

CoseSigner signer = new CoseSigner(rsaKey, RSASignaturePadding.Pss, HashAlgorithmName.SHA512);
// signer.Key is rsaKey here.

// CoseKey is a new abstraction for all keys used in COSE.
CoseKey coseKey = new CoseKey(rsaKey, RSASignaturePadding.Pss, HashAlgorithmName.SHA512);
signer = new CoseSigner(coseKey);
// signer.Key is rsaKey here.

using MLDsa mldsa = MLDsa.GenerateKey(MLDsaAlgorithm.MLDsa44);

coseKey = new CoseKey(mldsa);
signer = new CoseSigner(coseKey);
// signer.Key is null here.

Тип разрушающего изменения

Это изменение поведения , но оно также может повлиять на совместимость источников.

Причина изменения

При внедрении новых алгоритмов подписывания, таких как ML-DSA, .NET отошел от использования AsymmetricAlgorithm в качестве универсального базового класса для всех асимметричных алгоритмов. Аналогичным образом CoseSigner теперь можно создать с помощью ключа, который не является производным от AsymmetricAlgorithm. В этом случае CoseSigner.Key не удается вернуть базовый AsymmetricAlgorithm ключ и, таким образом, возвращается null .

Это все еще нормально использовать CoseSigner.Key , но обязательно обрабатывать null значения.

Затронутые API