X-Git-Url: http://git.silcnet.org/gitweb/?a=blobdiff_plain;f=lib%2Fsilcapputil%2Fsilcapputil.c;h=833f40e29b4d230eeb1d1b24120b43d2fb746b13;hb=52e57c880aba9c5e89f59d962eb9af75670b76e0;hp=b5901294b24cc4784f2ecba70d0a6ce2d7c2aed3;hpb=85cc327ea081a42187a147a6f225c65df5aff953;p=silc.git diff --git a/lib/silcapputil/silcapputil.c b/lib/silcapputil/silcapputil.c index b5901294..833f40e2 100644 --- a/lib/silcapputil/silcapputil.c +++ b/lib/silcapputil/silcapputil.c @@ -146,6 +146,12 @@ New pair of keys will be created. Please, answer to following questions.\n\ silc_free(def); } + if (!strstr(identifier, "UN=") || !strstr(identifier, "HN=")) { + fprintf(stderr, "Invalid public key identifier. You must specify both " + "UN and HN\n"); + return FALSE; + } + rng = silc_rng_alloc(); silc_rng_init(rng); silc_rng_global_init(rng); @@ -202,12 +208,14 @@ New pair of keys will be created. Please, answer to following questions.\n\ return FALSE; /* Save public key into file */ - silc_pkcs_save_public_key(pkfile, public_key, SILC_PKCS_FILE_BASE64); + if (!silc_pkcs_save_public_key(pkfile, public_key, SILC_PKCS_FILE_BASE64)) + return FALSE; /* Save private key into file */ - silc_pkcs_save_private_key(prvfile, private_key, - (const unsigned char *)pass, strlen(pass), - SILC_PKCS_FILE_BIN, rng); + if (!silc_pkcs_save_private_key(prvfile, private_key, + (const unsigned char *)pass, strlen(pass), + SILC_PKCS_FILE_BIN, rng)) + return FALSE; if (return_public_key) *return_public_key = public_key; @@ -265,6 +273,8 @@ SilcBool silc_load_key_pair(const char *pub_filename, if (!silc_pkcs_load_private_key(prv_filename, (const unsigned char *)pass, strlen(pass), return_private_key)) { + silc_pkcs_public_key_free(*return_public_key); + *return_public_key = NULL; memset(pass, 0, strlen(pass)); silc_free(pass); return FALSE; @@ -287,18 +297,14 @@ SilcBool silc_show_public_key(SilcPublicKey public_key) SilcUInt32 key_len = 0; silc_pubkey = silc_pkcs_get_context(SILC_PKCS_SILC, public_key); - if (!silc_pubkey) { - silc_pkcs_public_key_free(public_key); + if (!silc_pubkey) return FALSE; - } ident = &silc_pubkey->identifier; key_len = silc_pkcs_public_key_get_len(public_key); pk = silc_pkcs_public_key_encode(public_key, &pk_len); - if (!pk) { - silc_pkcs_public_key_free(public_key); + if (!pk) return FALSE; - } fingerprint = silc_hash_fingerprint(NULL, pk, pk_len); babbleprint = silc_hash_babbleprint(NULL, pk, pk_len); @@ -618,6 +624,7 @@ static const SilcStatusMessage silc_status_messages[] = { { STAT(OPERATION_ALLOWED), "Operation is not allowed" }, { STAT(BAD_SERVER), "Bad server name" }, { STAT(BAD_USERNAME), "Bad user name" }, + { STAT(NO_SUCH_PUBLIC_KEY), "Unknown public key" }, { 0, NULL } };