Я использую одну и ту же логику для каждого теста, просто разные входы.
Код: Выделить всё
Public key: e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493< /code>
Private key: 4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0dОжидаемый вывод:
95CBDE9476E8907D7AADE45CB4B873F88B595A68799FA152E6F87. /> < /blockquote>
вместо этого я получаю: < /p>
d5f33573c9f6b8129483acce1e2534e95d3c41af6b00d0d30437b87cada57e4a < /p>
/> (это тестовый случай два в RFC 7748.) < /p>
Я не знаю, почему это так. Всякий раз, когда я пробую это с первым или третьим входом в RFC 7748, он работает нормально. (Опять же, та же логика просто разные входы.) < /P>
byte[] publicKey;
publicKey = Hex.decode("e5210f12786811d3f4b7959d0538ae2c31dbe7106fc03c3efc4cd549c715a493");
byte[] privateKey;// input scalar
privateKey = Hex.decode("4b66e9d4d1b4673c5ad22691957d6af5c11b6421e0ea01d42ca4169e7918ba0d");
// System.out.println("bc go crazy:" + Hex.toHexString(privateKey));
NamedParameterSpec paramSpec = new NamedParameterSpec("X25519");
BigInteger clientBigInteger = new BigInteger(1, Util.reverse(publicKey));
KeyFactory kf = KeyFactory.getInstance("X25519");
XECPublicKeySpec clientPublicKeySpec = new XECPublicKeySpec(paramSpec, clientBigInteger);
XECPublicKey clientPublicKey;
clientPublicKey = (XECPublicKey) kf.generatePublic(clientPublicKeySpec);
XECPrivateKeySpec privateKeySpec = new XECPrivateKeySpec(paramSpec, privateKey);
XECPrivateKey secretKey = (XECPrivateKey) kf.generatePrivate(privateKeySpec);
KeyAgreement ka = KeyAgreement.getInstance("X25519");
ka.init(secretKey);
ka.doPhase(clientPublicKey, true);
byte[] sharedSecret = ka.generateSecret();
System.err.println("---------- X25519 test cases ----------");
System.out.println("X25519-test-case-2-out:" + Hex.toHexString(sharedSecret));
System.out.println(
"X25519-test-case-2-exp:95cbde9476e8907d7aade45cb4b873f88b595a68799fa152e6f8f7647aac7957");
< /code>
Это код, который не дает правильного вывода. Я проверял тестовые векторы десять раз и копировал вставленную логику двадцать. Что не так с моим кодом? Почему это работает для некоторых тестовых векторов, но не для других?
на основе RFC 7748.
Подробнее здесь: https://stackoverflow.com/questions/797 ... not-others
Мобильная версия