у меня есть самоподписанный сертификат, подписанный алгоритмом SHA1withECDSA с использованием BouncyCastle. Под BC я могу легко это проверить, но когда я делаю это на JavaCard, он каждый раз отправляет мне false (Curve secp192r1 из NIST). Знак удержания сертификата в обычном виде (не X9.62 означает просто r+s без каких-либо тегов).
Есть мой код для проверки (со значениями, указанными как константы - для тестов, конечно).
байт [] certdata = {...}
Signature signature = Signature.getInstance(Signature.ALG_ECDSA_SHA, false);
ECPublicKey ecpk = (ECPublicKey) KeyBuilder.buildKey(KeyBuilder.TYPE_EC_FP_PUBLIC, KeyBuilder.LENGTH_EC_FP_192, true);
ecpk.setA(new byte[]{...}, (short)0, (short)0x0018);
ecpk.setB(new byte[]{...}, (short)0, (short)0x0018);
ecpk.setG(new byte[]{...}, (short)0, (short)0x0031);
//Point format: uncompressed tag(0x04), x, y
ecpk.setK((short)0x0001);
ecpk.setR(new byte[]{}, (short)0, (short)0x0018);
ecpk.setW(new byte[]{}, (short)0, (short)0x31);
ecpk.setFieldFP(new byte[]{}, (short)0, (short)0x0018);
signature.init(ecpk, Signature.MODE_VERIFY);
boolean result = signature.verify(certdata, (short)0, (short)certdata.length, signtab, (short)0, (short)signtab.length);
if(result) ISOException.throwIt((short)0x0001);
else ISOException.throwIt((short)0x0002);
}
'...' вместо байтов для четкого представления (192-битная кривая может привести к большому беспорядку).
Сертификат с объяснением TAGS на pastebin:
Спасибо за любую помощь
севар
редактировать: Новые тесты: Все тесты повторяют одни и те же данные (PublicKey, PrivateKey, Message to be sign), знак рандомизирован, поэтому я буду использовать 2 знака (signT - знак, сгенерированный терминалом (BC), signC - знак, сгенерированный чипом)
signT не может быть проверен на ЧИПе, но может быть проверен на Терминале. signC проверен на ЧИПЕ и Терминале
поэтому я проверил пересечение API
Перекрестная связь, направленная на Британскую Колумбию, работает хорошо
Перекрестная связь, направленная на CHIP, не работает
пара ключей сгенерирована хорошо, потому что, когда я помещаю PrivateKey и PublicKey, сгенерированные BC, в CHIP, тогда подпись, сгенерированная на CHIP, может быть проверена CHIP.
- KeyPair сгенерирован хорошо
Я понятия не имею, что я должен проверить сейчас. Проблема, вероятно, может быть связана с заполнением массива в шаге ECDSA e = SHA1 (сообщение). Что происходит с массивом после хеша (хэш короче кривой, и карта должна объявить размер массива перед копированием)