Я использую порт Bouncycastle C # Xamarin.iOS / Mono.Android и пытаюсь проверить подпись ECC с помощью кривой secp256r1 с заданным открытым ключом, который у меня есть локально на устройстве iOS / Android.
Генерация подписи выполняется на удаленном устройстве с отдельным закрытым ключом и отправляет его мне по каналу BLE. Когда я получаю его, я пытаюсь проверить это, используя следующий код.
myLocalPublicKey
и 'signatureFromDevice' равны byte[]
и установлены в другом месте
bool verify(byte[] signatureFromDevice)
{
bool status = false;
X9ECParameters curve = SecNamedCurves.GetByName("secp256r1");
string caString = Utilities.ByteArrayToString(myLocalPublicKey).Replace(" ", "");
Console.WriteLine("------ CA PUBLIC KEY " + Utilities.ByteArrayToString(myLocalPublicKey));
ECDomainParameters curveSpec = new ECDomainParameters(curve.Curve, curve.G, curve.N, curve.H, curve.GetSeed());
byte[] hex = Hex.Decode("04" + caString);
Org.BouncyCastle.Math.EC.ECPoint q = curve.Curve.DecodePoint(hex);
ECPublicKeyParameters publicKeyParameters = new ECPublicKeyParameters(q, curveSpec);
var signer = SignerUtilities.GetSigner("SHA-256withECDSA");
signer.Init(false, publicKeyParameters);
signer.BlockUpdate (message, 0, message.Length);
Console.WriteLine("------ SIGNATURE TO BE VERIFIED " + Utilities.ByteArrayToString(signatureFromDevice));
status = signer.VerifySignature(signatureFromDevice) // returns false
return status;
}
Но при запуске метод verifySignature () всегда возвращает false
Но мне еще предстоит найти какую-либо документацию по API и / или примеры в Интернете этого сценария или что проверить дальше, поскольку кажется, что ECPublicKeyParameters, ECPoint и ECurve работают нормально. У кого-нибудь есть идеи из опыта и т. Д.? Спасибо!