@node p11tool Invocation
@subsection Invoking p11tool
@pindex p11tool
@ignore
#  -*- buffer-read-only: t -*- vi: set ro:
#
# DO NOT EDIT THIS FILE   (invoke-p11tool.texi)
#
# It has been AutoGen-ed
# From the definitions    ../src/p11tool-args.def
# and the template file   agtexi-cmd.tpl
@end ignore


Program that allows operations on PKCS #11 smart cards
and security modules. 

To use PKCS #11 tokens with GnuTLS the p11-kit configuration files need to be setup.
That is create a .module file in /etc/pkcs11/modules with the contents 'module: /path/to/pkcs11.so'.
Alternatively the configuration file /etc/gnutls/pkcs11.conf has to exist and contain a number
of lines of the form 'load=/usr/lib/opensc-pkcs11.so'.

You can provide the PIN to be used for the PKCS #11 operations with the environment variables
GNUTLS_PIN and GNUTLS_SO_PIN.


This section was generated by @strong{AutoGen},
using the @code{agtexi-cmd} template and the option descriptions for the @code{p11tool} program.
This software is released under the GNU General Public License, version 3 or later.


@anchor{p11tool usage}
@subsection p11tool help/usage (@option{--help})
@cindex p11tool help

This is the automatically generated usage text for p11tool.

The text printed is the same whether selected with the @code{help} option
(@option{--help}) or the @code{more-help} option (@option{--more-help}).  @code{more-help} will print
the usage text by passing it through a pager program.
@code{more-help} is disabled on platforms without a working
@code{fork(2)} function.  The @code{PAGER} environment variable is
used to select the program, defaulting to @file{more}.  Both will exit
with a status code of 0.

@exampleindent 0
@example
p11tool - GnuTLS PKCS #11 tool
Usage:  p11tool [ -<flag> [<val>] | --<name>[@{=| @}<val>] ]... [url]


Tokens:

       --list-tokens          List all available tokens
       --list-token-urls      List the URLs available tokens
       --list-mechanisms      List all available mechanisms in a token
       --initialize           Initializes a PKCS #11 token
       --initialize-pin       Initializes/Resets a PKCS #11 token user PIN
       --initialize-so-pin    Initializes/Resets a PKCS #11 token security officer PIN
       --set-pin=str          Specify the PIN to use on token initialization
       --set-so-pin=str       Specify the Security Officer's PIN to use on token initialization

Object listing:

       --list-all             List all available objects in a token
       --list-all-certs       List all available certificates in a token
       --list-certs           List all certificates that have an associated private key
       --list-all-privkeys    List all available private keys in a token
       --list-privkeys        an alias for the 'list-all-privkeys' option
       --list-keys            an alias for the 'list-all-privkeys' option
       --list-all-trusted     List all available certificates marked as trusted
       --export               Export the object specified by the URL
                                - prohibits these options:
                                export-stapled
                                export-chain
                                export-pubkey
       --export-stapled       Export the certificate object specified by the URL
                                - prohibits these options:
                                export
                                export-chain
                                export-pubkey
       --export-chain         Export the certificate specified by the URL and its chain of trust
                                - prohibits these options:
                                export-stapled
                                export
                                export-pubkey
       --export-pubkey        Export the public key for a private key
                                - prohibits these options:
                                export-stapled
                                export
                                export-chain
       --info                 List information on an available object in a token
       --trusted              an alias for the 'mark-trusted' option
       --distrusted           an alias for the 'mark-distrusted' option

Key generation:

       --generate-rsa         Generate an RSA private-public key pair
       --generate-dsa         Generate a DSA private-public key pair
       --generate-ecc         Generate an ECDSA private-public key pair
       --bits=num             Specify the number of bits for the key generate
       --curve=str            Specify the curve used for EC key generation
       --sec-param=str        Specify the security level

Writing objects:

       --set-id=str           Set the CKA_ID (in hex) for the specified by the URL object
                                - prohibits the option 'write'
       --set-label=str        Set the CKA_LABEL for the specified by the URL object
                                - prohibits these options:
                                write
                                set-id
       --write                Writes the loaded objects to a PKCS #11 token
       --delete               Deletes the objects matching the given PKCS #11 URL
       --label=str            Sets a label for the write operation
       --id=str               Sets an ID for the write operation
       --mark-wrap            Marks the generated key to be a wrapping key
                                - disabled as '--no-mark-wrap'
       --mark-trusted         Marks the object to be written as trusted
                                - prohibits the option 'mark-distrusted'
                                - disabled as '--no-mark-trusted'
       --mark-distrusted      When retrieving objects, it requires the objects to be distrusted
(blacklisted)
                                - prohibits the option 'mark-trusted'
       --mark-decrypt         Marks the object to be written for decryption
                                - disabled as '--no-mark-decrypt'
       --mark-sign            Marks the object to be written for signature generation
                                - disabled as '--no-mark-sign'
       --mark-ca              Marks the object to be written as a CA
                                - disabled as '--no-mark-ca'
       --mark-private         Marks the object to be written as private
                                - disabled as '--no-mark-private'
       --ca                   an alias for the 'mark-ca' option
       --private              an alias for the 'mark-private' option
       --secret-key=str       Provide a hex encoded secret key
       --load-privkey=file    Private key file to use
                                - file must pre-exist
       --load-pubkey=file     Public key file to use
                                - file must pre-exist
       --load-certificate=file Certificate file to use
                                - file must pre-exist

Other options:

   -d, --debug=num            Enable debugging
                                - it must be in the range:
                                  0 to 9999
       --outfile=str          Output file
       --login                Force (user) login to token
                                - disabled as '--no-login'
       --so-login             Force security officer login to token
                                - disabled as '--no-so-login'
       --admin-login          an alias for the 'so-login' option
       --test-sign            Tests the signature operation of the provided object
       --generate-random=num  Generate random data
   -8, --pkcs8                Use PKCS #8 format for private keys
       --inder                Use DER/RAW format for input
                                - disabled as '--no-inder'
       --inraw                an alias for the 'inder' option
       --outder               Use DER format for output certificates, private keys, and DH parameters
                                - disabled as '--no-outder'
       --outraw               an alias for the 'outder' option
       --provider=file        Specify the PKCS #11 provider library
       --detailed-url         Print detailed URLs
                                - disabled as '--no-detailed-url'
       --only-urls            Print a compact listing using only the URLs
       --batch                Disable all interaction with the tool

Version, usage and configuration options:

   -v, --version[=arg]        output version information and exit
   -h, --help                 display extended usage information and exit
   -!, --more-help            extended usage information passed thru pager

Options are specified by doubled hyphens and their name or by a single
hyphen and the flag character.
Operands and options may be intermixed.  They will be reordered.

Program that allows operations on PKCS #11 smart cards and security
modules.

To use PKCS #11 tokens with GnuTLS the p11-kit configuration files need to
be setup.  That is create a .module file in /etc/pkcs11/modules with the
contents 'module: /path/to/pkcs11.so'.  Alternatively the configuration
file /etc/gnutls/pkcs11.conf has to exist and contain a number of lines of
the form 'load=/usr/lib/opensc-pkcs11.so'.

You can provide the PIN to be used for the PKCS #11 operations with the
environment variables GNUTLS_PIN and GNUTLS_SO_PIN.

@end example
@exampleindent 4

@anchor{p11tool debug}
@subsection debug option (-d)

This is the ``enable debugging'' option.
This option takes a number argument.
Specifies the debug level.
@anchor{p11tool export-chain}
@subsection export-chain option

This is the ``export the certificate specified by the url and its chain of trust'' option.
Exports the certificate specified by the URL and generates its chain of trust based on the stored certificates in the module.
@anchor{p11tool list-all-privkeys}
@subsection list-all-privkeys option

This is the ``list all available private keys in a token'' option.
Lists all the private keys in a token that match the specified URL.
@anchor{p11tool list-privkeys}
@subsection list-privkeys option

This is an alias for the @code{list-all-privkeys} option,
@pxref{p11tool list-all-privkeys, the list-all-privkeys option documentation}.

@anchor{p11tool list-keys}
@subsection list-keys option

This is an alias for the @code{list-all-privkeys} option,
@pxref{p11tool list-all-privkeys, the list-all-privkeys option documentation}.

@anchor{p11tool write}
@subsection write option

This is the ``writes the loaded objects to a pkcs #11 token'' option.
It can be used to write private keys, certificates or secret keys to a token.
@anchor{p11tool generate-random}
@subsection generate-random option

This is the ``generate random data'' option.
This option takes a number argument.
Asks the token to generate a number of bytes of random bytes.
@anchor{p11tool generate-rsa}
@subsection generate-rsa option

This is the ``generate an rsa private-public key pair'' option.
Generates an RSA private-public key pair on the specified token.
@anchor{p11tool generate-dsa}
@subsection generate-dsa option

This is the ``generate a dsa private-public key pair'' option.
Generates a DSA private-public key pair on the specified token.
@anchor{p11tool generate-ecc}
@subsection generate-ecc option

This is the ``generate an ecdsa private-public key pair'' option.
Generates an ECDSA private-public key pair on the specified token.
@anchor{p11tool export-pubkey}
@subsection export-pubkey option

This is the ``export the public key for a private key'' option.
Exports the public key for the specified private key
@anchor{p11tool set-id}
@subsection set-id option

This is the ``set the cka_id (in hex) for the specified by the url object'' option.
This option takes a string argument.
Sets the CKA_ID in the specified by the URL object. The ID should be specified in hexadecimal format without a '0x' prefix.
@anchor{p11tool set-label}
@subsection set-label option

This is the ``set the cka_label for the specified by the url object'' option.
This option takes a string argument.
Sets the CKA_LABEL in the specified by the URL object
@anchor{p11tool id}
@subsection id option

This is the ``sets an id for the write operation'' option.
This option takes a string argument.
Sets the CKA_ID to be set by the write operation. The ID should be specified in hexadecimal format without a '0x' prefix.
@anchor{p11tool mark-wrap}
@subsection mark-wrap option

This is the ``marks the generated key to be a wrapping key'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-mark-wrap.
@end itemize

Marks the generated key with the CKA_WRAP flag.
@anchor{p11tool mark-trusted}
@subsection mark-trusted option

This is the ``marks the object to be written as trusted'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-mark-trusted.
@end itemize

Marks the object to be generated/copied with the CKA_TRUST flag.
@anchor{p11tool mark-ca}
@subsection mark-ca option

This is the ``marks the object to be written as a ca'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-mark-ca.
@end itemize

Marks the object to be generated/copied with the CKA_CERTIFICATE_CATEGORY as CA.
@anchor{p11tool mark-private}
@subsection mark-private option

This is the ``marks the object to be written as private'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-mark-private.
@item
It is enabled by default.
@end itemize

Marks the object to be generated/copied with the CKA_PRIVATE flag. The written object will require a PIN to be used.
@anchor{p11tool trusted}
@subsection trusted option

This is an alias for the @code{mark-trusted} option,
@pxref{p11tool mark-trusted, the mark-trusted option documentation}.

@anchor{p11tool ca}
@subsection ca option

This is an alias for the @code{mark-ca} option,
@pxref{p11tool mark-ca, the mark-ca option documentation}.

@anchor{p11tool private}
@subsection private option

This is an alias for the @code{mark-private} option,
@pxref{p11tool mark-private, the mark-private option documentation}.

@anchor{p11tool so-login}
@subsection so-login option

This is the ``force security officer login to token'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-so-login.
@end itemize

Forces login to the token as security officer (admin).
@anchor{p11tool admin-login}
@subsection admin-login option

This is an alias for the @code{so-login} option,
@pxref{p11tool so-login, the so-login option documentation}.

@anchor{p11tool curve}
@subsection curve option

This is the ``specify the curve used for ec key generation'' option.
This option takes a string argument.
Supported values are secp192r1, secp224r1, secp256r1, secp384r1 and secp521r1.
@anchor{p11tool sec-param}
@subsection sec-param option

This is the ``specify the security level'' option.
This option takes a string argument @file{Security parameter}.
This is alternative to the bits option. Available options are [low, legacy, medium, high, ultra].
@anchor{p11tool inder}
@subsection inder option

This is the ``use der/raw format for input'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-inder.
@end itemize

Use DER/RAW format for input certificates and private keys.
@anchor{p11tool inraw}
@subsection inraw option

This is an alias for the @code{inder} option,
@pxref{p11tool inder, the inder option documentation}.

@anchor{p11tool outder}
@subsection outder option

This is the ``use der format for output certificates, private keys, and dh parameters'' option.

@noindent
This option has some usage constraints.  It:
@itemize @bullet
@item
can be disabled with --no-outder.
@end itemize

The output will be in DER or RAW format.
@anchor{p11tool outraw}
@subsection outraw option

This is an alias for the @code{outder} option,
@pxref{p11tool outder, the outder option documentation}.

@anchor{p11tool set-pin}
@subsection set-pin option

This is the ``specify the pin to use on token initialization'' option.
This option takes a string argument.
Alternatively the GNUTLS_PIN environment variable may be used.
@anchor{p11tool set-so-pin}
@subsection set-so-pin option

This is the ``specify the security officer's pin to use on token initialization'' option.
This option takes a string argument.
Alternatively the GNUTLS_SO_PIN environment variable may be used.
@anchor{p11tool provider}
@subsection provider option

This is the ``specify the pkcs #11 provider library'' option.
This option takes a file argument.
This will override the default options in /etc/gnutls/pkcs11.conf
@anchor{p11tool exit status}
@subsection p11tool exit status

One of the following exit values will be returned:
@table @samp
@item 0 (EXIT_SUCCESS)
Successful program execution.
@item 1 (EXIT_FAILURE)
The operation failed or the command syntax was not valid.
@end table
@anchor{p11tool See Also}
@subsection p11tool See Also
    certtool (1)
@anchor{p11tool Examples}
@subsection p11tool Examples
To view all tokens in your system use:
@example
$ p11tool --list-tokens
@end example

To view all objects in a token use:
@example
$ p11tool --login --list-all "pkcs11:TOKEN-URL"
@end example

To store a private key and a certificate in a token run:
@example
$ p11tool --login --write "pkcs11:URL" --load-privkey key.pem \
          --label "Mykey"
$ p11tool --login --write "pkcs11:URL" --load-certificate cert.pem \
          --label "Mykey"
@end example
Note that some tokens require the same label to be used for the certificate
and its corresponding private key.

To generate an RSA private key inside the token use:
@example
$ p11tool --login --generate-rsa --bits 1024 --label "MyNewKey" \
          --outfile MyNewKey.pub "pkcs11:TOKEN-URL"
@end example
The bits parameter in the above example is explicitly set because some
tokens only support limited choices in the bit length. The output file is the
corresponding public key. This key can be used to general a certificate
request with certtool.
@example
certtool --generate-request --load-privkey "pkcs11:KEY-URL" \
   --load-pubkey MyNewKey.pub --outfile request.pem
@end example
