The BELPIC card does now work.

This commit is contained in:
Werner Koch 2005-09-06 18:42:13 +00:00
parent 12f7e943cc
commit d9d2d3da91
11 changed files with 352 additions and 196 deletions

2
NEWS
View File

@ -1,6 +1,8 @@
Noteworthy changes in version 1.9.19 Noteworthy changes in version 1.9.19
------------------------------------------------- -------------------------------------------------
* The Belgian eID card is now supported.
Noteworthy changes in version 1.9.18 (2005-08-01) Noteworthy changes in version 1.9.18 (2005-08-01)
------------------------------------------------- -------------------------------------------------

1
THANKS
View File

@ -1,6 +1,7 @@
Alexander Belopolsky belopolsky at mac.com Alexander Belopolsky belopolsky at mac.com
Andrew J. Schorr aschorr at telemetry-investments.com Andrew J. Schorr aschorr at telemetry-investments.com
Carl Meijer carlm at prism.co.za
Charly Avital shavital at mac.com Charly Avital shavital at mac.com
Kazu Yamamoto kazu at iij.ad.jp Kazu Yamamoto kazu at iij.ad.jp
Michael Nottebrock michaelnottebrock at gmx.net Michael Nottebrock michaelnottebrock at gmx.net

View File

@ -24,7 +24,7 @@ min_automake_version="1.9.3"
# Version number: Remember to change it immediately *after* a release. # Version number: Remember to change it immediately *after* a release.
# Add a "-cvs" prefix for non-released code. # Add a "-cvs" prefix for non-released code.
AC_INIT(gnupg, 1.9.18, gnupg-devel@gnupg.org) AC_INIT(gnupg, 1.9.19-cvs, gnupg-devel@gnupg.org)
# Set development_version to yes if the minor number is odd or you # Set development_version to yes if the minor number is odd or you
# feel that the default check for a development version is not # feel that the default check for a development version is not
# sufficient. # sufficient.

View File

@ -1,3 +1,8 @@
2005-08-16 Werner Koch <wk@g10code.com>
* gpg-agent.texi (Agent Options): Note default file name for
--write-env-file.
2005-06-03 Werner Koch <wk@g10code.com> 2005-06-03 Werner Koch <wk@g10code.com>
* debugging.texi (Architecture Details): New section, mostly empty. * debugging.texi (Architecture Details): New section, mostly empty.

View File

@ -3,6 +3,18 @@
@setfilename gnupg.info @setfilename gnupg.info
@include version.texi @include version.texi
@settitle Using the GNU Privacy Guard @settitle Using the GNU Privacy Guard
@c A couple of macros with no effect on texinfo
@c but used by the yat2m processor.
@macro manpage {a}
@end macro
@macro mansect {a}
@end macro
@macro manpause
@end macro
@macro mancont
@end macro
@c Create a separate index for command line options. @c Create a separate index for command line options.
@defcodeindex op @defcodeindex op
@c Merge the standard indexes into a single one. @c Merge the standard indexes into a single one.
@ -13,8 +25,8 @@
@syncodeindex tp cp @syncodeindex tp cp
@c %**end of header @c %**end of header
@copying @copying
This is the @cite{The GNU Privacy Guard Manual} This is the @cite{The GNU Privacy Guard Manual} (version
(version @value{VERSION}, @value{UPDATED}). @value{VERSION}, @value{UPDATED}).
@iftex @iftex
Published by the Free Software Foundation@* Published by the Free Software Foundation@*

View File

@ -253,8 +253,9 @@ Often it is required to connect to the agent from a process not being an
inferior of @command{gpg-agent} and thus the environment variable with inferior of @command{gpg-agent} and thus the environment variable with
the socket name is not available. To help setting up those variables in the socket name is not available. To help setting up those variables in
other sessions, this option may be used to write the information into other sessions, this option may be used to write the information into
@var{file}. The format is suitable to be evaluated by a Bourne shell @var{file}. If @var{file} is not specified the default name
like in this simple example: @file{$@{HOME@}/.gpg-agent-info} will be used. The format is suitable
to be evaluated by a Bourne shell like in this simple example:
@example @example
eval `cat @var{file}` eval `cat @var{file}`
@ -262,6 +263,7 @@ eval `cut -d= -f 1 < @var{file} | xargs echo export`
@end example @end example
@item --no-grab @item --no-grab
@opindex no-grab @opindex no-grab
Tell the pinentryo not to grab the keyboard and mouse. This option Tell the pinentryo not to grab the keyboard and mouse. This option

View File

@ -20,19 +20,29 @@ GnuPG comes with a couple of smaller tools:
@c @c
@c WATCHGNUPG @c WATCHGNUPG
@c @c
@manpage watchgnupg.1
@node watchgnupg @node watchgnupg
@section Read logs from a socket @section Read logs from a socket
@ifset manverb
watchgnupg \- Read and print logs from a socket
@end ifset
@mansect description
Most of the main utilities are able to write there log files to a Most of the main utilities are able to write there log files to a
Unix Domain socket if configured that way. @command{watchgnupg} is a simple Unix Domain socket if configured that way. @command{watchgnupg} is a simple
listener for such a socket. It ameliorates the output with a time listener for such a socket. It ameliorates the output with a time
stamp and makes sure that long lines are not interspersed with log stamp and makes sure that long lines are not interspersed with log
output from other utilities. output from other utilities.
@manpause
@noindent @noindent
@command{watchgnupg} is commonly invoked as @command{watchgnupg} is commonly invoked as
@samp{watchgnupg --force ~/.gnupg/S.log} @mansect synopsis
@example
watchgnupg --force ~/.gnupg/S.log
@end example
@manpause
@noindent @noindent
This starts it on the current terminal for listening on the socket This starts it on the current terminal for listening on the socket
@ -42,6 +52,7 @@ This starts it on the current terminal for listening on the socket
@command{watchgnupg} understands these options: @command{watchgnupg} understands these options:
@table @gnupgtabopt @table @gnupgtabopt
@mansect options
@item --force @item --force
@opindex force @opindex force
@ -59,15 +70,21 @@ print version of the program and exit
@opindex help @opindex help
Display a brief help page and exit Display a brief help page and exit
@manpause
@end table @end table
@c @c
@c ADDGNUPGHOME @c ADDGNUPGHOME
@c @c
@manpage addgnupghome.8
@node addgnupghome @node addgnupghome
@section Create .gnupg home directories. @section Create .gnupg home directories.
@ifset manverb
addgnupghome \- Create .gnupg home directories
@end ifset
@mansect description
If GnuPG is installed on a system with existing user accounts, it is If GnuPG is installed on a system with existing user accounts, it is
sometimes required to populate the GnuPG home directory with existing sometimes required to populate the GnuPG home directory with existing
files. Especially a @file{trustlist.txt} and a keybox with some files. Especially a @file{trustlist.txt} and a keybox with some
@ -76,18 +93,27 @@ by copying all files from @file{/etc/skel/.gnupg} to the home
directories of the accounts given on the command line. It takes care directories of the accounts given on the command line. It takes care
not to overwrite existing GnuPG home directories. not to overwrite existing GnuPG home directories.
@manpause
@noindent @noindent
@command{addgnupghome} is invoked by root as: @command{addgnupghome} is invoked by root as:
@samp{addgnupghome account1 account2 ... accountn} @mansect synopsis
@example
addgnupghome account1 account2 ... accountn
@end example
@c @c
@c GPGCONF @c GPGCONF
@c @c
@manpage gpgconf.1
@node gpgconf @node gpgconf
@section Modify .gnupg home directories. @section Modify .gnupg home directories.
@ifset manverb
gpgconf \- Modify .gnupg home directories
@end ifset
@mansect description
The @command{gpgconf} is a utility to automatically and reasonable The @command{gpgconf} is a utility to automatically and reasonable
safely query and modify configuration files in the @file{.gnupg} home safely query and modify configuration files in the @file{.gnupg} home
directory. It is designed not to be invoked manually by the user, but directory. It is designed not to be invoked manually by the user, but
@ -121,6 +147,7 @@ changes can then be made active with @command{gpgconf} again. Such a
program that uses @command{gpgconf} in this way will be called GUI program that uses @command{gpgconf} in this way will be called GUI
throughout this section. throughout this section.
@manpause
@menu @menu
* Invoking gpgconf:: List of all commands and options. * Invoking gpgconf:: List of all commands and options.
* Format conventions:: Formatting conventions relevant for all commands. * Format conventions:: Formatting conventions relevant for all commands.
@ -133,9 +160,13 @@ throughout this section.
@node Invoking gpgconf @node Invoking gpgconf
@subsection Invoking gpgconf @subsection Invoking gpgconf
@mansect commands
One of the following commands must be given: One of the following commands must be given:
@manpause
@table @gnupgtabopt @table @gnupgtabopt
@mancont
@item --list-components @item --list-components
List all components. This is the default command used if none is List all components. This is the default command used if none is
specified. specified.
@ -145,11 +176,16 @@ List all options of the component @var{component}.
@item --change-options @var{component} @item --change-options @var{component}
Change the options of the component @var{component}. Change the options of the component @var{component}.
@manpause
@end table @end table
@mansect options
The following options may be used: The following options may be used:
@manpause
@table @gnupgtabopt @table @gnupgtabopt
@mancont
@c FIXME: Not yet supported. @c FIXME: Not yet supported.
@c @item -o @var{file} @c @item -o @var{file}
@c @itemx --output @var{file} @c @itemx --output @var{file}
@ -176,6 +212,7 @@ changing.
This means that the changes will take effect at run-time, as far as This means that the changes will take effect at run-time, as far as
this is possible. Otherwise, they will take effect at the next start this is possible. Otherwise, they will take effect at the next start
of the respective backend programs. of the respective backend programs.
@manpause
@end table @end table
@ -295,6 +332,7 @@ the locale environment of the @command{gpgconf} program.
@c to change it via the command line? @c to change it via the command line?
@mansect usage
@node Listing components @node Listing components
@subsection Listing components @subsection Listing components
@ -580,6 +618,7 @@ $ echo 'force:16:' | gpgconf --change-options dirmngr
The @code{--runtime} option can influence when the changes take The @code{--runtime} option can influence when the changes take
effect. effect.
@manpause
@c @c
@c GPGSM-GENCERT.SH @c GPGSM-GENCERT.SH
@c @c
@ -587,7 +626,7 @@ effect.
@section Generate an X.509 certificate request @section Generate an X.509 certificate request
This is a simple tool to interactivly generate a certificate request This is a simple tool to interactivly generate a certificate request
whicl will be printed to stdout. which will be printed to stdout.
@noindent @noindent
@command{gpgsm-gencert.sh} is invoked as: @command{gpgsm-gencert.sh} is invoked as:

305
po/de.po
View File

@ -10,8 +10,8 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: gnupg2 1.9.18\n" "Project-Id-Version: gnupg2 1.9.18\n"
"Report-Msgid-Bugs-To: translations@gnupg.org\n" "Report-Msgid-Bugs-To: translations@gnupg.org\n"
"POT-Creation-Date: 2005-06-16 09:12+0200\n" "POT-Creation-Date: 2005-09-06 20:01+0200\n"
"PO-Revision-Date: 2005-08-01 15:09+0200\n" "PO-Revision-Date: 2005-08-02 17:02+0200\n"
"Last-Translator: Werner Koch <wk@gnupg.org>\n" "Last-Translator: Werner Koch <wk@gnupg.org>\n"
"Language-Team: de\n" "Language-Team: de\n"
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
@ -34,12 +34,12 @@ msgstr "Im Server Modus ausführen"
msgid "run in daemon mode (background)" msgid "run in daemon mode (background)"
msgstr "Im Daemon Modus ausführen" msgstr "Im Daemon Modus ausführen"
#: agent/gpg-agent.c:112 kbx/kbxutil.c:81 scd/scdaemon.c:105 sm/gpgsm.c:329 #: agent/gpg-agent.c:112 kbx/kbxutil.c:81 scd/scdaemon.c:105 sm/gpgsm.c:331
#: tools/gpgconf.c:62 #: tools/gpgconf.c:62
msgid "verbose" msgid "verbose"
msgstr "ausführlich" msgstr "ausführlich"
#: agent/gpg-agent.c:113 kbx/kbxutil.c:82 scd/scdaemon.c:106 sm/gpgsm.c:330 #: agent/gpg-agent.c:113 kbx/kbxutil.c:82 scd/scdaemon.c:106 sm/gpgsm.c:332
msgid "be somewhat more quiet" msgid "be somewhat more quiet"
msgstr "Etwas weniger Ausgaben erzeugen" msgstr "Etwas weniger Ausgaben erzeugen"
@ -63,7 +63,7 @@ msgstr "Im Vordergrund laufen lassen"
msgid "do not grab keyboard and mouse" msgid "do not grab keyboard and mouse"
msgstr "Tastatur und Maus nicht \"grabben\"" msgstr "Tastatur und Maus nicht \"grabben\""
#: agent/gpg-agent.c:123 scd/scdaemon.c:118 sm/gpgsm.c:332 #: agent/gpg-agent.c:123 scd/scdaemon.c:118 sm/gpgsm.c:334
msgid "use a log file for the server" msgid "use a log file for the server"
msgstr "Logausgaben in eine Datei umlenken" msgstr "Logausgaben in eine Datei umlenken"
@ -116,12 +116,12 @@ msgid "|FILE|write environment settings also to FILE"
msgstr "|DATEI|Schreibe die Umgebungsvariabeln auf DATEI" msgstr "|DATEI|Schreibe die Umgebungsvariabeln auf DATEI"
#: agent/gpg-agent.c:235 agent/protect-tool.c:142 scd/scdaemon.c:183 #: agent/gpg-agent.c:235 agent/protect-tool.c:142 scd/scdaemon.c:183
#: sm/gpgsm.c:503 tools/gpgconf.c:85 #: sm/gpgsm.c:507 tools/gpgconf.c:85
msgid "Please report bugs to <" msgid "Please report bugs to <"
msgstr "Fehlerberichte bitte an <" msgstr "Fehlerberichte bitte an <"
#: agent/gpg-agent.c:235 agent/protect-tool.c:142 scd/scdaemon.c:183 #: agent/gpg-agent.c:235 agent/protect-tool.c:142 scd/scdaemon.c:183
#: sm/gpgsm.c:503 tools/gpgconf.c:85 #: sm/gpgsm.c:507 tools/gpgconf.c:85
msgid ">.\n" msgid ">.\n"
msgstr ">.\n" msgstr ">.\n"
@ -137,123 +137,123 @@ msgstr ""
"Syntax: gpg-agent [Optionen] [Kommando [Argumente]]\n" "Syntax: gpg-agent [Optionen] [Kommando [Argumente]]\n"
"Verwaltung von geheimen Schlüssel für GnuPG\n" "Verwaltung von geheimen Schlüssel für GnuPG\n"
#: agent/gpg-agent.c:311 scd/scdaemon.c:257 sm/gpgsm.c:632 #: agent/gpg-agent.c:311 scd/scdaemon.c:257 sm/gpgsm.c:636
#, c-format #, c-format
msgid "invalid debug-level `%s' given\n" msgid "invalid debug-level `%s' given\n"
msgstr "ungültige Debugebene `%s' angegeben\n" msgstr "ungültige Debugebene `%s' angegeben\n"
#: agent/gpg-agent.c:482 agent/protect-tool.c:1072 kbx/kbxutil.c:431 #: agent/gpg-agent.c:482 agent/protect-tool.c:1072 kbx/kbxutil.c:431
#: scd/scdaemon.c:349 sm/gpgsm.c:753 #: scd/scdaemon.c:349 sm/gpgsm.c:757
#, c-format #, c-format
msgid "libgcrypt is too old (need %s, have %s)\n" msgid "libgcrypt is too old (need %s, have %s)\n"
msgstr "" msgstr ""
"Die Bibliothek \"libgcrypt\" is zu alt (benötigt wird %s, vorhanden ist %s)\n" "Die Bibliothek \"libgcrypt\" is zu alt (benötigt wird %s, vorhanden ist %s)\n"
#: agent/gpg-agent.c:574 scd/scdaemon.c:424 sm/gpgsm.c:854 #: agent/gpg-agent.c:574 scd/scdaemon.c:424 sm/gpgsm.c:858
#, c-format #, c-format
msgid "NOTE: no default option file `%s'\n" msgid "NOTE: no default option file `%s'\n"
msgstr "Notiz: Voreingestellte Konfigurationsdatei `%s' fehlt\n" msgstr "Notiz: Voreingestellte Konfigurationsdatei `%s' fehlt\n"
#: agent/gpg-agent.c:579 agent/gpg-agent.c:1085 scd/scdaemon.c:429 #: agent/gpg-agent.c:579 agent/gpg-agent.c:1090 scd/scdaemon.c:429
#: sm/gpgsm.c:858 #: sm/gpgsm.c:862
#, c-format #, c-format
msgid "option file `%s': %s\n" msgid "option file `%s': %s\n"
msgstr "Konfigurationsdatei `%s': %s\n" msgstr "Konfigurationsdatei `%s': %s\n"
#: agent/gpg-agent.c:587 scd/scdaemon.c:437 sm/gpgsm.c:865 #: agent/gpg-agent.c:587 scd/scdaemon.c:437 sm/gpgsm.c:869
#, c-format #, c-format
msgid "reading options from `%s'\n" msgid "reading options from `%s'\n"
msgstr "Optionen werden aus `%s' gelesen\n" msgstr "Optionen werden aus `%s' gelesen\n"
#: agent/gpg-agent.c:879 #: agent/gpg-agent.c:884
#, c-format #, c-format
msgid "error creating `%s': %s\n" msgid "error creating `%s': %s\n"
msgstr "Fehler beim Erstellen von `%s': %s\n" msgstr "Fehler beim Erstellen von `%s': %s\n"
#: agent/gpg-agent.c:1135 agent/gpg-agent.c:1238 agent/gpg-agent.c:1242 #: agent/gpg-agent.c:1140 agent/gpg-agent.c:1243 agent/gpg-agent.c:1247
#: agent/gpg-agent.c:1278 agent/gpg-agent.c:1282 scd/scdaemon.c:900 #: agent/gpg-agent.c:1283 agent/gpg-agent.c:1287 scd/scdaemon.c:902
#, c-format #, c-format
msgid "can't create directory `%s': %s\n" msgid "can't create directory `%s': %s\n"
msgstr "Das Verzeichniss `%s' kann nicht erstellt werden: %s\n" msgstr "Das Verzeichniss `%s' kann nicht erstellt werden: %s\n"
#: agent/gpg-agent.c:1149 scd/scdaemon.c:914 #: agent/gpg-agent.c:1154 scd/scdaemon.c:916
msgid "name of socket too long\n" msgid "name of socket too long\n"
msgstr "Der Name des Sockets ist zu lang\n" msgstr "Der Name des Sockets ist zu lang\n"
#: agent/gpg-agent.c:1175 scd/scdaemon.c:940 #: agent/gpg-agent.c:1180 scd/scdaemon.c:942
#, c-format #, c-format
msgid "can't create socket: %s\n" msgid "can't create socket: %s\n"
msgstr "Socket kann nicht erzeugt werden: %s\n" msgstr "Socket kann nicht erzeugt werden: %s\n"
#: agent/gpg-agent.c:1204 scd/scdaemon.c:969 #: agent/gpg-agent.c:1209 scd/scdaemon.c:971
#, c-format #, c-format
msgid "error binding socket to `%s': %s\n" msgid "error binding socket to `%s': %s\n"
msgstr "Der Socket kann nicht an `%s' gebunden werden: %s\n" msgstr "Der Socket kann nicht an `%s' gebunden werden: %s\n"
#: agent/gpg-agent.c:1212 scd/scdaemon.c:977 #: agent/gpg-agent.c:1217 scd/scdaemon.c:979
#, c-format #, c-format
msgid "listen() failed: %s\n" msgid "listen() failed: %s\n"
msgstr "Der listen() Aufruf ist fehlgeschlagen: %s\n" msgstr "Der listen() Aufruf ist fehlgeschlagen: %s\n"
#: agent/gpg-agent.c:1218 scd/scdaemon.c:983 #: agent/gpg-agent.c:1223 scd/scdaemon.c:985
#, c-format #, c-format
msgid "listening on socket `%s'\n" msgid "listening on socket `%s'\n"
msgstr "Es wird auf Socket `%s' gehört\n" msgstr "Es wird auf Socket `%s' gehört\n"
#: agent/gpg-agent.c:1246 agent/gpg-agent.c:1288 #: agent/gpg-agent.c:1251 agent/gpg-agent.c:1293
#, c-format #, c-format
msgid "directory `%s' created\n" msgid "directory `%s' created\n"
msgstr "Verzeichniss `%s' wurde erstellt\n" msgstr "Verzeichniss `%s' wurde erstellt\n"
#: agent/gpg-agent.c:1294 #: agent/gpg-agent.c:1299
#, c-format #, c-format
msgid "stat() failed for `%s': %s\n" msgid "stat() failed for `%s': %s\n"
msgstr "stat() Aufruf für `%s' fehlgeschlagen: %s\n" msgstr "stat() Aufruf für `%s' fehlgeschlagen: %s\n"
#: agent/gpg-agent.c:1298 #: agent/gpg-agent.c:1303
#, c-format #, c-format
msgid "can't use `%s' as home directory\n" msgid "can't use `%s' as home directory\n"
msgstr "Die Datei `%s' kann nicht als Home-Verzeichniss benutzt werden\n" msgstr "Die Datei `%s' kann nicht als Home-Verzeichniss benutzt werden\n"
#: agent/gpg-agent.c:1396 #: agent/gpg-agent.c:1401
#, c-format #, c-format
msgid "handler 0x%lx for fd %d started\n" msgid "handler 0x%lx for fd %d started\n"
msgstr "Handhabungsroutine 0x%lx für fd %d gestartet\n" msgstr "Handhabungsroutine 0x%lx für fd %d gestartet\n"
#: agent/gpg-agent.c:1406 #: agent/gpg-agent.c:1411
#, c-format #, c-format
msgid "handler 0x%lx for fd %d terminated\n" msgid "handler 0x%lx for fd %d terminated\n"
msgstr "Handhabungsroutine 0x%lx für den fd %d beendet\n" msgstr "Handhabungsroutine 0x%lx für den fd %d beendet\n"
#: agent/gpg-agent.c:1420 #: agent/gpg-agent.c:1425
#, c-format #, c-format
msgid "ssh handler 0x%lx for fd %d started\n" msgid "ssh handler 0x%lx for fd %d started\n"
msgstr "SSH Handhabungsroutine 0x%lx für fd %d gestartet\n" msgstr "SSH Handhabungsroutine 0x%lx für fd %d gestartet\n"
#: agent/gpg-agent.c:1427 #: agent/gpg-agent.c:1432
#, c-format #, c-format
msgid "ssh handler 0x%lx for fd %d terminated\n" msgid "ssh handler 0x%lx for fd %d terminated\n"
msgstr "SSH Handhabungsroutine 0x%lx für fd %d beendet\n" msgstr "SSH Handhabungsroutine 0x%lx für fd %d beendet\n"
#: agent/gpg-agent.c:1521 scd/scdaemon.c:1099 #: agent/gpg-agent.c:1526 scd/scdaemon.c:1101
#, c-format #, c-format
msgid "pth_select failed: %s - waiting 1s\n" msgid "pth_select failed: %s - waiting 1s\n"
msgstr "pth_select() Aufruf fehlgeschlagen: %s - warte 1s\n" msgstr "pth_select() Aufruf fehlgeschlagen: %s - warte 1s\n"
#: agent/gpg-agent.c:1605 scd/scdaemon.c:1156 #: agent/gpg-agent.c:1610 scd/scdaemon.c:1158
#, c-format #, c-format
msgid "%s %s stopped\n" msgid "%s %s stopped\n"
msgstr "%s %s angehalten\n" msgstr "%s %s angehalten\n"
#: agent/gpg-agent.c:1626 #: agent/gpg-agent.c:1631
msgid "no gpg-agent running in this session\n" msgid "no gpg-agent running in this session\n"
msgstr "Der gpg-agent läuft nicht für diese Session\n" msgstr "Der gpg-agent läuft nicht für diese Session\n"
#: agent/gpg-agent.c:1636 common/simple-pwquery.c:323 sm/call-agent.c:143 #: agent/gpg-agent.c:1641 common/simple-pwquery.c:323 sm/call-agent.c:143
msgid "malformed GPG_AGENT_INFO environment variable\n" msgid "malformed GPG_AGENT_INFO environment variable\n"
msgstr "Die Variable GPG_AGENT_INFO ist fehlerhaft\n" msgstr "Die Variable GPG_AGENT_INFO ist fehlerhaft\n"
#: agent/gpg-agent.c:1648 common/simple-pwquery.c:335 sm/call-agent.c:155 #: agent/gpg-agent.c:1653 common/simple-pwquery.c:335 sm/call-agent.c:155
#, c-format #, c-format
msgid "gpg-agent protocol version %d is not supported\n" msgid "gpg-agent protocol version %d is not supported\n"
msgstr "Das gpg-agent Protocol %d wird nicht unterstützt\n" msgstr "Das gpg-agent Protocol %d wird nicht unterstützt\n"
@ -284,7 +284,7 @@ msgid ""
"Please enter the passphrase to protect the imported object within the GnuPG " "Please enter the passphrase to protect the imported object within the GnuPG "
"system." "system."
msgstr "" msgstr ""
"Bitte geben Sie die Passphrase ein, um das importierte Objket im GnuPG " "Bitte geben Sie die Passphrase ein, um das importierte Objekt im GnuPG "
"System zu schützen." "System zu schützen."
#: agent/protect-tool.c:1214 agent/genkey.c:110 agent/genkey.c:218 #: agent/protect-tool.c:1214 agent/genkey.c:110 agent/genkey.c:218
@ -476,11 +476,11 @@ msgstr "Kommunikationsproblem mit gpg-agent\n"
msgid "problem setting the gpg-agent options\n" msgid "problem setting the gpg-agent options\n"
msgstr "Beim setzen der gpg-agent Optionen ist ein problem aufgetreten\n" msgstr "Beim setzen der gpg-agent Optionen ist ein problem aufgetreten\n"
#: common/simple-pwquery.c:526 common/simple-pwquery.c:592 #: common/simple-pwquery.c:526 common/simple-pwquery.c:614
msgid "canceled by user\n" msgid "canceled by user\n"
msgstr "Vom Benutzer abgebrochen\n" msgstr "Vom Benutzer abgebrochen\n"
#: common/simple-pwquery.c:533 common/simple-pwquery.c:598 #: common/simple-pwquery.c:533 common/simple-pwquery.c:620
msgid "problem with the agent\n" msgid "problem with the agent\n"
msgstr "Problem mit dem Agenten\n" msgstr "Problem mit dem Agenten\n"
@ -489,7 +489,7 @@ msgstr "Problem mit dem Agenten\n"
msgid "you found a bug ... (%s:%d)\n" msgid "you found a bug ... (%s:%d)\n"
msgstr "Sie haben einen Bug (Softwarefehler) gefunden ... (%s:%d)\n" msgstr "Sie haben einen Bug (Softwarefehler) gefunden ... (%s:%d)\n"
#: kbx/kbxutil.c:68 sm/gpgsm.c:237 tools/gpgconf.c:53 #: kbx/kbxutil.c:68 sm/gpgsm.c:239 tools/gpgconf.c:53
msgid "" msgid ""
"@Commands:\n" "@Commands:\n"
" " " "
@ -497,7 +497,7 @@ msgstr ""
"@Kommandos:\n" "@Kommandos:\n"
" " " "
#: kbx/kbxutil.c:76 sm/gpgsm.c:272 tools/gpgconf.c:59 #: kbx/kbxutil.c:76 sm/gpgsm.c:274 tools/gpgconf.c:59
msgid "" msgid ""
"@\n" "@\n"
"Options:\n" "Options:\n"
@ -507,7 +507,7 @@ msgstr ""
"Optionen:\n" "Optionen:\n"
" " " "
#: kbx/kbxutil.c:83 sm/gpgsm.c:337 tools/gpgconf.c:64 #: kbx/kbxutil.c:83 sm/gpgsm.c:340 tools/gpgconf.c:64
msgid "do not make any changes" msgid "do not make any changes"
msgstr "Keine Änderungen durchführen" msgstr "Keine Änderungen durchführen"
@ -543,7 +543,7 @@ msgstr ""
msgid "run in multi server mode (foreground)" msgid "run in multi server mode (foreground)"
msgstr "Im Multiserver Modus ausführen" msgstr "Im Multiserver Modus ausführen"
#: scd/scdaemon.c:109 sm/gpgsm.c:349 #: scd/scdaemon.c:109 sm/gpgsm.c:352
msgid "read options from file" msgid "read options from file"
msgstr "Konfigurationsoptionen aus Datei lesen" msgstr "Konfigurationsoptionen aus Datei lesen"
@ -579,18 +579,18 @@ msgstr ""
"Synatx: scdaemon [Optionen] [Kommando [Argumente]]\n" "Synatx: scdaemon [Optionen] [Kommando [Argumente]]\n"
"Smartcard Daemon für GnuPG\n" "Smartcard Daemon für GnuPG\n"
#: scd/scdaemon.c:656 #: scd/scdaemon.c:658
msgid "please use the option `--daemon' to run the program in the background\n" msgid "please use the option `--daemon' to run the program in the background\n"
msgstr "" msgstr ""
"Bitte die Option `--daemon' nutzen um das Programm im Hintergund " "Bitte die Option `--daemon' nutzen um das Programm im Hintergund "
"auszuführen\n" "auszuführen\n"
#: scd/scdaemon.c:997 #: scd/scdaemon.c:999
#, c-format #, c-format
msgid "handler for fd %d started\n" msgid "handler for fd %d started\n"
msgstr "Handhabungsroutine für fd %d gestartet\n" msgstr "Handhabungsroutine für fd %d gestartet\n"
#: scd/scdaemon.c:1002 #: scd/scdaemon.c:1004
#, c-format #, c-format
msgid "handler for fd %d terminated\n" msgid "handler for fd %d terminated\n"
msgstr "Handhabungsroutine für den fd %d beendet\n" msgstr "Handhabungsroutine für den fd %d beendet\n"
@ -610,47 +610,47 @@ msgstr "Das Erzeugungsdatum kann nicht gespeichert werden: %s\n"
msgid "reading public key failed: %s\n" msgid "reading public key failed: %s\n"
msgstr "Fehler beim Lesen des öffentlichen Schlüssels: %s\n" msgstr "Fehler beim Lesen des öffentlichen Schlüssels: %s\n"
#: scd/app-openpgp.c:986 scd/app-openpgp.c:1910 #: scd/app-openpgp.c:986 scd/app-openpgp.c:1917
msgid "response does not contain the public key data\n" msgid "response does not contain the public key data\n"
msgstr "Die Antwort enthält keine Public Key Daten\n" msgstr "Die Antwort enthält keine Public Key Daten\n"
#: scd/app-openpgp.c:994 scd/app-openpgp.c:1918 #: scd/app-openpgp.c:994 scd/app-openpgp.c:1925
msgid "response does not contain the RSA modulus\n" msgid "response does not contain the RSA modulus\n"
msgstr "Die Antwort enthält keinen RSA Modulus\n" msgstr "Die Antwort enthält keinen RSA Modulus\n"
#: scd/app-openpgp.c:1003 scd/app-openpgp.c:1928 #: scd/app-openpgp.c:1003 scd/app-openpgp.c:1935
msgid "response does not contain the RSA public exponent\n" msgid "response does not contain the RSA public exponent\n"
msgstr "Die Antwort enthält keinen öffenlichen RSA Exponent\n" msgstr "Die Antwort enthält keinen öffenlichen RSA Exponent\n"
#: scd/app-openpgp.c:1259 scd/app-openpgp.c:1347 scd/app-openpgp.c:2150 #: scd/app-openpgp.c:1266 scd/app-openpgp.c:1354 scd/app-openpgp.c:2157
#, c-format #, c-format
msgid "PIN callback returned error: %s\n" msgid "PIN callback returned error: %s\n"
msgstr "Fehler vom PIN \"callback\": %s\n" msgstr "Fehler vom PIN \"callback\": %s\n"
#: scd/app-openpgp.c:1265 scd/app-openpgp.c:1353 scd/app-openpgp.c:2156 #: scd/app-openpgp.c:1272 scd/app-openpgp.c:1360 scd/app-openpgp.c:2163
#, c-format #, c-format
msgid "PIN for CHV%d is too short; minimum length is %d\n" msgid "PIN for CHV%d is too short; minimum length is %d\n"
msgstr "Die PIN für den CHV%d ist zu kurz; Mindestlänge ist %d\n" msgstr "Die PIN für den CHV%d ist zu kurz; Mindestlänge ist %d\n"
#: scd/app-openpgp.c:1274 scd/app-openpgp.c:1288 scd/app-openpgp.c:1363 #: scd/app-openpgp.c:1281 scd/app-openpgp.c:1295 scd/app-openpgp.c:1370
#: scd/app-openpgp.c:2165 scd/app-openpgp.c:2179 #: scd/app-openpgp.c:2172 scd/app-openpgp.c:2186
#, c-format #, c-format
msgid "verify CHV%d failed: %s\n" msgid "verify CHV%d failed: %s\n"
msgstr "Prüfen von CHV%d fehlgeschlagen: %s\n" msgstr "Prüfen von CHV%d fehlgeschlagen: %s\n"
#: scd/app-openpgp.c:1311 #: scd/app-openpgp.c:1318
msgid "access to admin commands is not configured\n" msgid "access to admin commands is not configured\n"
msgstr "Zugriff auf Admin Kommandos ist nicht konfiguriert\n" msgstr "Zugriff auf Admin Kommandos ist nicht konfiguriert\n"
#: scd/app-openpgp.c:1326 scd/app-openpgp.c:2385 #: scd/app-openpgp.c:1333 scd/app-openpgp.c:2392
msgid "error retrieving CHV status from card\n" msgid "error retrieving CHV status from card\n"
msgstr "Fehler beim Holen des CHV Status von der Karte\n" msgstr "Fehler beim Holen des CHV Status von der Karte\n"
#: scd/app-openpgp.c:1332 scd/app-openpgp.c:2394 #: scd/app-openpgp.c:1339 scd/app-openpgp.c:2401
msgid "card is permanently locked!\n" msgid "card is permanently locked!\n"
msgstr "Die Karte ist dauerhaft gesperrt!\n" msgstr "Die Karte ist dauerhaft gesperrt!\n"
#: scd/app-openpgp.c:1337 #: scd/app-openpgp.c:1344
#, c-format #, c-format
msgid "%d Admin PIN attempts remaining before card is permanently locked\n" msgid "%d Admin PIN attempts remaining before card is permanently locked\n"
msgstr "" msgstr ""
@ -659,105 +659,105 @@ msgstr ""
#. TRANSLATORS: Do not translate the "|A|" prefix but #. TRANSLATORS: Do not translate the "|A|" prefix but
#. keep it at the start of the string. We need this elsewhere #. keep it at the start of the string. We need this elsewhere
#. to get some infos on the string. #. to get some infos on the string.
#: scd/app-openpgp.c:1344 #: scd/app-openpgp.c:1351
msgid "|A|Admin PIN" msgid "|A|Admin PIN"
msgstr "|A|Admin PIN" msgstr "|A|Admin PIN"
#. TRANSLATORS: Do not translate the "|*|" prefixes but #. TRANSLATORS: Do not translate the "|*|" prefixes but
#. keep it at the start of the string. We need this elsewhere #. keep it at the start of the string. We need this elsewhere
#. to get some infos on the string. #. to get some infos on the string.
#: scd/app-openpgp.c:1493 #: scd/app-openpgp.c:1500
msgid "|AN|New Admin PIN" msgid "|AN|New Admin PIN"
msgstr "|AN|Neue Admin PIN" msgstr "|AN|Neue Admin PIN"
#: scd/app-openpgp.c:1493 #: scd/app-openpgp.c:1500
msgid "|N|New PIN" msgid "|N|New PIN"
msgstr "|N|Neue PIN" msgstr "|N|Neue PIN"
#: scd/app-openpgp.c:1497 #: scd/app-openpgp.c:1504
#, c-format #, c-format
msgid "error getting new PIN: %s\n" msgid "error getting new PIN: %s\n"
msgstr "Fehler beim Holen der neuen PIN: %s\n" msgstr "Fehler beim Holen der neuen PIN: %s\n"
#: scd/app-openpgp.c:1547 scd/app-openpgp.c:1996 #: scd/app-openpgp.c:1554 scd/app-openpgp.c:2003
msgid "error reading application data\n" msgid "error reading application data\n"
msgstr "Fehler beim Lesen der Anwendungsdaten\n" msgstr "Fehler beim Lesen der Anwendungsdaten\n"
#: scd/app-openpgp.c:1553 scd/app-openpgp.c:2003 #: scd/app-openpgp.c:1560 scd/app-openpgp.c:2010
msgid "error reading fingerprint DO\n" msgid "error reading fingerprint DO\n"
msgstr "Fehler beim Lesen des Fingerabdruck Datenobjekts\n" msgstr "Fehler beim Lesen des Fingerabdruck Datenobjekts\n"
#: scd/app-openpgp.c:1563 #: scd/app-openpgp.c:1570
msgid "key already exists\n" msgid "key already exists\n"
msgstr "Schlüssel existiert bereits\n" msgstr "Schlüssel existiert bereits\n"
#: scd/app-openpgp.c:1567 #: scd/app-openpgp.c:1574
msgid "existing key will be replaced\n" msgid "existing key will be replaced\n"
msgstr "Existierender Schlüssel wird ersetzt\n" msgstr "Existierender Schlüssel wird ersetzt\n"
#: scd/app-openpgp.c:1569 #: scd/app-openpgp.c:1576
msgid "generating new key\n" msgid "generating new key\n"
msgstr "Neuer Schlüssel wird erzeugt\n" msgstr "Neuer Schlüssel wird erzeugt\n"
#: scd/app-openpgp.c:1736 #: scd/app-openpgp.c:1743
msgid "creation timestamp missing\n" msgid "creation timestamp missing\n"
msgstr "Erzeugungsdatum fehlt\n" msgstr "Erzeugungsdatum fehlt\n"
#: scd/app-openpgp.c:1743 #: scd/app-openpgp.c:1750
#, c-format #, c-format
msgid "RSA modulus missing or not of size %d bits\n" msgid "RSA modulus missing or not of size %d bits\n"
msgstr "Der RSA Modulus fehlt oder ist nicht %d Bits lang\n" msgstr "Der RSA Modulus fehlt oder ist nicht %d Bits lang\n"
#: scd/app-openpgp.c:1750 #: scd/app-openpgp.c:1757
#, c-format #, c-format
msgid "RSA public exponent missing or larger than %d bits\n" msgid "RSA public exponent missing or larger than %d bits\n"
msgstr "Der öffentliche RSA Exponent fehlt oder ist länger als %d Bits\n" msgstr "Der öffentliche RSA Exponent fehlt oder ist länger als %d Bits\n"
#: scd/app-openpgp.c:1758 scd/app-openpgp.c:1765 #: scd/app-openpgp.c:1765 scd/app-openpgp.c:1772
#, c-format #, c-format
msgid "RSA prime %s missing or not of size %d bits\n" msgid "RSA prime %s missing or not of size %d bits\n"
msgstr "Die RSA Primzahl %s fehlt oder ist nicht %d Bits lang\n" msgstr "Die RSA Primzahl %s fehlt oder ist nicht %d Bits lang\n"
#: scd/app-openpgp.c:1828 #: scd/app-openpgp.c:1835
#, c-format #, c-format
msgid "failed to store the key: %s\n" msgid "failed to store the key: %s\n"
msgstr "Fehler beim Speichern des Schlüssels: %s\n" msgstr "Fehler beim Speichern des Schlüssels: %s\n"
#: scd/app-openpgp.c:1887 #: scd/app-openpgp.c:1894
msgid "please wait while key is being generated ...\n" msgid "please wait while key is being generated ...\n"
msgstr "Bitte warten bis der Schlüssel erzeugt wurde ...\n" msgstr "Bitte warten bis der Schlüssel erzeugt wurde ...\n"
#: scd/app-openpgp.c:1901 #: scd/app-openpgp.c:1908
msgid "generating key failed\n" msgid "generating key failed\n"
msgstr "Fehler beim Erzeugen des Schlüssels\n" msgstr "Fehler beim Erzeugen des Schlüssels\n"
#: scd/app-openpgp.c:1904 #: scd/app-openpgp.c:1911
#, c-format #, c-format
msgid "key generation completed (%d seconds)\n" msgid "key generation completed (%d seconds)\n"
msgstr "Schlüsselerzeugung vollendet (%d Sekunden)\n" msgstr "Schlüsselerzeugung vollendet (%d Sekunden)\n"
#: scd/app-openpgp.c:1961 #: scd/app-openpgp.c:1968
msgid "invalid structure of OpenPGP card (DO 0x93)\n" msgid "invalid structure of OpenPGP card (DO 0x93)\n"
msgstr "Ungültige Struktur der OpenPGP Karte (DO 0x93)\n" msgstr "Ungültige Struktur der OpenPGP Karte (DO 0x93)\n"
#: scd/app-openpgp.c:2130 #: scd/app-openpgp.c:2137
#, c-format #, c-format
msgid "signatures created so far: %lu\n" msgid "signatures created so far: %lu\n"
msgstr "Anzahl bereits erzeugter Signaturen: %lu\n" msgstr "Anzahl bereits erzeugter Signaturen: %lu\n"
#: scd/app-openpgp.c:2138 #: scd/app-openpgp.c:2145
#, c-format #, c-format
msgid "||Please enter the PIN%%0A[sigs done: %lu]" msgid "||Please enter the PIN%%0A[sigs done: %lu]"
msgstr "||Bitte geben Sie die PIN ein%%0A[Sigs bisher: %lu]" msgstr "||Bitte geben Sie die PIN ein%%0A[Sigs bisher: %lu]"
#: scd/app-openpgp.c:2399 #: scd/app-openpgp.c:2406
msgid "" msgid ""
"verification of Admin PIN is currently prohibited through this command\n" "verification of Admin PIN is currently prohibited through this command\n"
msgstr "" msgstr ""
"Die Überprüfung der Admin PIN is momentan durch ein Kommando verboten " "Die Überprüfung der Admin PIN is momentan durch ein Kommando verboten "
"worden\n" "worden\n"
#: scd/app-openpgp.c:2470 scd/app-openpgp.c:2480 #: scd/app-openpgp.c:2477 scd/app-openpgp.c:2487
#, c-format #, c-format
msgid "can't access %s - invalid OpenPGP card?\n" msgid "can't access %s - invalid OpenPGP card?\n"
msgstr "Zugriff auf %s nicht möglich - ungültige OpenPGP Karte?\n" msgstr "Zugriff auf %s nicht möglich - ungültige OpenPGP Karte?\n"
@ -921,7 +921,8 @@ msgstr "Die vorhandene CRL ist zu alt"
#: sm/certchain.c:607 #: sm/certchain.c:607
msgid "please make sure that the \"dirmngr\" is properly installed\n" msgid "please make sure that the \"dirmngr\" is properly installed\n"
msgstr "Bitte vergewissern Sie sich das der \"dirmngr\" richtig installierrt ist\n" msgstr ""
"Bitte vergewissern Sie sich das der \"dirmngr\" richtig installierrt ist\n"
#: sm/certchain.c:612 #: sm/certchain.c:612
#, c-format #, c-format
@ -1038,243 +1039,243 @@ msgstr "Schwacher Schlüssel - es wird erneut versucht\n"
msgid "no valid recipients given\n" msgid "no valid recipients given\n"
msgstr "Keine gültigen Empfänger angegeben\n" msgstr "Keine gültigen Empfänger angegeben\n"
#: sm/gpgsm.c:239 #: sm/gpgsm.c:241
msgid "|[FILE]|make a signature" msgid "|[FILE]|make a signature"
msgstr "|[DATEI]|Erzeuge eine Signatur" msgstr "|[DATEI]|Erzeuge eine Signatur"
#: sm/gpgsm.c:240 #: sm/gpgsm.c:242
msgid "|[FILE]|make a clear text signature" msgid "|[FILE]|make a clear text signature"
msgstr "|[DATEI]|Erzeuge eine Klartextsignatur" msgstr "|[DATEI]|Erzeuge eine Klartextsignatur"
#: sm/gpgsm.c:241 #: sm/gpgsm.c:243
msgid "make a detached signature" msgid "make a detached signature"
msgstr "Erzeuge eine abgetrennte Signatur" msgstr "Erzeuge eine abgetrennte Signatur"
#: sm/gpgsm.c:242 #: sm/gpgsm.c:244
msgid "encrypt data" msgid "encrypt data"
msgstr "Verschlüssele die Daten" msgstr "Verschlüssele die Daten"
#: sm/gpgsm.c:243 #: sm/gpgsm.c:245
msgid "encryption only with symmetric cipher" msgid "encryption only with symmetric cipher"
msgstr "Verschlüsselung nur mit symmetrischem Algrithmus" msgstr "Verschlüsselung nur mit symmetrischem Algrithmus"
#: sm/gpgsm.c:244 #: sm/gpgsm.c:246
msgid "decrypt data (default)" msgid "decrypt data (default)"
msgstr "Enschlüssele die Daten" msgstr "Enschlüssele die Daten"
#: sm/gpgsm.c:245 #: sm/gpgsm.c:247
msgid "verify a signature" msgid "verify a signature"
msgstr "Überprüfen einer Signatur" msgstr "Überprüfen einer Signatur"
#: sm/gpgsm.c:247 #: sm/gpgsm.c:249
msgid "list keys" msgid "list keys"
msgstr "Schlüssel anzeigen" msgstr "Schlüssel anzeigen"
#: sm/gpgsm.c:248 #: sm/gpgsm.c:250
msgid "list external keys" msgid "list external keys"
msgstr "Externe Schlüssel anzeigen" msgstr "Externe Schlüssel anzeigen"
#: sm/gpgsm.c:249 #: sm/gpgsm.c:251
msgid "list secret keys" msgid "list secret keys"
msgstr "Geheime Schlüssel anzeigen" msgstr "Geheime Schlüssel anzeigen"
#: sm/gpgsm.c:250 #: sm/gpgsm.c:252
msgid "list certificate chain" msgid "list certificate chain"
msgstr "Schlüssel mit Zertifikatekette anzeigen" msgstr "Schlüssel mit Zertifikatekette anzeigen"
#: sm/gpgsm.c:252 #: sm/gpgsm.c:254
msgid "list keys and fingerprints" msgid "list keys and fingerprints"
msgstr "Schlüssel und Fingerprint anzeigen" msgstr "Schlüssel und Fingerprint anzeigen"
#: sm/gpgsm.c:253 #: sm/gpgsm.c:255
msgid "generate a new key pair" msgid "generate a new key pair"
msgstr "Neues Schlüsselpaar erzeugen" msgstr "Neues Schlüsselpaar erzeugen"
#: sm/gpgsm.c:254 #: sm/gpgsm.c:256
msgid "remove key from the public keyring" msgid "remove key from the public keyring"
msgstr "Schlüssel aus dem öffentlichen Schlüsselbund löschen" msgstr "Schlüssel aus dem öffentlichen Schlüsselbund löschen"
#: sm/gpgsm.c:255 #: sm/gpgsm.c:257
msgid "export keys to a key server" msgid "export keys to a key server"
msgstr "Schlüssen an eine Schlüsselserver exportieren" msgstr "Schlüssen an eine Schlüsselserver exportieren"
#: sm/gpgsm.c:256 #: sm/gpgsm.c:258
msgid "import keys from a key server" msgid "import keys from a key server"
msgstr "Schlüssel von einem Schlüsselserver importieren" msgstr "Schlüssel von einem Schlüsselserver importieren"
#: sm/gpgsm.c:257 #: sm/gpgsm.c:259
msgid "import certificates" msgid "import certificates"
msgstr "Zertifikate importieren" msgstr "Zertifikate importieren"
#: sm/gpgsm.c:258 #: sm/gpgsm.c:260
msgid "export certificates" msgid "export certificates"
msgstr "Zertifikate exportieren" msgstr "Zertifikate exportieren"
#: sm/gpgsm.c:259 #: sm/gpgsm.c:261
msgid "register a smartcard" msgid "register a smartcard"
msgstr "Smartcard registrieren" msgstr "Smartcard registrieren"
#: sm/gpgsm.c:260 #: sm/gpgsm.c:262
msgid "run in server mode" msgid "run in server mode"
msgstr "Im Server Modus ausführen" msgstr "Im Server Modus ausführen"
#: sm/gpgsm.c:261 #: sm/gpgsm.c:263
msgid "pass a command to the dirmngr" msgid "pass a command to the dirmngr"
msgstr "Das Kommand an den Dirmngr durchreichen" msgstr "Das Kommand an den Dirmngr durchreichen"
#: sm/gpgsm.c:263 #: sm/gpgsm.c:265
msgid "invoke gpg-protect-tool" msgid "invoke gpg-protect-tool"
msgstr "Rufe das gpg-protect-tool auf" msgstr "Rufe das gpg-protect-tool auf"
#: sm/gpgsm.c:264 #: sm/gpgsm.c:266
msgid "change a passphrase" msgid "change a passphrase"
msgstr "Das Mantra (Passphrase) ändern" msgstr "Das Mantra (Passphrase) ändern"
#: sm/gpgsm.c:274 #: sm/gpgsm.c:276
msgid "create ascii armored output" msgid "create ascii armored output"
msgstr "Ausgabe mit ASCII Hülle wird erzeugt" msgstr "Ausgabe mit ASCII Hülle wird erzeugt"
#: sm/gpgsm.c:276 #: sm/gpgsm.c:278
msgid "create base-64 encoded output" msgid "create base-64 encoded output"
msgstr "Ausgabe im Basis-64 format erzeugen" msgstr "Ausgabe im Basis-64 format erzeugen"
#: sm/gpgsm.c:278 #: sm/gpgsm.c:280
msgid "assume input is in PEM format" msgid "assume input is in PEM format"
msgstr "Eingabedaten sind im PEM Format" msgstr "Eingabedaten sind im PEM Format"
#: sm/gpgsm.c:280 #: sm/gpgsm.c:282
msgid "assume input is in base-64 format" msgid "assume input is in base-64 format"
msgstr "Eingabedaten sind im Basis-64 Format" msgstr "Eingabedaten sind im Basis-64 Format"
#: sm/gpgsm.c:282 #: sm/gpgsm.c:284
msgid "assume input is in binary format" msgid "assume input is in binary format"
msgstr "Eingabedaten sind im Binärformat" msgstr "Eingabedaten sind im Binärformat"
#: sm/gpgsm.c:284 #: sm/gpgsm.c:286
msgid "|NAME|encrypt for NAME" msgid "|NAME|encrypt for NAME"
msgstr "|NAME|Verschlüsseln für NAME" msgstr "|NAME|Verschlüsseln für NAME"
#: sm/gpgsm.c:287 #: sm/gpgsm.c:289
msgid "use system's dirmngr if available" msgid "use system's dirmngr if available"
msgstr "Benutze den System Dirmngr when verfügbar" msgstr "Benutze den System Dirmngr when verfügbar"
#: sm/gpgsm.c:288 #: sm/gpgsm.c:290
msgid "never consult a CRL" msgid "never consult a CRL"
msgstr "Niemals eine CRL konsultieren" msgstr "Niemals eine CRL konsultieren"
#: sm/gpgsm.c:295 #: sm/gpgsm.c:297
msgid "check validity using OCSP" msgid "check validity using OCSP"
msgstr "Die Gültigkeit mittels OCSP prüfen" msgstr "Die Gültigkeit mittels OCSP prüfen"
#: sm/gpgsm.c:298 #: sm/gpgsm.c:300
msgid "|N|number of certificates to include" msgid "|N|number of certificates to include"
msgstr "|N|Sende N Zertifikate mit" msgstr "|N|Sende N Zertifikate mit"
#: sm/gpgsm.c:301 #: sm/gpgsm.c:303
msgid "|FILE|take policy information from FILE" msgid "|FILE|take policy information from FILE"
msgstr "|DATEI|Richtlinieninformationen DATEI entnehmen" msgstr "|DATEI|Richtlinieninformationen DATEI entnehmen"
#: sm/gpgsm.c:304 #: sm/gpgsm.c:306
msgid "do not check certificate policies" msgid "do not check certificate policies"
msgstr "Zertikikatrichtlinien nicht überprüfen" msgstr "Zertikikatrichtlinien nicht überprüfen"
#: sm/gpgsm.c:308 #: sm/gpgsm.c:310
msgid "fetch missing issuer certificates" msgid "fetch missing issuer certificates"
msgstr "Fehlende Zertifikate automatisch holen" msgstr "Fehlende Zertifikate automatisch holen"
#: sm/gpgsm.c:312 #: sm/gpgsm.c:314
msgid "|NAME|use NAME as default recipient" msgid "|NAME|use NAME as default recipient"
msgstr "|NAME|Benutze NAME als voreingestellten Empfänger" msgstr "|NAME|Benutze NAME als voreingestellten Empfänger"
#: sm/gpgsm.c:314 #: sm/gpgsm.c:316
msgid "use the default key as default recipient" msgid "use the default key as default recipient"
msgstr "Benuzte voreingestellten Schlüssel als Standardempfänger" msgstr "Benuzte voreingestellten Schlüssel als Standardempfänger"
#: sm/gpgsm.c:320 #: sm/gpgsm.c:322
msgid "use this user-id to sign or decrypt" msgid "use this user-id to sign or decrypt"
msgstr "Benuzte diese Benutzer ID zum Signieren oder Entschlüsseln" msgstr "Benuzte diese Benutzer ID zum Signieren oder Entschlüsseln"
#: sm/gpgsm.c:323 #: sm/gpgsm.c:325
msgid "|N|set compress level N (0 disables)" msgid "|N|set compress level N (0 disables)"
msgstr "|N|Benutze Komprimierungsstufe N" msgstr "|N|Benutze Komprimierungsstufe N"
#: sm/gpgsm.c:325 #: sm/gpgsm.c:327
msgid "use canonical text mode" msgid "use canonical text mode"
msgstr "Kanonischen Textmodus benutzen" msgstr "Kanonischen Textmodus benutzen"
#: sm/gpgsm.c:328 tools/gpgconf.c:61 #: sm/gpgsm.c:330 tools/gpgconf.c:61
msgid "use as output file" msgid "use as output file"
msgstr "als Ausgabedatei benutzen" msgstr "als Ausgabedatei benutzen"
#: sm/gpgsm.c:331 #: sm/gpgsm.c:333
msgid "don't use the terminal at all" msgid "don't use the terminal at all"
msgstr "Das Terminal überhaupt nicht benutzen" msgstr "Das Terminal überhaupt nicht benutzen"
#: sm/gpgsm.c:334 #: sm/gpgsm.c:337
msgid "force v3 signatures" msgid "force v3 signatures"
msgstr "Version 3 Signaturen erzwingen" msgstr "Version 3 Signaturen erzwingen"
#: sm/gpgsm.c:335 #: sm/gpgsm.c:338
msgid "always use a MDC for encryption" msgid "always use a MDC for encryption"
msgstr "Immer das MDC Verfahren zum verschlüsseln mitbenutzen" msgstr "Immer das MDC Verfahren zum verschlüsseln mitbenutzen"
#: sm/gpgsm.c:340 #: sm/gpgsm.c:343
msgid "batch mode: never ask" msgid "batch mode: never ask"
msgstr "Stapelverarbeitungs Modus: Nie nachfragen" msgstr "Stapelverarbeitungs Modus: Nie nachfragen"
#: sm/gpgsm.c:341 #: sm/gpgsm.c:344
msgid "assume yes on most questions" msgid "assume yes on most questions"
msgstr "\"Ja\" auf die meisten Anfragen annehmen" msgstr "\"Ja\" auf die meisten Anfragen annehmen"
#: sm/gpgsm.c:342 #: sm/gpgsm.c:345
msgid "assume no on most questions" msgid "assume no on most questions"
msgstr "\"Nein\" auf die meisten Anfragen annehmen" msgstr "\"Nein\" auf die meisten Anfragen annehmen"
#: sm/gpgsm.c:344 #: sm/gpgsm.c:347
msgid "add this keyring to the list of keyrings" msgid "add this keyring to the list of keyrings"
msgstr "Diesen Keyring in die Liste der Keyrings aufnehmen" msgstr "Diesen Keyring in die Liste der Keyrings aufnehmen"
#: sm/gpgsm.c:345 #: sm/gpgsm.c:348
msgid "add this secret keyring to the list" msgid "add this secret keyring to the list"
msgstr "Diese geheimen Keyring in die Liste aufnehmen" msgstr "Diese geheimen Keyring in die Liste aufnehmen"
#: sm/gpgsm.c:346 #: sm/gpgsm.c:349
msgid "|NAME|use NAME as default secret key" msgid "|NAME|use NAME as default secret key"
msgstr "|NAME|Benutze NAME als voreingestellten Schlüssel" msgstr "|NAME|Benutze NAME als voreingestellten Schlüssel"
#: sm/gpgsm.c:347 #: sm/gpgsm.c:350
msgid "|HOST|use this keyserver to lookup keys" msgid "|HOST|use this keyserver to lookup keys"
msgstr "|HOST|Benutze HOST als Schlüsselserver" msgstr "|HOST|Benutze HOST als Schlüsselserver"
#: sm/gpgsm.c:348 #: sm/gpgsm.c:351
msgid "|NAME|set terminal charset to NAME" msgid "|NAME|set terminal charset to NAME"
msgstr "|NAME|Den Zeichensatz für das Terminal auf NAME setzen" msgstr "|NAME|Den Zeichensatz für das Terminal auf NAME setzen"
#: sm/gpgsm.c:352 #: sm/gpgsm.c:355
msgid "|LEVEL|set the debugging level to LEVEL" msgid "|LEVEL|set the debugging level to LEVEL"
msgstr "|NAME|Die Debugstufe auf NAME setzen" msgstr "|NAME|Die Debugstufe auf NAME setzen"
#: sm/gpgsm.c:359 #: sm/gpgsm.c:363
msgid "|FD|write status info to this FD" msgid "|FD|write status info to this FD"
msgstr "|FD|Statusinformationen auf Dateidescriptor FD schreiben" msgstr "|FD|Statusinformationen auf Dateidescriptor FD schreiben"
#: sm/gpgsm.c:366 #: sm/gpgsm.c:370
msgid "|FILE|load extension module FILE" msgid "|FILE|load extension module FILE"
msgstr "|DATEI|Das Erweiterungsmodul DATEI laden" msgstr "|DATEI|Das Erweiterungsmodul DATEI laden"
#: sm/gpgsm.c:372 #: sm/gpgsm.c:376
msgid "|NAME|use cipher algorithm NAME" msgid "|NAME|use cipher algorithm NAME"
msgstr "|NAME|Den Verschlüsselungsalgrithmus NAME benutzen" msgstr "|NAME|Den Verschlüsselungsalgrithmus NAME benutzen"
#: sm/gpgsm.c:374 #: sm/gpgsm.c:378
msgid "|NAME|use message digest algorithm NAME" msgid "|NAME|use message digest algorithm NAME"
msgstr "|NAME|Den Hashalgorithmus NAME benutzen" msgstr "|NAME|Den Hashalgorithmus NAME benutzen"
#: sm/gpgsm.c:376 #: sm/gpgsm.c:380
msgid "|N|use compress algorithm N" msgid "|N|use compress algorithm N"
msgstr "|N|Den Kompressionsalgorithmus Nummer N benutzen" msgstr "|N|Den Kompressionsalgorithmus Nummer N benutzen"
#: sm/gpgsm.c:384 #: sm/gpgsm.c:388
msgid "" msgid ""
"@\n" "@\n"
"(See the man page for a complete listing of all commands and options)\n" "(See the man page for a complete listing of all commands and options)\n"
@ -1282,7 +1283,7 @@ msgstr ""
"@\n" "@\n"
"(Die \"man\" Seite beschreibt alle Kommands und Optionen)\n" "(Die \"man\" Seite beschreibt alle Kommands und Optionen)\n"
#: sm/gpgsm.c:387 #: sm/gpgsm.c:391
msgid "" msgid ""
"@\n" "@\n"
"Examples:\n" "Examples:\n"
@ -1302,11 +1303,11 @@ msgstr ""
" --list-keys [Namen] Schlüssel anzeigenn\n" " --list-keys [Namen] Schlüssel anzeigenn\n"
" --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\\n\n" " --fingerprint [Namen] \"Fingerabdrücke\" anzeigen\\n\n"
#: sm/gpgsm.c:506 #: sm/gpgsm.c:510
msgid "Usage: gpgsm [options] [files] (-h for help)" msgid "Usage: gpgsm [options] [files] (-h for help)"
msgstr "Gebrauch: gpgsm [Optionen] [Dateien] (-h für Hilfe)" msgstr "Gebrauch: gpgsm [Optionen] [Dateien] (-h für Hilfe)"
#: sm/gpgsm.c:509 #: sm/gpgsm.c:513
msgid "" msgid ""
"Syntax: gpgsm [options] [files]\n" "Syntax: gpgsm [options] [files]\n"
"sign, check, encrypt or decrypt using the S/MIME protocol\n" "sign, check, encrypt or decrypt using the S/MIME protocol\n"
@ -1315,7 +1316,7 @@ msgstr ""
"Gebrauch: gpgsm [Optionen] [Dateien]\n" "Gebrauch: gpgsm [Optionen] [Dateien]\n"
"Signieren, prüfen, ver- und entschlüsseln mittels S/MIME protocol\n" "Signieren, prüfen, ver- und entschlüsseln mittels S/MIME protocol\n"
#: sm/gpgsm.c:516 #: sm/gpgsm.c:520
msgid "" msgid ""
"\n" "\n"
"Supported algorithms:\n" "Supported algorithms:\n"
@ -1323,50 +1324,50 @@ msgstr ""
"\n" "\n"
"Unterstützte Algorithmen:\n" "Unterstützte Algorithmen:\n"
#: sm/gpgsm.c:603 #: sm/gpgsm.c:607
msgid "usage: gpgsm [options] " msgid "usage: gpgsm [options] "
msgstr "Gebrauch: gpgsm [Optionen] " msgstr "Gebrauch: gpgsm [Optionen] "
#: sm/gpgsm.c:668 #: sm/gpgsm.c:672
msgid "conflicting commands\n" msgid "conflicting commands\n"
msgstr "Widersprechende Kommandos\n" msgstr "Widersprechende Kommandos\n"
#: sm/gpgsm.c:684 #: sm/gpgsm.c:688
#, c-format #, c-format
msgid "can't encrypt to `%s': %s\n" msgid "can't encrypt to `%s': %s\n"
msgstr "Verschlüsseln für `%s' nicht möglich: %s\n" msgstr "Verschlüsseln für `%s' nicht möglich: %s\n"
#: sm/gpgsm.c:758 #: sm/gpgsm.c:762
#, c-format #, c-format
msgid "libksba is too old (need %s, have %s)\n" msgid "libksba is too old (need %s, have %s)\n"
msgstr "Die Bibliothek Libksba is nicht aktuell (benötige %s, habe %s)\n" msgstr "Die Bibliothek Libksba is nicht aktuell (benötige %s, habe %s)\n"
#: sm/gpgsm.c:1215 #: sm/gpgsm.c:1221
msgid "WARNING: program may create a core file!\n" msgid "WARNING: program may create a core file!\n"
msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n" msgstr "WARNUNG: Programm könnte eine core-dump-Datei schreiben!\n"
#: sm/gpgsm.c:1227 #: sm/gpgsm.c:1233
msgid "WARNING: running with faked system time: " msgid "WARNING: running with faked system time: "
msgstr "WARNUNG: Ausführung mit gefälschter Systemzeit: " msgstr "WARNUNG: Ausführung mit gefälschter Systemzeit: "
#: sm/gpgsm.c:1253 #: sm/gpgsm.c:1259
msgid "selected cipher algorithm is invalid\n" msgid "selected cipher algorithm is invalid\n"
msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n" msgstr "Das ausgewählte Verschlüsselungsverfahren ist ungültig\n"
#: sm/gpgsm.c:1261 #: sm/gpgsm.c:1267
msgid "selected digest algorithm is invalid\n" msgid "selected digest algorithm is invalid\n"
msgstr "Das ausgewählte Hashverfahren ist ungültig\n" msgstr "Das ausgewählte Hashverfahren ist ungültig\n"
#: sm/gpgsm.c:1291 #: sm/gpgsm.c:1297
#, c-format #, c-format
msgid "can't sign using `%s': %s\n" msgid "can't sign using `%s': %s\n"
msgstr "Signieren mit `%s' nicht möglich: %s\n" msgstr "Signieren mit `%s' nicht möglich: %s\n"
#: sm/gpgsm.c:1464 #: sm/gpgsm.c:1470
msgid "this command has not yet been implemented\n" msgid "this command has not yet been implemented\n"
msgstr "Diee Kommando wurde noch nicht implementiert\n" msgstr "Diee Kommando wurde noch nicht implementiert\n"
#: sm/gpgsm.c:1694 sm/gpgsm.c:1731 #: sm/gpgsm.c:1700 sm/gpgsm.c:1737
#, c-format #, c-format
msgid "can't open `%s': %s\n" msgid "can't open `%s': %s\n"
msgstr "Datei `%s' kann nicht geöffnet werden: %s\n" msgstr "Datei `%s' kann nicht geöffnet werden: %s\n"

View File

@ -1,3 +1,9 @@
2005-09-06 Werner Koch <wk@g10code.com>
* app-p15.c (do_sign): Tweaked for BELPIC cards.
(read_home_df): New arg R_BELPIC.
(app_select_p15): Set card type for BELPIC.
2005-09-05 Werner Koch <wk@g10code.com> 2005-09-05 Werner Koch <wk@g10code.com>
* iso7816.c (iso7816_select_path): New. * iso7816.c (iso7816_select_path): New.

View File

@ -39,8 +39,10 @@ typedef enum
{ {
CARD_TYPE_UNKNOWN, CARD_TYPE_UNKNOWN,
CARD_TYPE_TCOS, CARD_TYPE_TCOS,
CARD_TYPE_MICARDO CARD_TYPE_MICARDO,
} card_type_t; CARD_TYPE_BELPIC /* Belgian eID card specs. */
}
card_type_t;
/* A list card types with ATRs noticed with these cards. */ /* A list card types with ATRs noticed with these cards. */
#define X(a) ((unsigned char const *)(a)) #define X(a) ((unsigned char const *)(a))
@ -2771,6 +2773,8 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
+ the largest OID prefix above. */ + the largest OID prefix above. */
prkdf_object_t prkdf; /* The private key object. */ prkdf_object_t prkdf; /* The private key object. */
aodf_object_t aodf; /* The associated authentication object. */ aodf_object_t aodf; /* The associated authentication object. */
int no_data_padding = 0; /* True if the card want the data without padding.*/
int mse_done = 0; /* Set to true if the MSE has been done. */
if (!keyidstr || !*keyidstr) if (!keyidstr || !*keyidstr)
return gpg_error (GPG_ERR_INV_VALUE); return gpg_error (GPG_ERR_INV_VALUE);
@ -2833,6 +2837,35 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
return err; return err;
} }
/* Due to the fact that the non-repudiation signature on a BELPIC
card requires a ver verify immediately before the DSO we set the
MSE before we do the verification. Other cards might allow to do
this also but I don't want to break anything, thus we do it only
for the BELPIC card here. */
if (app->app_local->card_type == CARD_TYPE_BELPIC)
{
unsigned char mse[5];
mse[0] = 4; /* Length of the template. */
mse[1] = 0x80; /* Algorithm reference tag. */
mse[2] = 0x02; /* Algorithm: RSASSA-PKCS1-v1.5 using SHA1. */
mse[3] = 0x84; /* Private key reference tag. */
mse[4] = prkdf->key_reference_valid? prkdf->key_reference : 0x82;
err = iso7816_manage_security_env (app->slot,
0x41, 0xB6,
mse, sizeof mse);
no_data_padding = 1;
mse_done = 1;
}
if (err)
{
log_error ("MSE failed: %s\n", gpg_strerror (err));
return err;
}
/* Now that we have all the information available, prepare and run /* Now that we have all the information available, prepare and run
the PIN verification.*/ the PIN verification.*/
if (1) if (1)
@ -2841,8 +2874,12 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
size_t pinvaluelen; size_t pinvaluelen;
const char *errstr; const char *errstr;
const char *s; const char *s;
err = pincb (pincb_arg, "PIN", &pinvalue); if (prkdf->usageflags.non_repudiation
&& app->app_local->card_type == CARD_TYPE_BELPIC)
err = pincb (pincb_arg, "PIN (qualified signature!)", &pinvalue);
else
err = pincb (pincb_arg, "PIN", &pinvalue);
if (err) if (err)
{ {
log_info ("PIN callback returned error: %s\n", gpg_strerror (err)); log_info ("PIN callback returned error: %s\n", gpg_strerror (err));
@ -2884,8 +2921,6 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
switch (aodf->pintype) switch (aodf->pintype)
{ {
case PIN_TYPE_BCD: case PIN_TYPE_BCD:
errstr = "PIN type BCD is not supported";
break;
case PIN_TYPE_ASCII_NUMERIC: case PIN_TYPE_ASCII_NUMERIC:
for (s=pinvalue; digitp (s); s++) for (s=pinvalue; digitp (s); s++)
; ;
@ -2914,7 +2949,39 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
return err? err : gpg_error (GPG_ERR_BAD_PIN_METHOD); return err? err : gpg_error (GPG_ERR_BAD_PIN_METHOD);
} }
if (aodf->pinflags.needs_padding)
if (aodf->pintype == PIN_TYPE_BCD )
{
char *paddedpin;
int ndigits;
for (ndigits=0, s=pinvalue; *s; ndigits++, s++)
;
paddedpin = xtrymalloc (aodf->stored_length+1);
if (!paddedpin)
{
err = gpg_error_from_errno (errno);
xfree (pinvalue);
return err;
}
i = 0;
paddedpin[i++] = 0x20 | (ndigits & 0x0f);
for (s=pinvalue; i < aodf->stored_length && *s && s[1]; s = s+2 )
paddedpin[i++] = (((*s - '0') << 4) | ((s[1] - '0') & 0x0f));
if (i < aodf->stored_length && *s)
paddedpin[i++] = (((*s - '0') << 4)
|((aodf->pad_char_valid?aodf->pad_char:0)&0x0f));
if (aodf->pinflags.needs_padding)
while (i < aodf->stored_length)
paddedpin[i++] = aodf->pad_char_valid? aodf->pad_char : 0;
xfree (pinvalue);
pinvalue = paddedpin;
pinvaluelen = i;
}
else if (aodf->pinflags.needs_padding)
{ {
char *paddedpin; char *paddedpin;
@ -2979,7 +3046,9 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
} }
/* Manage security environment needs to be weaked for certain cards. */ /* Manage security environment needs to be weaked for certain cards. */
if (app->app_local->card_type == CARD_TYPE_TCOS) if (mse_done)
err = 0;
else if (app->app_local->card_type == CARD_TYPE_TCOS)
{ {
/* TCOS creates signatures always using the local key 0. MSE /* TCOS creates signatures always using the local key 0. MSE
may not be used. */ may not be used. */
@ -3009,18 +3078,21 @@ do_sign (app_t app, const char *keyidstr, int hashalgo,
return err; return err;
} }
if (no_data_padding)
err = iso7816_compute_ds (app->slot, data, 35, outdata, outdatalen); err = iso7816_compute_ds (app->slot, data+15, 20, outdata, outdatalen);
else
err = iso7816_compute_ds (app->slot, data, 35, outdata, outdatalen);
return err; return err;
} }
/* Assume that EF(DIR) has been selected. Read its content and figure /* Assume that EF(DIR) has been selected. Read its content and figure
out the home EF of pkcs#15. Return that home DF or 0 if not out the home EF of pkcs#15. Return that home DF or 0 if not found
found. */ and the value at the address of BELPIC indicates whether it was
found by the belpic aid. */
static unsigned short static unsigned short
read_home_df (int slot) read_home_df (int slot, int *r_belpic)
{ {
gpg_error_t err; gpg_error_t err;
unsigned char *buffer; unsigned char *buffer;
@ -3028,6 +3100,8 @@ read_home_df (int slot)
size_t buflen, n, nn; size_t buflen, n, nn;
unsigned short result = 0; unsigned short result = 0;
*r_belpic = 0;
err = iso7816_read_binary (slot, 0, 0, &buffer, &buflen); err = iso7816_read_binary (slot, 0, 0, &buffer, &buflen);
if (err) if (err)
{ {
@ -3040,9 +3114,9 @@ read_home_df (int slot)
if (p && n) if (p && n)
{ {
pp = find_tlv (p, n, 0x4f, &nn); pp = find_tlv (p, n, 0x4f, &nn);
if (pp if (pp && ((nn == sizeof pkcs15_aid && !memcmp (pp, pkcs15_aid, nn))
&& ((nn == sizeof pkcs15_aid && !memcmp (pp, pkcs15_aid, nn)) || (*r_belpic = (nn == sizeof pkcs15be_aid
||(nn == sizeof pkcs15be_aid && !memcmp (pp, pkcs15be_aid, nn)))) && !memcmp (pp, pkcs15be_aid, nn)))))
{ {
pp = find_tlv (p, n, 0x50, &nn); pp = find_tlv (p, n, 0x50, &nn);
if (pp) /* fixme: Filter log value? */ if (pp) /* fixme: Filter log value? */
@ -3072,10 +3146,15 @@ app_select_p15 (app_t app)
unsigned short def_home_df = 0; unsigned short def_home_df = 0;
card_type_t card_type = CARD_TYPE_UNKNOWN; card_type_t card_type = CARD_TYPE_UNKNOWN;
int direct = 0; int direct = 0;
int is_belpic = 0;
rc = iso7816_select_application (slot, pkcs15_aid, sizeof pkcs15_aid); rc = iso7816_select_application (slot, pkcs15_aid, sizeof pkcs15_aid);
if (rc) if (rc)
rc = iso7816_select_application (slot, pkcs15be_aid, sizeof pkcs15be_aid); {
rc = iso7816_select_application (slot, pkcs15be_aid,sizeof pkcs15be_aid);
if (!rc)
is_belpic = 1;
}
if (rc) if (rc)
{ /* Not found: Try to locate it from 2F00. We use direct path { /* Not found: Try to locate it from 2F00. We use direct path
selection here because it seems that the Belgian eID card selection here because it seems that the Belgian eID card
@ -3087,7 +3166,7 @@ app_select_p15 (app_t app)
if (!rc) if (!rc)
{ {
direct = 1; direct = 1;
def_home_df = read_home_df (slot); def_home_df = read_home_df (slot, &is_belpic);
if (def_home_df) if (def_home_df)
{ {
path[0] = def_home_df; path[0] = def_home_df;
@ -3102,24 +3181,33 @@ app_select_p15 (app_t app)
} }
if (!rc) if (!rc)
{ {
/* We need to know the ATR for tweaking some security operations. */ /* Determine the type of the card. The general case is to look
unsigned char *atr; it up from the ATR table. For the Belgian eID card we know
size_t atrlen; it instantly from the AID. */
int i; if (is_belpic)
{
atr = apdu_get_atr (app->slot, &atrlen); card_type = CARD_TYPE_BELPIC;
if (!atr) }
rc = gpg_error (GPG_ERR_INV_CARD);
else else
{ {
for (i=0; card_atr_list[i].atrlen; i++) unsigned char *atr;
if (card_atr_list[i].atrlen == atrlen size_t atrlen;
&& !memcmp (card_atr_list[i].atr, atr, atrlen)) int i;
{
card_type = card_atr_list[i].type; atr = apdu_get_atr (app->slot, &atrlen);
break; if (!atr)
} rc = gpg_error (GPG_ERR_INV_CARD);
xfree (atr); else
{
for (i=0; card_atr_list[i].atrlen; i++)
if (card_atr_list[i].atrlen == atrlen
&& !memcmp (card_atr_list[i].atr, atr, atrlen))
{
card_type = card_atr_list[i].type;
break;
}
xfree (atr);
}
} }
} }
if (!rc) if (!rc)

View File

@ -667,7 +667,7 @@ pin_cb (void *opaque, const char *info, char **retstr)
return gpg_error (gpg_err_code_from_errno (errno)); return gpg_error (gpg_err_code_from_errno (errno));
/* Fixme: Write an inquire function which returns the result in /* Fixme: Write an inquire function which returns the result in
secure memory and check all futher handling of the PIN. */ secure memory and check all further handling of the PIN. */
rc = assuan_inquire (ctx, command, &value, &valuelen, MAXLEN_PIN); rc = assuan_inquire (ctx, command, &value, &valuelen, MAXLEN_PIN);
free (command); free (command);
if (rc) if (rc)