+ /* Change current channel private key */
+ if (!strcasecmp(argv[3], "change")) {
+ command = 6;
+ if (type == 2) {
+ /* Unset channel key(s) */
+ SilcChannelPrivateKey *keys;
+ SilcUInt32 keys_count;
+ int number;
+
+ keys = silc_client_list_channel_private_keys(silc_client, conn,
+ channel_entry,
+ &keys_count);
+ if (!keys)
+ goto out;
+
+ if (argc == 4) {
+ chanrec->cur_key++;
+ if (chanrec->cur_key >= keys_count)
+ chanrec->cur_key = 0;
+ }
+
+ if (argc > 4) {
+ number = atoi(argv[4]);
+ if (!number || number > keys_count)
+ chanrec->cur_key = 0;
+ else
+ chanrec->cur_key = number - 1;
+ }
+
+ /* Set the current channel private key */
+ silc_client_current_channel_private_key(silc_client, conn,
+ channel_entry,
+ keys[chanrec->cur_key]);
+ printformat_module("fe-common/silc", server, NULL, MSGLEVEL_CRAP,
+ SILCTXT_CH_PRIVATE_KEY_CHANGE, chanrec->cur_key + 1,
+ channel_entry->channel_name);
+
+ silc_client_free_channel_private_keys(keys, keys_count);
+ goto out;
+ }
+ }
+