/* --- BEGIN COPYRIGHT BLOCK ---
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation; version 2 of the License.
 * 
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 * 
 * You should have received a copy of the GNU General Public License along
 * with this program; if not, write to the Free Software Foundation, Inc.,
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 * 
 * Copyright (C) 2007 Red Hat, Inc.
 * All rights reserved.
 * --- END COPYRIGHT BLOCK ---
 */

#include <pistool.h>

void
TKS_Usage( char *progName )
{
    PR_fprintf( PR_STDERR,
                "Usage:  %s -D -n keyname -d DBDir [-h token_name]\n"
                "\t\t[-p DBPrefix] [-f pwfile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -H\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -I -n keyname -d DBDir -a algorithm [-h token_name]\n"
                "\t\t[-p DBPrefix] [-f pwfile] [-s]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -K -n keyname -d DBDir [-h token_name]\n"
                "\t\t[-p DBPrefix] [-f pwfile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -L -d DBDir [-h all | -h token_name]\n"
                "\t\t[-p DBPrefix] [-n keyname] [-f pwfile] [-x]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -M -n keyname -d DBDir -a algorithm [-l key_length_bits] [-h token_name] \n"
                "\t\t[-p DBPrefix] [-f pwfile] [-s]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -N -d DBDir\n"
                "\t\t[-p DBPrefix] [-f pwfile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -P -d DBDir\n"
                "\t\t[-p DBPrefix] [-f pwfile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -R -n keyname -r new_keyname -d DBDir [-h token_name]\n"
                "\t\t[-p DBPrefix] [-f pwfile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -S -d DBDir\n"
                "\t\t[-p DBPrefix] [-x]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -T -n keyname -d DBDir -a algorithm [-h token_name]\n"
                "\t\t[-p DBPrefix] [-f pwfile] [-z noisefile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -U -n keyname -d DBDir -a algorithm -t transport_keyname -i infile\n"
                "\t\t[-h token_name] [-p DBPrefix] [-f pwfile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -V\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "\t%s -W -n keyname -d DBDir -a algorithm -t transport_keyname -o outfile\n"
                "\t\t[-h token_name] [-p DBPrefix] [-f pwfile]\n\n",
                progName );
    PR_fprintf( PR_STDERR,
                "Type \"%s -H\" for more detailed descriptions\n\n",
                progName );
}


void
TKS_PrintHelp( char *progName )
{
    /**********************/
    /* -D command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Delete a key from the token\n",
                "-D" );
    PR_fprintf( PR_STDERR,
                "%-24s The name of the key to delete\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token from which to remove key\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -H command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Display this extended help for Usage\n",
                "-H" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -I command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Input shares to generate a new transport key\n",
                "-I" );
    PR_fprintf( PR_STDERR,
                "%-24s The name to assign to the generated transport key\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s The desired cipher algorithm of the transport key. Please specify " ALG_AES " or " ALG_DES "\n"
                "\t\t         [required]\n",
                "   -a algorithm" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token in which to generate transport key\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
    		 "%-24s Specify the key be stored with CKA_EXTRACTABLE set to false. (Does not work for NSS softoken.)\n"
    		 "\t\t         [optional]\n",
    		 "   -s " );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -K command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Display the KCV of the specified key\n",
                "-K" );
    PR_fprintf( PR_STDERR,
                "%-24s The name of the key to perform a KCV on\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token on which the named key resides\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -L command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s List out a specified key, or all keys\n",
                "-L" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s Look on all tokens OR\n"
                "%-24s Name of token in which to look for keys\n"
                "\t\t         [optional]\n",
                "   -h all |",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s The name of the key to list\n"
                "\t\t         [optional]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "%-24s force the database to open R/W (software only)\n"
                "\t\t         [optional]\n",
                "   -x" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -M command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Generate a new master key\n",
                "-M" );
    PR_fprintf( PR_STDERR,
                "%-24s The name to assign to the generated master key\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s The cipher algorithm that this key will be used with. Please specify " ALG_AES " or " ALG_DES "\n"
                "\t\t         [required]\n",
                "   -a algorithm" );
    PR_fprintf( PR_STDERR,
                "%-24s For AES, the length in bits of the key to generate. For example, 128, 192, or 256.\n"
                "\t\t         [required for AES]\n",
                "   -l key_length_bits" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token in which to generate master key\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the key be generated with CKA_EXTRACTABLE set to false. (Does not work for NSS softoken.)\n"
                "\t\t         [optional]\n",
                "   -s " );


    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -N command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Create a new key database (software only)\n",
                "-N" );
    PR_fprintf( PR_STDERR,
                "%-24s Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s Key database prefix (software only)\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -P command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Change the key database password (software only)\n",
                "-P" );
    PR_fprintf( PR_STDERR,
                "%-24s Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s Key database prefix (software only)\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -R command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Rename a symmetric key\n",
                "-R" );
    PR_fprintf( PR_STDERR,
                "%-24s The original name assigned to a pre-existing\n"
                "\t\t         symmetric key\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s The new name assigned to the original pre-existing\n"
                "\t\t         symmetric key\n"
                "\t\t         [required]\n",
                "   -r new_keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token in which to generate master key\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -S command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s List all security modules\n",
                /*, or print out a single named module\n",*/
                "-S" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s force the database to open R/W (software only)\n"
                "\t\t         [optional]\n",
                "   -x" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -T command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Generate a new transport key\n",
                "-T" );
    PR_fprintf( PR_STDERR,
                "%-24s The name to assign to the generated transport key\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s The desired cipher algorithm of the transport key. Please specify " ALG_AES " or " ALG_DES "\n"
                "\t\t         [required]\n",
                "   -a algorithm" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token in which to generate transport key\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the noise file to be used\n"
                "\t\t         [optional]\n",
                "   -z noisefile" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -U command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Unwrap the wrapped master key\n",
                "-U" );
    PR_fprintf( PR_STDERR,
                "%-24s The name to assign to the unwrapped master key\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s The cipher algorithm of the wrapped key to be imported. Please specify " ALG_AES " or " ALG_DES "\n"
                "\t\t         [required]\n",
                "   -a algorithm" );
    PR_fprintf( PR_STDERR,
                "%-24s The name of the transport key (e. g. - unwrapping key)\n"
                "\t\t         [required]\n",
                "   -t transport_keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s The filename from which to input the wrapped master key\n"
                "\t\t         [required]\n",
                "   -i infile" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token in which to store wrapped master key\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -V command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Display the version number of this tool\n",
                "-V" );
    PR_fprintf( PR_STDERR,
                "\n" );


    /**********************/
    /* -W command options */
    /**********************/

    PR_fprintf( PR_STDERR,
                "%-15s Wrap a newly generated master key\n",
                "-W" );
    PR_fprintf( PR_STDERR,
                "%-24s The name to assign to the generated master key\n"
                "\t\t         [required]\n",
                "   -n keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database directory (HSM);\n"
                "\t\t         Key database directory (software only)\n"
                "\t\t         [required]\n",
                "   -d DBDir" );
    PR_fprintf( PR_STDERR,
                "%-24s The desired cipher algorithm of the transport key. Please specify " ALG_AES " or " ALG_DES "\n"
                "\t\t         [required]\n",
                "   -a algorithm" );
    PR_fprintf( PR_STDERR,
                "%-24s The name of the transport key (e. g. - wrapping key)\n"
                "\t\t         [required]\n",
                "   -t transport_keyname" );
    PR_fprintf( PR_STDERR,
                "%-24s The filename in which to output the wrapped master key\n"
                "\t\t         [required]\n",
                "   -o outfile" );
    PR_fprintf( PR_STDERR,
                "%-24s Name of token in which to generate master key\n"
                "\t\t         [optional]\n",
                "   -h token_name" );
    PR_fprintf( PR_STDERR,
                "%-24s Security module database prefix\n"
                "\t\t         [optional]\n",
                "   -p DBPrefix" );
    PR_fprintf( PR_STDERR,
                "%-24s Specify the password file\n"
                "\t\t         [optional]\n",
                "   -f pwfile" );
    PR_fprintf( PR_STDERR,
                "\n" );
}

