Hi guys,

i want in my application to write an EC_KEY (curve: prime256v1) into a PEM
file. I can create the EC_KEY and it looks good, but when i want to output
the EC_KEY in a PEM format, there are too many unwanted signs letters in it.

output:

EC_KEY & PARAMETERS:

Private-Key: (256 bit)
priv:
    00:cd:86:38:cb:85:20:d7:d6:c7:08:18:d6:5b:5d:
    9f:a6:f8:f1:59:0d:c9:0f:b0:df:30:c1:8e:27:ae:
    00:2f:9f
pub:
    04:12:a9:1b:f6:27:37:fd:27:bf:0f:58:b4:c5:e9:
    e8:26:2e:81:a6:06:7a:8d:a2:4b:fc:b1:33:b6:9a:
    1f:6b:50:02:b4:fa:11:d3:f5:f1:3e:21:14:b5:e2:
    ef:e6:cb:6c:48:45:b6:59:d6:4a:a7:13:3f:a0:29:
    9a:27:16:a1:92
Field Type: prime-field
Prime:
    00:ff:ff:ff:ff:00:00:00:01:00:00:00:00:00:00:
    00:00:00:00:00:00:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:ff:ff
A:
    00:ff:ff:ff:ff:00:00:00:01:00:00:00:00:00:00:
    00:00:00:00:00:00:ff:ff:ff:ff:ff:ff:ff:ff:ff:
    ff:ff:fc
B:
    5a:c6:35:d8:aa:3a:93:e7:b3:eb:bd:55:76:98:86:
    bc:65:1d:06:b0:cc:53:b0:f6:3b:ce:3c:3e:27:d2:
    60:4b
Generator (uncompressed):
    04:6b:17:d1:f2:e1:2c:42:47:f8:bc:e6:e5:63:a4:
    40:f2:77:03:7d:81:2d:eb:33:a0:f4:a1:39:45:d8:
    98:c2:96:4f:e3:42:e2:fe:1a:7f:9b:8e:e7:eb:4a:
    7c:0f:9e:16:2b:ce:33:57:6b:31:5e:ce:cb:b6:40:
    68:37:bf:51:f5
Order:
    00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff:ff:ff:
    ff:ff:bc:e6:fa:ad:a7:17:9e:84:f3:b9:ca:c2:fc:
    63:25:51
Cofactor:  1 (0x1)
Seed:
    c4:9d:36:08:86:e7:04:93:6a:66:78:e1:13:9d:26:
    b7:81:9f:7e:90

wrong PEM KEY:

-----BEGIN PUBLIC KEY-----
MIIBSzCCAQMGByqGSM49AgEwgfcCAQEwLAYHKoZIzj0BAQIhAP////8AAAABAAAA
AAAAAAAAAAAA////////////////MFsEIP////8AAAABAAAAAAAAAAAAAAAA////
///////////8BCBaxjXYqjqT57PrvVV2mIa8ZR0GsMxTsPY7zjw+J9JgSwMVAMSd
NgiG5wSTamZ44ROdJreBn36QBEEEaxfR8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5
RdiYwpZP40Li/hp/m47n60p8D54WK84zV2sxXs7LtkBoN79R9QIhAP////8AAAAA
//////////+85vqtpxeehPO5ysL8YyVRAgEBA0IABBKpG/YnN/0nvw9YtMXp6CYu
gaYGeo2iS/yxM7aaH2tQArT6EdP18T4hFLXi7+bLbEhFtlnWSqcTP6ApmicWoZI=
-----END PUBLIC KEY-----

I do not know what is wrong in this code, maybe someone can help me.

CODE:

*

int* *main*() {

BIO *out,*outfile;

EC_GROUP *group = NULL;

*char* *outfile_name = NULL;

*int* i;

ENGINE_load_builtin_engines();

CRYPTO_malloc_init();

OpenSSL_add_all_algorithms();

out=BIO_new(BIO_s_file()); // for commandline output

BIO_set_fp(out,stdout,BIO_NOCLOSE);

outfile = BIO_new(BIO_s_file()); // output for the file



CRYPTO_malloc_debug_init();

CRYPTO_dbg_set_options(V_CRYPTO_MDEBUG_ALL);

CRYPTO_mem_ctrl(CRYPTO_MEM_CHECK_ON);

group = EC_GROUP_new_by_curve_name(OBJ_sn2nid("prime256v1"));

EC_GROUP_set_asn1_flag(group, 0);

EC_GROUP_set_point_conversion_form(group,POINT_CONVERSION_UNCOMPRESSED);

EC_KEY *a = EC_KEY_new();

EC_KEY_set_group(a, group);

*if* (!EC_KEY_generate_key(a))

*perror*("EC_KEY_generate_key ");

*if* (!EC_KEY_print(out, a, 0))

{

*perror*("EC_KEY_print ");

}

i = PEM_write_bio_EC_PUBKEY(out, a); // EC_KEY PEM-format to out = screen

*if*(i == 0) // to file: change out to outfile

*perror*("PEM_write_bio_ECPrivateKey ");

ECDSA_SIG *sig = ECDSA_SIG_new();

*const* *char* *dgst = "TEST MESSAGE \n";

sig = ECDSA_do_sign((*unsigned* *char**)dgst, *sizeof*(dgst) - 1, a);

*int* i1;

i1=ECDSA_do_verify((*unsigned* *char**)dgst, *sizeof*(dgst)-1, sig, a);

*if* (i1 ==0)

*printf*("ECDSA message is not valid.\n");

*else* *if* (i1 == 1)

*printf*("message is valid signed.\n");

*else
*

*perror*("ecdsa ");

*return* 0;

}



Regards Andreas

Reply via email to