Some minor bug fixes, new test utilities and started support for other
[gnupg.git] / scd / app-dinsig.c
1 /* app-dinsig.c - The DINSIG (DIN V 66291-1) card application.
2  *      Copyright (C) 2004 Free Software Foundation, Inc.
3  *
4  * This file is part of GnuPG.
5  *
6  * GnuPG is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * GnuPG is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
19  */
20
21
22 /* The German signature law and its bylaw (SigG and SigV) is currently
23    used with an interface specification described in DIN V 66291-1.
24    The AID to be used is: 'D27600006601'.
25
26    The file IDs for certificates utilize the generic format: 
27         Cxyz
28     C being the hex digit 'C' (12).
29     x being the service indicator:
30          '0' := SigG conform digital signature.
31          '1' := entity authentication.
32          '2' := key encipherment.
33          '3' := data encipherment.
34          '4' := key agreement.
35          other values are reserved for future use.
36     y being the security environment number using '0' for cards
37       not supporting a SE number.
38     z being the certificate type:
39          '0'        := C.CH (base certificate of card holder) or C.ICC.
40          '1' .. '7' := C.CH (business or professional certificate
41                        of card holder.
42          '8' .. 'D' := C.CA (certificate of a CA issue by the Root-CA).
43          'E'        := C.RCA (self certified certificate of the Root-CA).
44          'F'        := reserved.
45    
46    The file IDs used by default are:
47    '1F00'  EF.SSD (security service descriptor). [o,o]
48    '2F02'  EF.GDO (global data objects) [m,m]
49    'A000'  EF.PROT (signature log).  Cyclic file with 20 records of 53 byte.
50            Read and update after user authentication. [o,o]
51    'B000'  EF.PK.RCA.DS (public keys of Root-CA).  Size is 512b or size 
52            of keys. [m (unless a 'C00E' is present),m]
53    'B001'  EF.PK.CA.DS (public keys of CAs).  Size is 512b or size
54            of keys. [o,o]
55    'C00n'  EF.C.CH.DS (digital signature certificate of card holder)
56            with n := 0 .. 7.  Size is 2k or size of cert.  Read and
57            update allowed after user authentication. [m,m]
58    'C00m'  EF.C.CA.DS (digital signature certificate of CA)
59            with m := 8 .. E.  Size is 1k or size of cert.  Read always 
60            allowed, update after user authentication. [o,o]
61    'C100'  EF.C.ICC.AUT (AUT certificate of ICC) [o,m]
62    'C108'  EF.C.CA.AUT (AUT certificate of CA) [o,m]
63    'D000'  EF.DM (display message) [-,m]
64    
65    The letters in brackets indicate optional or mandatory files: The
66    first for card terminals under full control and the second for
67    "business" card terminals.
68
69    FIXME: Needs a lot more explanation.
70
71 */
72
73
74
75
76 #include <config.h>
77 #include <errno.h>
78 #include <stdio.h>
79 #include <stdlib.h>
80 #include <string.h>
81 #include <assert.h>
82 #include <time.h>
83
84 #include "scdaemon.h"
85
86 #include "iso7816.h"
87 #include "app-common.h"
88
89
90
91 static int
92 do_learn_status (APP app, CTRL ctrl)
93 {
94   return 0;
95 }
96
97
98
99
100
101 /* Select the DINSIG application on the card in SLOT.  This function
102    must be used before any other DINSIG application functions. */
103 int
104 app_select_dinsig (APP app)
105 {
106   static char const aid[] = { 0xD2, 0x76, 0x00, 0x00, 0x66, 0x01 };
107   int slot = app->slot;
108   int rc;
109   
110   rc = iso7816_select_application (slot, aid, sizeof aid);
111   if (!rc)
112     {
113       app->apptype = "DINSIG";
114
115       app->fnc.learn_status = do_learn_status;
116       app->fnc.getattr = NULL;
117       app->fnc.setattr = NULL;
118       app->fnc.genkey = NULL;
119       app->fnc.sign = NULL;
120       app->fnc.auth = NULL;
121       app->fnc.decipher = NULL;
122       app->fnc.change_pin = NULL;
123       app->fnc.check_pin = NULL;
124    }
125
126   return rc;
127 }
128
129