Skip to content

Commit

Permalink
libcacard: move atr setting from macro to function
Browse files Browse the repository at this point in the history
Only because qemu's checkpatch complains about it.

Signed-off-by: Alon Levy <[email protected]>
Reviewed-by: Marc-André Lureau <[email protected]>
  • Loading branch information
Alon Levy committed Apr 24, 2013
1 parent 7a68589 commit 0b6a16c
Show file tree
Hide file tree
Showing 5 changed files with 58 additions and 16 deletions.
1 change: 1 addition & 0 deletions Makefile.objs
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ libcacard-y += libcacard/vcard.o libcacard/vreader.o
libcacard-y += libcacard/vcard_emul_nss.o
libcacard-y += libcacard/vcard_emul_type.o
libcacard-y += libcacard/card_7816.o
libcacard-y += libcacard/vcardt.o

######################################################################
# Target independent part of system emulation. The long term path is to
Expand Down
14 changes: 11 additions & 3 deletions libcacard/vcard_emul_nss.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,9 @@
#include "vreader.h"
#include "vevent.h"

#include "libcacard/vcardt_internal.h"


typedef enum {
VCardEmulUnknown = -1,
VCardEmulFalse = 0,
Expand Down Expand Up @@ -519,18 +522,23 @@ vcard_emul_reader_get_slot(VReader *vreader)
}

/*
* Card ATR's map to physical cards. VCARD_ATR_PREFIX will set appropriate
* Card ATR's map to physical cards. vcard_alloc_atr will set appropriate
* historical bytes for any software emulated card. The remaining bytes can be
* used to indicate the actual emulator
*/
static const unsigned char nss_atr[] = { VCARD_ATR_PREFIX(3), 'N', 'S', 'S' };
static unsigned char *nss_atr;
static int nss_atr_len;

void
vcard_emul_get_atr(VCard *card, unsigned char *atr, int *atr_len)
{
int len = MIN(sizeof(nss_atr), *atr_len);
int len;
assert(atr != NULL);

if (nss_atr == NULL) {
nss_atr = vcard_alloc_atr("NSS", &nss_atr_len);
}
len = MIN(nss_atr_len, *atr_len);
memcpy(atr, nss_atr, len);
*atr_len = len;
}
Expand Down
40 changes: 40 additions & 0 deletions libcacard/vcardt.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
#include <stdlib.h>
#include <string.h>
#include <glib.h>

#include "libcacard/vcardt.h"

#include "libcacard/vcardt_internal.h"

/* create an ATR with appropriate historical bytes */
#define ATR_TS_DIRECT_CONVENTION 0x3b
#define ATR_TA_PRESENT 0x10
#define ATR_TB_PRESENT 0x20
#define ATR_TC_PRESENT 0x40
#define ATR_TD_PRESENT 0x80

unsigned char *vcard_alloc_atr(const char *postfix, int *atr_len)
{
int postfix_len;
const char prefix[] = "VCARD_";
const char default_postfix[] = "DEFAULT";
const int prefix_len = sizeof(prefix) - 1;
int total_len;
unsigned char *atr;

if (postfix == NULL) {
postfix = default_postfix;
}
postfix_len = strlen(postfix);
total_len = 3 + prefix_len + postfix_len;
atr = g_malloc(total_len);
atr[0] = ATR_TS_DIRECT_CONVENTION;
atr[1] = ATR_TD_PRESENT + prefix_len + postfix_len;
atr[2] = 0x00;
memcpy(&atr[3], prefix, prefix_len);
memcpy(&atr[3 + prefix_len], postfix, postfix_len);
if (atr_len) {
*atr_len = total_len;
}
return atr;
}
13 changes: 0 additions & 13 deletions libcacard/vcardt.h
Original file line number Diff line number Diff line change
Expand Up @@ -25,19 +25,6 @@ typedef struct VCardEmulStruct VCardEmul;

#define MAX_CHANNEL 4

/* create an ATR with appropriate historical bytes */
#define TS_DIRECT_CONVENTION 0x3b
#define TA_PRESENT 0x10
#define TB_PRESENT 0x20
#define TC_PRESENT 0x40
#define TD_PRESENT 0x80

#define VCARD_ATR_PREFIX(size) \
TS_DIRECT_CONVENTION, \
TD_PRESENT + (6 + size), \
0x00, \
'V', 'C', 'A', 'R', 'D', '_'

typedef enum {
VCARD_DONE,
VCARD_NEXT,
Expand Down
6 changes: 6 additions & 0 deletions libcacard/vcardt_internal.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
#ifndef VCARDT_INTERNAL_H
#define VCARDT_INTERNAL_H

unsigned char *vcard_alloc_atr(const char *postfix, int *atr_len);

#endif

0 comments on commit 0b6a16c

Please sign in to comment.