Зная немного о криптографии, у меня большие проблемы с тем, что кажется простой задачей.
У меня есть сертификат .pem, байты данных и подпись этих данных. Я хочу проверить, изменил ли кто-либо данные, сопоставив его с сигнатурой.
Моя попытка:
private bool VerifySignature(byte[] data, byte[] signature)
{
try
{
X509Certificate certificate = new X509Certificate("cert_filename.pem");
if (certificate == null)
return false;
DSACryptoServiceProvider dsa = (DSACryptoServiceProvider)certificate.PublicKey.Key;
return dsa.VerifyData(data, signatureData);
}
catch
{
return false;
}
}
Но это дает мне ошибку
'Алгоритм ключа сертификатов не поддерживается' (System.NotSupportedException).
В загруженном сертификате говорится, что алгоритм подписи является "sha1ecdsa".
Я пытаюсь проверить данные только подписи. Что мне здесь не хватает? Я бы хотел сделать это без каких-либо внешних решений, поскольку это кажется действительно тривиальной задачей.
Обновление: я пытаюсь достичь такой же функциональности, как в следующем Java-коде:
private boolean verify(byte[] data, byte[] signature)
{
boolean isLicenseCorrect = false;
Signature sig = Signature.getInstance("SHA1WithECDSA");
sig.initVerify(certificate.getPublicKey());
sig.update(data);
return sig.verify(signature);
}