123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787 |
- \input texinfo @c -*- Texinfo -*-
- @setfilename scute.info
- @settitle The Scute Manual
- @dircategory GNU Utilities
- @direntry
- * Scute: (scute). PKCS #11 module for the OpenPGP Card
- @end direntry
- @include version.texi
- @c Unify some of the indices.
- @syncodeindex tp fn
- @syncodeindex pg fn
- @ifinfo
- This file documents the Scute module.
- This is Edition @value{EDITION}, last updated @value{UPDATED}, of
- @cite{The Scute Manual}, for Version @value{VERSION}.
- @c NOTE: Don't forget to update the year for the TeX version, too.
- Copyright @copyright{} 2002, 2003, 2004, 2005, 2006, 2007 g10 Code GmbH.
- The Scute Manual 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; either version 2 of the License, or (at your
- option) any later version.
- The Scute Manual 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 Lesser General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- @end ifinfo
- @iftex
- @shorttitlepage The Scute Manual
- @end iftex
- @titlepage
- @center @titlefont{The Scute Manual}
- @sp 6
- @center Edition @value{EDITION}
- @sp 1
- @center last updated @value{UPDATED}
- @sp 1
- @center for version @value{VERSION}
- @page
- @vskip 0pt plus 1filll
- Copyright @copyright{} 2002, 2003, 2004, 2005, 2006, 2007 g10 Code GmbH.
- The Scute Manual 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; either version 2 of the License, or (at your
- option) any later version.
- The Scute Manual 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 Lesser General Public License
- along with this program; if not, write to the Free Software Foundation,
- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
- @end titlepage
- @page
- @ifnottex
- @node Top
- @top Main Menu
- This is Edition @value{EDITION}, last updated @value{UPDATED}, of
- @cite{The Scute Manual}, for Version @value{VERSION} of the Scute
- module.
- @end ifnottex
- @menu
- * Introduction:: How to use this manual.
- * Preparation:: What you should do before using Scute.
- * Client Authentication:: How to use Scute for client authentication.
- * Troubleshooting:: What to do when things go wrong.
- * Internals:: Technical details about Scute.
- Appendices
- * Copying:: The GNU General Public License says
- how you can copy and share Scute.
- Indices
- * Concept Index:: Index of concepts and programs.
- @detailmenu
- --- The Detailed Node Listing ---
- Introduction
- * Getting Started:: Purpose of the manual, and how to use it.
- * Features:: Reasons to install and use Scute.
- * Overview:: Basic architecture of the Scute module.
- Preparation
- * Prerequisites:: Dependencies of Scute.
- * Building the Source:: How to build Scute.
- * Certificate Preparation:: Preparing certificates for use with Scute.
- Client Authentication
- * Application Configuration:: Preparing the application for use with Scute.
- * Authentication With Service:: Using Scute for client authentication.
- Troubleshooting
- Internals
- * Features and Limitations:: Details about the interfaces implemented.
- * Developing Scute:: How to understand or improve Scute.
- * Mozilla Compatibility:: Interoperability notes for Mozilla NSS.
- @end detailmenu
- @end menu
- @node Introduction
- @chapter Introduction
- This is a PKCS #11 implementation for the GnuPG Agent using the GnuPG
- Smart Card Daemon. Currently, only the OpenPGP card is supported.
- Scute enables use of the OpenPGP smart card in applications supporting
- PKCS #11 compliant security tokens. The main application at this time
- is client authentication in Mozilla-based web browsers. In the future,
- other applications will be supported.
- @menu
- * Getting Started:: Purpose of the manual, and how to use it.
- * Features:: Reasons to install and use Scute.
- * Overview:: Basic architecture of the Scute module.
- @end menu
- @node Getting Started
- @section Getting Started
- This manual documents the Scute module, how it can be used for common
- applications supported by it, and how it can be extended and improved by
- programmers. It is thus a user manual as well as a developer manual.
- The reader is assumed to possess basic knowledge about cryptography in
- general, and public key cryptography in particular. The underlying
- cryptographic engines that are used by the library are not explained,
- but where necessary, special features or requirements are provided.
- This manual can be used in several ways. If read from the beginning to
- the end, it gives a good introduction into the module and how it can be
- used in an application. Forward references are included where
- necessary. Later on, the manual can be used as a reference manual to
- get just the information needed about any particular application of the
- module.
- @node Features
- @section Features
- Scute is currently the only implementation of PKCS #11 for the OpenPGP
- smart card. Apart from that, it offers a couple of other benefits:
- @table @asis
- @item it's free software
- Anybody can use, modify, and redistribute it under the terms of the GNU
- General Public License (@pxref{Copying}).
- @item it's built to grow
- Although Scute currently only provides a single function, client
- authentication using OpenPGP smart cards in Mozilla-based web browsers,
- it was built with the intention of supporting other applications as well
- in the future.
- @item it's easy
- Building and installing Scute is easy, and preparing smart cards for use
- with Scute is a snatch using the GnuPG 2.0 framework. The integration
- of Scute into the application is seamless.
- @end table
- @node Overview
- @section Overview
- Scute is a security device that implements the PKCS #11 interface for
- security tokens. Applications which know how to use the PKCS #11
- interface to access security tokens for crytpographic operations can use
- Scute to access the OpenPGP smart card. An important example of such an
- application is the Firefox web browser by the Mozilla project, which
- uses the Mozilla Network Security Services library (NSS).
- Scute itself does not include a driver for the smart card itself.
- Instead, it uses the GnuPG 2.0 framework to access the smart cards and
- associated data like certificates. Scute acts as the glue between the
- application and GnuPG 2.0.
- Currently, only client authentication over HTTPS with Firefox using the
- OpenPGP card is supported. In this configuration, Scute allows users to
- authenticate themselves to a remote web service without entering their
- log-in information.
- @node Preparation
- @chapter Preparation
- To use Scute, you first have to install the software. You also have to
- prepare each card you want to use with Scute before it can be used.
- Furthermore, you need to configure the application to make use of Scute
- for cryptographic operations. This chapter explains each of these steps
- in detail.
- @menu
- * Prerequisites:: Dependencies of Scute.
- * Building the Source:: How to build Scute.
- * Certificate Preparation:: Preparing certificates for use with Scute.
- @end menu
- @node Prerequisites
- @section Prerequisites
- There are two types of dependencies for Scute: compile-time dependencies
- and run-time dependencies. The compile-time dependencies only need to
- be fulfilled when Scute is compiled and installed. The run-time
- dependencies need to be fulfilled when Scute is used in an application.
- Scute depends, in addition to the essential build utilities, on the
- following packages at build time:
- @table @code
- @item libgpg-error
- Scute uses the GnuPG 2.0 framework for error handling, so it depends on
- the GPG error library. The minimum version required is 0.7.
- @item libassuan
- Scute uses the GnuPG 2.0 framework for communication with the GPG Agent,
- so it depends on the Assuan library. The minimum version required is
- 0.6.10.
- @end table
- At run-time, in addition to the run-time versions of the above
- libraries, you also need the following packages installed and
- configured:
- @table @asis
- @item GnuPG
- Scute uses the GnuPG 2.0 framework to access the OpenPGP card and for
- certificate management. The minimum version required is 2.0.0.
- @strong{Caution:} A functional installation of GnuPG 2.0 requires a
- running GPG Agent process, which must be advertised to the applications
- via the @code{GPG_AGENT_INFO} environment variable. Please make sure
- that you fulfill this requirement before using Scute in an application,
- running the Scute test suite, or preparing certificates as described in
- @ref{Certificate Preparation}. @xref{Invoking GPG-AGENT, , , gnupg,
- Using the GNU Privacy Guard}, for details on how to run the GPG Agent.
- @item Pinentry
- Pinentry is a dependency of GnuPG 2.0, so it also needs to be installed
- with it.
- @item Firefox et al.
- Firefox is the first application supported by Scute. In the future,
- other applications may be supported. The applications are not
- dependencies of Scute, but Scute can not be used stand-alone, so you can
- not experience it without an application.
- @end table
- @node Building the Source
- @section Building the Source
- Scute does comply to the GNU coding standards and thus can be compiled
- and installed according to the generic installation instructions found
- in the source package in the file @code{INSTALL}. There are no Scute
- specific options to the configure script.
- After installation, the @code{libscute.so} module file can be found in
- the library directory of the installation path.
- @node Certificate Preparation
- @section Certificate Preparation
- To use an OpenPGP card with Scute, it first has to be initialized by
- generating or loading a key on the card, see
- @uref{http://www.gnupg.org/(en)/howtos/card-howto/en/smartcard-howto.html,
- the OpenPGP Card How-To}. Then a certificate has to be created and
- imported into GPGSM. This task involves three steps: First, a
- certificate signing request (@acronym{CSR}) has to be created that
- matches the key on the card. This certificate signing request then has
- to be submitted to a certificate authority (@acronym{CA}), which will
- create the certificate and send it back to you. At last, the
- certificate has to be imported into GPGSM. This section will explain
- all of these steps in detail.
- Before you start, make sure that the GPG Agent is running, see
- @ref{Prerequisites}. There is no need to configure GPGSM, so you can
- create a CSR with the command:
- @example
- $ gpgsm-gencert.sh > floppy-head.p10
- Key type
- [1] RSA
- [2] Existing key
- [3] Direct from card
- Your selection: 3
- You selected: Direct from card
- @end example
- As we create a certificate for the OpenPGP Card, the option ``@code{[3]
- Direct from card}'' should be selected.
- @example
- Card with S/N D27600012401010100010000051B0000 found
- gpg-agent uses OPENPGP.3 as ssh key
- Select key
- [1] OPENPGP.1
- [2] OPENPGP.2
- [3] OPENPGP.3
- [4] back
- Your selection: 3
- You selected: OPENPGP.3
- Key usage
- [1] sign, encrypt
- [2] sign
- [3] encrypt
- Your selection: 2
- You selected: sign
- @end example
- The only operation currently supported is client authentication. For
- this, the authentication key has to be selected. This is the third key
- on the card, so the options ``@code{[3] OPENPGP.3}'' and ``@code{[2]
- sign}'' should be chosen. Note that the key usage is only advisory, and
- the CA may assign different capabilities.
- @example
- Name (DN)
- > CN=Floppy Head,OU="Webserver Team",O="Snake Oil, Ltd",L="Snake Town",ST="Snake Desert",C=XY
- E-Mail addresses (end with an empty line)
- > floppy.head@@example.com
- E-Mail addresses (end with an empty line)
- >
- DNS Names (optional; end with an empty line)
- >
- URIs (optional; end with an empty line)
- >
- @end example
- As a last step, the common name and e-mail address of the key owner need
- to be specified by you. The above are only an example for a fictious
- person working at a fictious company. DNS names are only meaningful for
- server certificates and thus should be left empty.
- We have now entered all required information and gpgsm will display what
- it has gathered and ask whether to create the certificate request:
- @example
- Parameters for certificate request to create:
- 1 Key-Type: card:OPENPGP.3
- 2 Key-Length:
- 3 Key-Usage: sign
- 4 Name-DN: CN=Floppy Head,OU="Webserver Team",O="Snake Oil, Ltd",L="Snake Town",ST="Snake Desert",C=XY
- 5 Name-Email: floppy.head@@example.com
- Really create such a CSR?
- [1] yes
- [2] no
- Your selection: 1
- You selected: yes
- @end example
- GPGSM will now start working on creating the request. During this time
- you will be asked once for a passphrase to unprotect the authentication
- key on the card. A pop up window will appear to ask for it.
- When it is ready, you should see the final notice:
- @example
- gpgsm: certificate request created
- @end example
- Now, you may look at the created request:
- @example
- $ cat floppy-head.p10
- -----BEGIN CERTIFICATE REQUEST-----
- MIICCDCCAXECAQAwgYExCzAJBgNVBAYTAlhZMRUwEwYDVQQIEwxTbmFrZSBEZXNl
- cnQxEzARBgNVBAcTClNuYWtlIFRvd24xFzAVBgNVBAoTDlNuYWtlIE9pbCwgTHRk
- MRcwFQYDVQQLEw5XZWJzZXJ2ZXIgVGVhbTEUMBIGA1UEAxMLRmxvcHB5IEhlYWQw
- gaAwDQYJKoZIhvcNAQEBBQADgY4AMIGKAoGBANWaM9YS89AOx3GX1Rua+4DUHwbL
- wt0rBYdBddlabMMteVjUcOOhbFMirLpLAi1S8fUXNiy84ysOmFStmvSIXDsAgXq5
- 1ESOU4SNg2zEkPDF1WYJ5BFIXdYq9i2k5W7+ctV8PkKv3e5IeYXTa5qppIPD31de
- gM8Qj7tK0hL/eNCfAgQAAQABoEUwQwYJKoZIhvcNAQkOMTYwNDAiBgNVHREEGzAZ
- gRdmbG9wcHkuaGVhZEBleGFtcGxlLmNvbTAOBgNVHQ8BAf8EBAMCBsAwDQYJKoZI
- hvcNAQEFBQADgYEAFC9q6+ib9YGCLB/2AlZR+/dvb+pEeXR1EbpV/dw/gjP1yPY6
- 29n8ZIDLUvQvNCtfCcXFxFimVSSB/KmFXXsJbM+NXQyT6Ocn34iHmkf9IVRMWQWg
- ZBYfQVeXAd7XlxI6d1wXDLwD/26lTU/rH2JU6H1+zSfZxqwVC4Iu+kiN4Y8=
- -----END CERTIFICATE REQUEST-----
- $
- @end example
- The next step is to submit this certificate request to the CA, which can
- then create a certificate and send it back to you.
- If, for example, you use the CA @uref{http://www.cacert.org, CAcert},
- then you can log into your account at the CAcert website, choose
- ``FIXME'', check ``FIXME'', paste the above request block into the text
- field and click on ``Submit''. If everything works correctly, a
- certificate will be shown, which you can cut and paste into a new file
- @file{floppy-head.crt}.
- Alternatively if, for example, you set up your own CA with OpenSSL, then
- you can create your own certificate by issueing a command similar
- @code{openssl ca -in floppy-head.p10 -cert snakeoil-ca-rsa.crt -keyfile
- snakeoil-ca-rsa.key -out floppy-head.crt}. Please see the OpenSSL
- documentation for more details on how to set up and administrate a
- certificate authority infrastructure.
- In any way you should end up with a certificate file
- @file{floppy-head.crt}, which you then have to import into GPGSM. It is
- also recommended that you import the root certificate of the CA first in
- the same fashion.
- @example
- $ gpgsm --import floppy-head.crt
- gpgsm: certificate imported
-
- gpgsm: total number processed: 1
- gpgsm: imported: 1
- @end example
- gpgsm tells you that it has imported the certificate. It is now
- associated with the key you used when creating the request. To see the
- content of your certificate, you may now enter:
- @example
- $ gpgsm -K Floppy
- /home/foo/.gnupg/pubring.kbx
- ---------------------------
- Serial number: 10
- Issuer: /CN=Snake Oil CA/OU=Certificate Authority/O=Snake Oil, Ltd/L=Snake Town/ST=Snake Desert/C=XY/EMail=ca@@snakeoil.dom
- Subject: /CN=Floppy Head/OU=Webserver Team/O=Snake Oil, Ltd/ST=Snake Desert/C=XY
- validity: 2006-11-11 14:09:12 through 2007-11-11 14:09:12
- key type: 1024 bit RSA
- fingerprint: EC:93:A2:55:C6:58:7F:C9:9E:96:DB:12:6E:64:99:54:BB:E1:94:68
- @end example
- The option ``@code{-K}'' is used above because this will only list
- certificates for which a private key is available. To see more details,
- you may use ``@code{--dump-secret-keys}'' instead of ``@code{-K}''.
- @node Client Authentication
- @chapter Client Authentication
- @menu
- * Application Configuration:: Preparing the application for use with Scute.
- * Authentication With Service:: Using Scute for client authentication.
- @end menu
- Scute allows you to authenticate yourself to a website securely without
- entering a username or password by simply using your OpenPGP card.
- Currently, only Mozilla-based browsers like Firefox are supported,
- although other applications using Mozilla NSS or supporting PKCS #11
- modules may work.
- @node Application Configuration
- @section Application Configuration
- To prepare your application for use with Scute, you have to load the
- Scute module as a PKCS #11 module into the application. With Firefox,
- this can be done by choosing @code{Edit->Preferences} in the menu. In
- the preferences configuration dialog, you should select the
- @code{Advanced} configuration section, then the @code{Security} tab, and
- then select @code{Security Devices} in the category @code{Certificates}.
- @image{firefox-pref}
- In the devices manager dialog, you can select @code{Load} to load a new
- PKCS #11 device.
- @image{firefox-dm-load-before}
- In the pop-up dialog that follows, you can give a module name
- (e.g. ``@code{Scute}'') and a module filename. The latter should
- correspond to the full file name of the installed Scute module file
- @file{libscute.so}. The default installation path is
- @file{/usr/local/lib}, which would mean that you have to provide the
- file name @file{/usr/local/lib/libscute.so}. If you or your system
- administrator installed Scute in a different location, you have to
- adjust the file name correspondingly.
- @image{firefox-dm-load}
- After confirming installation of the security device, a pop-up window
- should confirm that the module was successfully loaded, and an entry for
- the security device should appear in the device manager list of
- @code{Security Modules and Devices}.
- @image{firefox-dm-load-after}
- When you insert the OpenPGP card for which you generated and imported a
- certificate earlier (see @ref{Certificate Preparation}), the device
- manager should detect this security token and display some information
- about it in the @code{Details} list when you select it from the module
- list.
- @image{firefox-dm-token-present}
- FIXME: Add some documentation and screenshots for the certificate
- manager.
- @node Authentication With Service
- @section Authentication With Service
- Before you access a web service which requires client authentication,
- for instance a fictious web service
- @ifnottex
- @indicateurl{https://example.com},
- @end ifnottex
- @iftex
- @code{https://example.com},
- @end iftex
- the OpenPGP card should be present. In this case, a pop-up window will
- appear that requests you to enter the PIN number protecting the
- authentication key on the OpenPGP card. After entering the PIN number,
- your browser will be authenticated to the server. If the server accepts
- your request and certificate, this is all which is required. You should
- leave the card in the reader as long as the connection persists.
- Depending on how aggressively GPG Agent caches your PIN number, you may
- have to enter the PIN number again later to keep up the connection to
- the server.
- If the card is not present, or you enter the wrong PIN, or the server
- does not admit your certificate, you will get an error message. This
- error message is generated by the application and Scute can not
- influence it. Unfortunately, in Firefox 1, this error message is not
- very user friendly: ``@code{example.com has received an incorrect or
- unexpected message. Error code: -12227}''.
- FIXME: Screenshot.
- FIXME: Document possible error codes.
- @node Troubleshooting
- @chapter Troubleshooting
- @strong{Symptom:} Loading the Scute security device in the security
- device manager of Firefox fails with "Unable to load module".
- @strong{Solution:} Make sure that Scute is correctly installed, and that
- all libraries and executables are available. Make sure that the GPG
- Agent is running and can be found via the environment variable
- @code{GPG_AGENT_INFO}. @xref{Invoking GPG-AGENT, , , gnupg, Using the
- GNU Privacy Guard}, for details on how to run the GPG Agent.
- @strong{Symptom:} Client authentication fails with "<example.com> has
- received an incorrect or unexpected message. Error code: -12227".
- @strong{Solution:} Make sure that the correct OpenPGP card is inserted
- and the certificate available in GPGSM. Check that the OpenPGP card is
- detected correctly in the security device manager and the corresponding
- certificate is displayed in the certificate manager of Firefox.
- @xref{Authentication With Service}.
- @strong{Symptom:} The OpenPGP card is detected and displayed in the
- security device manager in Firefox, but no corresponding certificate is
- displayed in the certificate manager of Firefox.
- @strong{Solution:} Make sure that the corresponding certificate is
- imported in GPGSM.
- FIXME: Can this really happen???
- @node Internals
- @chapter Internals
- The following notes are intended for people interested in more technical
- details about Scute and its implementation. They give an overview about
- its scope and potential compatibility issues with applications.
- @menu
- * Features and Limitations:: Details about the interfaces implemented.
- * Developing Scute:: How to understand or improve Scute.
- * Mozilla Compatibility:: Interoperability notes for Mozilla NSS.
- @end menu
- @node Features and Limitations
- @section Features and Limitations
- Scute implements version 2.20 of the
- @uref{http://www.rsasecurity.com/rsalabs/node.asp?id=2133, PKCS #11}
- specification.
- The @uref{http://www.g10code.com/p-card.html,OpenPGP smart card}
- application is supported in read-only mode.
- The following functions are not supported:
- @table @code
- @item C_Initialize
- No support for native thread package. Locking callbacks must be
- provided if multi-threaded operation is desired.
- @item C_WaitForSlotEvent
- Not implemented. The interface as specified by PKCS #11 is broken
- anyway, as the function can not safely be canceled. Thus, we require
- polling.
- @item C_GetOperationState
- @itemx C_SetOperationState
- Not supported.
- @item C_InitToken
- @itemx C_InitPIN
- @itemx C_SetPIN
- Not supported. No write operations are allowed. To configure the
- token, please use the tools accompanying the GnuPG software suite.
- @item C_Login
- @itemx C_Logout
- Not supported. No login into the token by the software is required.
- Passphrase queries are implemented by the use of GPG Agent and Pinentry.
- @item C_EncryptInit
- @itemx C_Encrypt
- @itemx C_EncryptUpdate
- @itemx C_EncryptFinal
- @itemx C_DigestInit
- @itemx C_Digest
- @itemx C_DigestUpdate
- @itemx C_DigestKey
- @itemx C_DigestFinal
- @itemx C_VerifyInit
- @itemx C_Verify
- @itemx C_VerifyUpdate
- @itemx C_VerifyFinal
- @itemx C_VerifyRecoverInit
- @itemx C_VerifyRec
- Not supported. Only secret key operations are supported.
- @item C_SignInit
- @itemx C_Sign
- Currently, only signing 36 bytes (MD5+SHA1) hashes is supported (used
- for client authentication).
- @item C_DecryptInit
- @itemx C_Decrypt
- Not yet supported, but will be in the future.
- @item C_SignUpdate
- @itemx C_SignFinal
- @itemx C_DecryptUpdate
- @itemx C_DecryptFinal
- No progressive crypto-operations are supported.
- @item C_SignRecoverInit
- @itemx C_SignRecover
- Not supported.
- @item C_DigestEncryptUpdate
- @itemx C_DecryptDigestUpdate
- @itemx C_SignEncryptUpdate
- @itemx C_DecryptVerifyUpdate
- Dual-purpose cryptographic functions are not supported.
- @item C_GenerateKey
- @itemx C_GenerateKeyPair
- @itemx C_WrapKey
- @itemx C_UnwrapKey
- @itemx C_DeriveKey
- Key management functions are not supported. Please use the tools
- accompanying the GnuPG software suite to generate and import keys for
- use with the token.
- @item C_SeedRandom
- @itemx C_GenerateRandom
- Not supported at this point. @code{C_GenerateRandom} may be supported
- in the future, though.
- @item C_CreateObject
- @itemx C_CopyObject
- @itemx C_DestroyObject
- @itemx C_SetAttributeValue:
- Only read-only operations are supported on objects.
- @item C_GetObjectSize
- Not supported.
- @item CKO_CERTIFICATE
- The label specifies the key on the card used (e.g. @code{OPENPGP.3}).
- The ID is the fingerprint.
- @item CKO_PRIVATE_KEY:
- The @code{CKA_LOCAL} attribute can not be supported by the OpenPGP card.
- It is always set to false (as the key on the card may be copied to the
- card from an external source).
- @end table
- @node Developing Scute
- @section Developing Scute
- Scute is single-threaded. There is a global lock that is taken in all
- entry points of Scute, except for @code{C_Initialize},
- @code{C_Finalize}, @code{C_GetFunctionList}, and stubs.
- Here are a couple of hints on how to develop PKCS #11 modules for
- Mozilla:
- @code{libopensc2} ships with a @code{pkcs11-spy} library that can be
- loaded as a wrapper around the PKCS #11 library you want to use to log
- all functions invoked by Mozilla. Here is how to use it:
- Set the @code{PKCS11SPY_OUTPUT} environment variable to a filename.
- @code{pkcs11-spy} appends its log messages at the end of this file. Set
- the @code{PKCS11SPY} environment variable to the filename of the PKCS
- #11 module you actually want to use. Start Mozilla within this
- environment.
- There is a different, probably more powerful way to debug Mozilla PKCS
- #11 libraries. However, to be able to use it, you need to configure and
- compile the Mozilla NSS sources with @code{--enable-debug}.
- Instructions can be found at:
- @uref{http://www.mozilla.org/projects/security/pki/nss/tech-notes/tn2.html}
- Here are a couple of links to more information about implementing a
- PKCS #11 module for Mozilla:
- @table @uref
- @item http://docs.sun.com/source/816-6150-10/index.htm
- @itemx http://docs.sun.com/source/816-6150-10/pkcs.htm
- Implementing PKCS #11 for the Netscape Security Library (Caution: The
- content may be out of date)
- @item http://www.mozilla.org/projects/security/pki/pkcs11/netscape/problems.html
- Common PKCS #11 Implementation Problems
- @item http://www.mozilla.org/projects/security/pki/pkcs11/
- PKCS #11 Conformance Testing
- @item http://www.mozilla.org/projects/security/pki/nss/
- The Mozilla NSS web page
- @end table
- @node Mozilla Compatibility
- @section Mozilla Compatibility
- Mozilla has a bug that causes the wrong security device to be unloaded
- when unloading a security device. Also, the displayed list becomes
- corrupt. When closing and reopening the security device manager, the
- list displayed is correct, but in anyway the wrong security module is
- unloaded.
- @include gpl.texi
- @node Concept Index
- @unnumbered Concept Index
- @printindex cp
- @summarycontents
- @contents
- @bye
|