I'm trying to use the example in the crypto++ wiki for ecies encryption, which complies to IEEE P1363's version of the scheme. The first two steps of the scheme as described in ETSΙ ΤS 102 941 v1.3.1 standard are:
Sender generates an ephemeral private key r in [1, q-1], ...
Sender derives a shared secret S from receiver encryption public key Kr. S = Px, where ...
However, in the crypto++ example the first lines are:
ECIES<ECP>::Decryptor d0(prng, ASN1::secp256r1());
PrintPrivateKey(d0.GetKey());
ECIES<ECP>::Encryptor e0(d0);
PrintPublicKey(e0.GetKey());
which use a private for the decryptor and base the encryptor on it. I don't see how it matches the steps of the algorithm.
Moreover, the wiki states that the encryption function returns a tuple {K,C,T}, where K is the encrypted common secret, C is the ciphertext, and T is the authentication tag. But, in the example they are not retrieved and I don't see how they could.
Any insights and help would be greatly appreciated. Thank you!
The output of the encryption function is the tuple {K,C,T}, where K is the encrypted common secret, C is the ciphertext, and T is the authentication tag.
K length is 64. T length is 32. C length is plaintext length.
if output string em0 is K+C+T (Fake code)
Just parse the data according to the above instructions.