ECDA签名验证失败
我正在签署Javacard小程序上的一些数据,然后在PC上的Java中对其进行验证。为了测试这一点,我有一条消息,我知道应该验证,但是在运行代码验证时会失败。
这是我的代码:
//message = byte array of message from java card
//signature = byte array of signature from java card
BigInteger bigIntX = new BigInteger(1, xArray);
BigInteger bigIntY = new BigInteger(1, yArray);
boolean verified = false;
ECPoint w = new ECPoint(bigIntX, bigIntY);
KeyFactory newKeyFact = KeyFactory.getInstance("EC");
ECNamedCurveParameterSpec paramSpec = ECNAMEDCurveTable.getParameterSpec("secp256r1");
ECParameterSpec params = new ECNamedCurveSpec("secp256r1", paramSpec.getCurve(), paramSpec.getG(), paramSpec.getN(), paramSpec.getH());
ECPublicKey ecPublicKey - (ECPublicKey) newKeyFact.generatePublic(new ECPublicKeySpec(w, params));
Signature sig = Signature.getInstance("SHA256withECDSAinP1363Format");
sig.initVerify(ecPublicKey);
sig.update(message);
verified = sig.verify(signature);
if (verified) {
//print True
} else {
//print false
}
验证永远不会设置为True,即使我知道此消息应该验证正常。我是否重新构建了钥匙?还是我缺少其他东西?
这是我的javacard代码生成签名的代码:
KeyPair key = new KeyPair(KeyPair.ALG_EC_FP, KeyBuilder.LENGTH_EC_FP_256);
ECPublicKey pubKey = (ECPublicKey) key.getPublic();
ECPrivateKey privKey = (ECPrivateKey) key.getPrivate();
initDomainParams(pubKey);
initDomainParams(privKey); //initDomainParams is just where I set A, B, G, R and K to the secp256r1 curve parameters using setA, setB etc
key.genKeyPair();
Signature sig = Signature.getInstance(Signature.ALG_ECDSA_SHA_256, false);
sig.init(key.getPrivate(), Signature.MODE_SIGN);
sig.sign(srcArr, srcoffset, srclength, destArr, destoffset);
I am signing some data on a Javacard applet, then verifying it in java on my PC. To test this I have a message I know should verify, but when running my code verification fails.
This is my code:
//message = byte array of message from java card
//signature = byte array of signature from java card
BigInteger bigIntX = new BigInteger(1, xArray);
BigInteger bigIntY = new BigInteger(1, yArray);
boolean verified = false;
ECPoint w = new ECPoint(bigIntX, bigIntY);
KeyFactory newKeyFact = KeyFactory.getInstance("EC");
ECNamedCurveParameterSpec paramSpec = ECNAMEDCurveTable.getParameterSpec("secp256r1");
ECParameterSpec params = new ECNamedCurveSpec("secp256r1", paramSpec.getCurve(), paramSpec.getG(), paramSpec.getN(), paramSpec.getH());
ECPublicKey ecPublicKey - (ECPublicKey) newKeyFact.generatePublic(new ECPublicKeySpec(w, params));
Signature sig = Signature.getInstance("SHA256withECDSAinP1363Format");
sig.initVerify(ecPublicKey);
sig.update(message);
verified = sig.verify(signature);
if (verified) {
//print True
} else {
//print false
}
verified never gets set to true, even though I know this message should verify fine. Am I re-constructing the key wrong? Or is there something else I'm missing?
This is my javacard code where the signature is generated:
KeyPair key = new KeyPair(KeyPair.ALG_EC_FP, KeyBuilder.LENGTH_EC_FP_256);
ECPublicKey pubKey = (ECPublicKey) key.getPublic();
ECPrivateKey privKey = (ECPrivateKey) key.getPrivate();
initDomainParams(pubKey);
initDomainParams(privKey); //initDomainParams is just where I set A, B, G, R and K to the secp256r1 curve parameters using setA, setB etc
key.genKeyPair();
Signature sig = Signature.getInstance(Signature.ALG_ECDSA_SHA_256, false);
sig.init(key.getPrivate(), Signature.MODE_SIGN);
sig.sign(srcArr, srcoffset, srclength, destArr, destoffset);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论