Bouncy Castle ECIES compressed format
I am using the bouncy castle ECIES with AES in CBC mode provider to encrypt data:
Cipher iesCipher = Cipher.getInstance("ECIESWITHAES-CBC");
iesCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte ciphertext = iesCipher.doFinal(plaintext);
This results in a ciphertext with the format:
0x04 || coordinate x || coordinate y || PKCS5 padded ciphertext || 20-byte HMAC-digest
The 0x04
indicates the uncompressed format, where the y coordinate is also stored. Using eg. secp256k1, this results in 32 byte unnecessary overhead.
Now I would like to use the compressed format with 0x02
and 0x03
prefixes.
Unfortunately, I didn't find a specification of the parameters to use to achieve this.
java bouncycastle
add a comment |
I am using the bouncy castle ECIES with AES in CBC mode provider to encrypt data:
Cipher iesCipher = Cipher.getInstance("ECIESWITHAES-CBC");
iesCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte ciphertext = iesCipher.doFinal(plaintext);
This results in a ciphertext with the format:
0x04 || coordinate x || coordinate y || PKCS5 padded ciphertext || 20-byte HMAC-digest
The 0x04
indicates the uncompressed format, where the y coordinate is also stored. Using eg. secp256k1, this results in 32 byte unnecessary overhead.
Now I would like to use the compressed format with 0x02
and 0x03
prefixes.
Unfortunately, I didn't find a specification of the parameters to use to achieve this.
java bouncycastle
add a comment |
I am using the bouncy castle ECIES with AES in CBC mode provider to encrypt data:
Cipher iesCipher = Cipher.getInstance("ECIESWITHAES-CBC");
iesCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte ciphertext = iesCipher.doFinal(plaintext);
This results in a ciphertext with the format:
0x04 || coordinate x || coordinate y || PKCS5 padded ciphertext || 20-byte HMAC-digest
The 0x04
indicates the uncompressed format, where the y coordinate is also stored. Using eg. secp256k1, this results in 32 byte unnecessary overhead.
Now I would like to use the compressed format with 0x02
and 0x03
prefixes.
Unfortunately, I didn't find a specification of the parameters to use to achieve this.
java bouncycastle
I am using the bouncy castle ECIES with AES in CBC mode provider to encrypt data:
Cipher iesCipher = Cipher.getInstance("ECIESWITHAES-CBC");
iesCipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte ciphertext = iesCipher.doFinal(plaintext);
This results in a ciphertext with the format:
0x04 || coordinate x || coordinate y || PKCS5 padded ciphertext || 20-byte HMAC-digest
The 0x04
indicates the uncompressed format, where the y coordinate is also stored. Using eg. secp256k1, this results in 32 byte unnecessary overhead.
Now I would like to use the compressed format with 0x02
and 0x03
prefixes.
Unfortunately, I didn't find a specification of the parameters to use to achieve this.
java bouncycastle
java bouncycastle
asked Nov 26 '18 at 8:36
MarcMarc
3,20282640
3,20282640
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
I managed to solve this by setting the usePointCompression
flag in the BC IESParameterSpec
to true
.
The point compression flag is false by default.
Unfortunately, this flag is not part of their ECIESTest, so I used their encryption mode configuration (derivation, encoding and initialization vectors) to try out the flag:
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);
This results in the desired format:
0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
Depending on the corresponding y-coordinate (positve/negative).
add a comment |
Your Answer
StackExchange.ifUsing("editor", function () {
StackExchange.using("externalEditor", function () {
StackExchange.using("snippets", function () {
StackExchange.snippets.init();
});
});
}, "code-snippets");
StackExchange.ready(function() {
var channelOptions = {
tags: "".split(" "),
id: "1"
};
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function() {
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled) {
StackExchange.using("snippets", function() {
createEditor();
});
}
else {
createEditor();
}
});
function createEditor() {
StackExchange.prepareEditor({
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader: {
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
},
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
});
}
});
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53477286%2fbouncy-castle-ecies-compressed-format%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
I managed to solve this by setting the usePointCompression
flag in the BC IESParameterSpec
to true
.
The point compression flag is false by default.
Unfortunately, this flag is not part of their ECIESTest, so I used their encryption mode configuration (derivation, encoding and initialization vectors) to try out the flag:
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);
This results in the desired format:
0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
Depending on the corresponding y-coordinate (positve/negative).
add a comment |
I managed to solve this by setting the usePointCompression
flag in the BC IESParameterSpec
to true
.
The point compression flag is false by default.
Unfortunately, this flag is not part of their ECIESTest, so I used their encryption mode configuration (derivation, encoding and initialization vectors) to try out the flag:
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);
This results in the desired format:
0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
Depending on the corresponding y-coordinate (positve/negative).
add a comment |
I managed to solve this by setting the usePointCompression
flag in the BC IESParameterSpec
to true
.
The point compression flag is false by default.
Unfortunately, this flag is not part of their ECIESTest, so I used their encryption mode configuration (derivation, encoding and initialization vectors) to try out the flag:
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);
This results in the desired format:
0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
Depending on the corresponding y-coordinate (positve/negative).
I managed to solve this by setting the usePointCompression
flag in the BC IESParameterSpec
to true
.
The point compression flag is false by default.
Unfortunately, this flag is not part of their ECIESTest, so I used their encryption mode configuration (derivation, encoding and initialization vectors) to try out the flag:
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);
This results in the desired format:
0x02 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
0x03 || coordinate x || PKCS5 padded ciphertext || 20-byte HMAC-digest
Depending on the corresponding y-coordinate (positve/negative).
answered Nov 30 '18 at 8:28
MarcMarc
3,20282640
3,20282640
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function () {
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f53477286%2fbouncy-castle-ecies-compressed-format%23new-answer', 'question_page');
}
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function () {
StackExchange.helpers.onClickDraftSave('#login-link');
});
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown