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