Я пытаюсь проверить подпись ecdsa (256), единственные данные, которые мне нужно сделать, это открытый ключ в указанном ниже формате, исходные данные и подпись:
string pubKey_ecdsa = "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAE+noecsW+vdfd8DNo5dsAxU4DOaNt6PGmSCLFo/EvQG4xmVzv464qXvDPIrPN8GtLnubzoa9rtWJD52VlGOpFsA==";
string data_ecdsa = ";\"4399901526945\";\"AAAA-BBBBBBBBB-123456789000\";\"5010112544615\";\"20130802063109143\";";
string signature_ecdsa = @"BEcwRQIgJFwnCvm8lRjlRt+G+f4viJktDYVyOiXUd5BJ0V761eECIQDBTHLjJI7KK3FhczEHjunenYWXylDdW91jbS23EmeznA==";
Когда я пытаюсь использовать надувной замок, чтобы проверить подпись, позвонив:
//Create the public key from string
AsymmetricKeyParameter pubKey = PublicKeyFactory.CreateKey(Convert.FromBase64String(pubKey_ecdsa));
// create byte array from string
byte[] b_signature = Convert.FromBase64String(signature_ecdsa);
ASCIIEncoding encoder = new ASCIIEncoding();
byte[] inputData = encoder.GetBytes(data_ecdsa);
ISigner signer = SignerUtilities.GetSigner("SHA-256withECDSA");
signer.Init(false, pubKey);
signer.BlockUpdate(inputData, 0, inputData.Length);
bool valid = signer.VerifySignature(b_signature);
Я получаю InvalidCastException
:
Unable to cast object of type 'Org.BouncyCastle.Asn1.DerOctetString'
to type 'Org.BouncyCastle.Asn1.Asn1Sequence'.
в следующей строке:
bool valid = signer.VerifySignature(b_signature);
Итак, с подписью что-то не так, но я не могу понять. Я надеюсь, что кто-нибудь может помочь с хорошей идеей.
Кстати, предоставленные данные в этом примере были изменены, поэтому подпись будет оценена как ложная, если она будет работать.