Проблемы Bouncycastle Проверка данной подписи ECC с данным открытым ключом - PullRequest
0 голосов
/ 03 июля 2018

Я использую порт 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 работают нормально. У кого-нибудь есть идеи из опыта и т. Д.? Спасибо!

...