First bits of a card support backport from 1.9. It is not enabled by
[gnupg.git] / g10 / cardglue.c
1 /* cardglue.c - mainly dispatcher for card related functions.
2  * Copyright (C) 2003 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 #include <config.h>
22 #ifdef ENABLE_CARD_SUPPORT
23 /* 
24    Note, that most card related code has been taken from 1.9.x branch
25    and is maintained over there if at all possible.  Thus, if you make
26    changes here, please check that a similar change has been commited
27    to the 1.9.x branch.
28 */
29 #include <stdio.h>
30 #include <stdlib.h>
31 #include <string.h>
32 #include <errno.h>
33 #include <assert.h>
34
35 #include "options.h"
36 #include "packet.h"
37 #include "errors.h"
38 #include "memory.h"
39 #include "util.h"
40 #include "main.h"
41 #include "status.h"
42 #include "i18n.h"
43
44 #include "cardglue.h"
45
46
47
48
49 /* Create a serialno/fpr string from the serial number and the secret
50    key.  caller must free the returned string.  There is no error
51    return. [Taken from 1.9's keyid.c]*/
52 char *
53 serialno_and_fpr_from_sk (const unsigned char *sn, size_t snlen,
54                           PKT_secret_key *sk)
55 {
56   unsigned char fpr[MAX_FINGERPRINT_LEN];
57   size_t fprlen;
58   char *buffer, *p;
59   int i;
60   
61   fingerprint_from_sk (sk, fpr, &fprlen);
62   buffer = p = xmalloc (snlen*2 + 1 + fprlen*2 + 1);
63   for (i=0; i < snlen; i++, p+=2)
64     sprintf (p, "%02X", sn[i]);
65   *p++ = '/';
66   for (i=0; i < fprlen; i++, p+=2)
67     sprintf (p, "%02X", fpr[i]);
68   *p = 0;
69   return buffer;
70 }
71
72
73
74
75
76
77
78
79
80
81 #endif /*ENABLE_CARD_SUPPORT*/
82