Re: Re: Retrieving public key from x and y

Benjamin Schäfer <[email protected]>
Newsgroups gmane.comp.encryption.cryptopp
Message-ID <[email protected]>
Ok, at least this gives me a ray of hope. So, to get rid of any interfering 
codelines, I did:

- Start Visual Studio
- New project (MFC Console, static linked MFC, Multibyte (unicode brings up 
the same result)

Full code:
#include <iostream>
#include <string>
#include "cryptlib.h"
#include "filters.h"
#include "eccrypto.h"
#include "files.h"
#include "sha.h"
#include "hex.h"
#include "pem.h"

int main()
{
    using namespace CryptoPP;

    std::string pt =
        "40BA49FCBA45C7EEB2261B1BE0EBC7C14D6484B9EF8A23B060EBE67F97252BBC"
        "987BA49DF364A0C9926F2B6DE1BAF46068A13A2C5C9812B2F3451F48B75719EE";

    HexDecoder decoder;
    decoder.Put((byte*)&pt[0], pt.size());
    decoder.MessageEnd();

    ECP::Point q;
    size_t len = decoder.MaxRetrievable();

    q.identity = false;
    q.x.Decode(decoder, len / 2);
    q.y.Decode(decoder, len / 2);

    ECDSA<ECP, SHA256>::PublicKey pkey;
    pkey.Initialize(ASN1::brainpoolP256r1(), q);

    FileSink fs("pubkey.pem");
    PEM_Save(fs, pkey);

    std::cout << "Hello World!\n";
}

But the result remains the same. OpenSSL:

C:\Program Files (x86)\OpenSSL-Win32\bin>openssl ec -in D:\pubkey.pem 
-inform PEM -pubin -text
read EC key
unable to load Key
22020:error:0908F066:PEM routines:get_header_and_data:bad end 
line:crypto\pem\pem_lib.c:812:

I really hope that I'm just stupid and don't see the obvious and your 
code/result speaks exactly for that. But I don't understand what exactly is 
going wrong here.
Jeffrey Walton schrieb am Mittwoch, 15. September 2021 um 19:43:23 UTC+2:

> On Wed, Sep 15, 2021 at 12:01 PM Jeffrey Walton <[email protected]> wrote:
> >
> > > But my problem afterward (which I didn't mention to this point, 
> because I thought it will solve itself when I have a correct y-coordinate) 
> is, that if I try to save this public key as PEM, I only get
> > >
> > > -----BEGIN PUBLIC KEY-----
> > > MFowMFow-----END PUBLIC KEY-----
> > >
> > > as result. This was also my result with wrong y and failed validation.
>
> Here's what I am seeing with your data. It looks OK to me. I think we
> need to see your program to determine what is going sideways.
>
> $ cat test.cxx
> #include <iostream>
> #include <string>
>
> #include "cryptlib.h"
> #include "filters.h"
> #include "eccrypto.h"
> #include "osrng.h"
> #include "files.h"
> #include "sha.h"
> #include "hex.h"
>
> #include "pem.h"
>
> int main(int argc, char* argv[])
> {
> using namespace CryptoPP;
>
> std::string pt =
> "40BA49FCBA45C7EEB2261B1BE0EBC7C14D6484B9EF8A23B060EBE67F97252BBC"
> "987BA49DF364A0C9926F2B6DE1BAF46068A13A2C5C9812B2F3451F48B75719EE";
>
> HexDecoder decoder;
> decoder.Put((byte*)&pt[0], pt.size());
> decoder.MessageEnd();
>
> ECP::Point q;
> size_t len = decoder.MaxRetrievable();
>
> q.identity = false;
> q.x.Decode(decoder, len/2);
> q.y.Decode(decoder, len/2);
>
> ECDSA<ECP, SHA256>::PublicKey pkey;
> pkey.Initialize(ASN1::brainpoolP256r1(), q);
>
> FileSink fs("pubkey.pem");
> PEM_Save(fs, pkey);
>
> return 0;
> }
>
> And:
>
> $ ./test.exe
> $ cat pubkey.pem
> -----BEGIN PUBLIC KEY-----
> MFowFAYHKoZIzj0CAQYJKyQDAwIIAQEHA0IABEC6Sfy6RcfusiYbG+Drx8FNZIS5
> 74ojsGDr5n+XJSu8mHuknfNkoMmSbytt4br0YGihOixcmBKy80UfSLdXGe4=
> -----END PUBLIC KEY-----
>
> And: $ openssl ec -in pubkey.pem -inform PEM -pubin -text
> Public-Key: (256 bit)
> pub:
> 04:40:ba:49:fc:ba:45:c7:ee:b2:26:1b:1b:e0:eb:
> c7:c1:4d:64:84:b9:ef:8a:23:b0:60:eb:e6:7f:97:
> 25:2b:bc:98:7b:a4:9d:f3:64:a0:c9:92:6f:2b:6d:
> e1:ba:f4:60:68:a1:3a:2c:5c:98:12:b2:f3:45:1f:
> 48:b7:57:19:ee
> ASN1 OID: brainpoolP256r1
>
> Jeff
>

-- 
You received this message because you are subscribed to the Google Groups "Crypto++ Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
To view this discussion on the web visit https://groups.google.com/d/msgid/cryptopp-users/1371df35-09d7-4805-933f-78994f5629dan%40googlegroups.com.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.