Мне удалось решить эту проблему, установив флаг usePointCompression
в BC IESParameterSpec
на true
.
По умолчанию флаг сжатия точек имеет значение false.
К сожалению, этот флаг не является частью их ECIESTest , поэтому я использовал их конфигурацию режима шифрования (векторы вывода, кодирования и инициализации), чтобы опробовать флаг:
byte[] derivation = Hex.decode("202122232425262728292a2b2c2d2e2f");
byte[] encoding = Hex.decode("303132333435363738393a3b3c3d3e3f");
byte[] nonce = Hex.decode("000102030405060708090a0b0c0d0e0f");
Cipher c = Cipher.getInstance("ECIESwithAES-CBC", "BC");
IESParameterSpec params = new IESParameterSpec(derivation, encoding, 128, 128, nonce, true);
c.init(Cipher.ENCRYPT_MODE, publicKey, params);
byte[] ciphertext = c.doFinal(plaintext);
Это приводит к желаемому формату:
0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
В зависимости от соответствующей y-координаты (положительная / отрицательная).