X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcapputil%2Fsilcapputil.c;h=32018654de19f937f2c002935f91b0fd745f95a8;hb=9905799a86c606304fd7df2cd401de1740a272a1;hp=39fce81cacab76f343281ed4122d1bef8c3f7a8d;hpb=6e78c1f7fc6b1b87f70561d447c1520d2b09bbf2;p=silc.git diff --git a/lib/silcapputil/silcapputil.c b/lib/silcapputil/silcapputil.c index 39fce81c..32018654 100644 --- a/lib/silcapputil/silcapputil.c +++ b/lib/silcapputil/silcapputil.c @@ -40,7 +40,7 @@ static char *silc_create_pk_identifier(void) return NULL; /* Create default email address, whether it is right or not */ - snprintf(email, sizeof(email), "%s@%s", username, hostname); + silc_snprintf(email, sizeof(email), "%s@%s", username, hostname); ident = silc_pkcs_silc_encode_identifier(username, hostname, realname, email, NULL, NULL); @@ -71,6 +71,8 @@ SilcBool silc_create_key_pair(const char *pkcs_name, char *alg = pkcs_name ? strdup(pkcs_name) : NULL; char *identifier = pub_identifier ? strdup(pub_identifier) : NULL; char *pass = passphrase ? strdup(passphrase) : NULL; + SilcPublicKey public_key; + SilcPrivateKey private_key; if (interactive && (!alg || !pub_filename || !prv_filename)) printf("\ @@ -121,9 +123,9 @@ New pair of keys will be created. Please, answer to following questions.\n\ if (interactive) { memset(line, 0, sizeof(line)); if (def) - snprintf(line, sizeof(line), "Identifier [%s]: ", def); + silc_snprintf(line, sizeof(line), "Identifier [%s]: ", def); else - snprintf(line, sizeof(line), + silc_snprintf(line, sizeof(line), "Identifier (eg. UN=jon, HN=jon.dummy.com, " "RN=Jon Johnson, E=jon@dummy.com): "); @@ -151,7 +153,7 @@ New pair of keys will be created. Please, answer to following questions.\n\ if (!pkfile) { if (interactive) { memset(line, 0, sizeof(line)); - snprintf(line, sizeof(line), "Public key filename [public_key.pub]: "); + silc_snprintf(line, sizeof(line), "Public key filename [public_key.pub]: "); pkfile = silc_get_input(line, FALSE); } if (!pkfile) @@ -161,7 +163,7 @@ New pair of keys will be created. Please, answer to following questions.\n\ if (!prvfile) { if (interactive) { memset(line, 0, sizeof(line)); - snprintf(line, sizeof(line), "Private key filename [private_key.prv]: "); + silc_snprintf(line, sizeof(line), "Private key filename [private_key.prv]: "); prvfile = silc_get_input(line, FALSE); } if (!prvfile) @@ -192,18 +194,28 @@ New pair of keys will be created. Please, answer to following questions.\n\ /* Generate keys */ if (!silc_pkcs_silc_generate_key(alg, "pkcs1-no-oid", key_len_bits, - identifier, rng, return_public_key, - return_private_key)) + identifier, rng, &public_key, + &private_key)) return FALSE; /* Save public key into file */ - silc_pkcs_save_public_key(pkfile, *return_public_key, SILC_PKCS_FILE_BASE64); + silc_pkcs_save_public_key(pkfile, public_key, SILC_PKCS_FILE_BASE64); /* Save private key into file */ - silc_pkcs_save_private_key(prvfile, *return_private_key, + silc_pkcs_save_private_key(prvfile, private_key, (const unsigned char *)pass, strlen(pass), SILC_PKCS_FILE_BIN, rng); + if (return_public_key) + *return_public_key = public_key; + else + silc_pkcs_public_key_free(public_key); + + if (return_private_key) + *return_private_key = private_key; + else + silc_pkcs_private_key_free(private_key); + printf("Public key has been saved into `%s'.\n", pkfile); printf("Private key has been saved into `%s'.\n", prvfile); if (interactive) { @@ -262,9 +274,8 @@ SilcBool silc_load_key_pair(const char *pub_filename, /* Dump public key into stdout */ -SilcBool silc_show_public_key(const char *pub_filename) +SilcBool silc_show_public_key(SilcPublicKey public_key) { - SilcPublicKey public_key; SilcSILCPublicKey silc_pubkey; SilcPublicKeyIdentifier ident; char *fingerprint, *babbleprint; @@ -272,11 +283,6 @@ SilcBool silc_show_public_key(const char *pub_filename) SilcUInt32 pk_len; SilcUInt32 key_len = 0; - if (!silc_pkcs_load_public_key((char *)pub_filename, &public_key)) { - fprintf(stderr, "Could not load public key file `%s'\n", pub_filename); - return FALSE; - } - silc_pubkey = silc_pkcs_get_context(SILC_PKCS_SILC, public_key); if (!silc_pubkey) { silc_pkcs_public_key_free(public_key); @@ -293,7 +299,6 @@ SilcBool silc_show_public_key(const char *pub_filename) fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); - printf("Public key file : %s\n", pub_filename); printf("Algorithm : %s\n", silc_pkcs_get_name(public_key)); if (key_len) printf("Key length (bits) : %d\n", (unsigned int)key_len); @@ -317,11 +322,29 @@ SilcBool silc_show_public_key(const char *pub_filename) silc_free(fingerprint); silc_free(babbleprint); silc_free(pk); - silc_pkcs_public_key_free(public_key); return TRUE; } +/* Dump public key into stdout */ + +SilcBool silc_show_public_key_file(const char *pub_filename) +{ + SilcPublicKey public_key; + SilcBool ret; + + if (!silc_pkcs_load_public_key((char *)pub_filename, &public_key)) { + fprintf(stderr, "Could not load public key file `%s'\n", pub_filename); + return FALSE; + } + + printf("Public key file : %s\n", pub_filename); + ret = silc_show_public_key(public_key); + silc_pkcs_public_key_free(public_key); + + return ret; +} + /* Change private key passphrase */ SilcBool silc_change_private_key_passphrase(const char *prv_filename, @@ -730,11 +753,11 @@ SilcBool silc_parse_version_string(const char *version, min = atoi(cp); memset(buf, 0, sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); + silc_snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); if (protocol_version) *protocol_version = atoi(buf); memset(buf, 0, sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min); + silc_snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min); if (protocol_version_string) *protocol_version_string = strdup(buf); @@ -756,11 +779,11 @@ SilcBool silc_parse_version_string(const char *version, } memset(buf, 0, sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); + silc_snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); if (software_version) *software_version = atoi(buf); memset(buf, 0, sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min); + silc_snprintf(buf, sizeof(buf) - 1, "%d.%d", maj, min); if (software_version_string) *software_version_string = strdup(buf); @@ -792,7 +815,7 @@ SilcUInt32 silc_version_to_num(const char *version) min = atoi(cp + 1); memset(buf, 0, sizeof(buf)); - snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); + silc_snprintf(buf, sizeof(buf) - 1, "%d%d", maj, min); return (SilcUInt32)atoi(buf); } @@ -964,11 +987,11 @@ char *silc_id_render(void *id, SilcIdType id_type) } memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(server_id->port)); + silc_snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(server_id->port)); _PUT_STRING(rid, tmp); SILC_PUT16_MSB(server_id->rnd, tmps); memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]); + silc_snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]); _PUT_STRING(rid, tmp); } break; @@ -994,10 +1017,10 @@ char *silc_id_render(void *id, SilcIdType id_type) } memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, ",%02x,", client_id->rnd); + silc_snprintf(tmp, sizeof(tmp) - 1, ",%02x,", client_id->rnd); _PUT_STRING(rid, tmp); memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x %02x %02x...]", + silc_snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x %02x %02x...]", client_id->hash[0], client_id->hash[1], client_id->hash[2], client_id->hash[3]); _PUT_STRING(rid, tmp); @@ -1025,11 +1048,11 @@ char *silc_id_render(void *id, SilcIdType id_type) } memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(channel_id->port)); + silc_snprintf(tmp, sizeof(tmp) - 1, ",%d,", ntohs(channel_id->port)); _PUT_STRING(rid, tmp); SILC_PUT16_MSB(channel_id->rnd, tmps); memset(tmp, 0, sizeof(tmp)); - snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]); + silc_snprintf(tmp, sizeof(tmp) - 1, "[%02x %02x]", tmps[0], tmps[1]); _PUT_STRING(rid, tmp); } break;