From 2656921bbea2827031cae790b228467e8bc1c95c Mon Sep 17 00:00:00 2001 From: jey Date: Fri, 19 Oct 2001 17:26:04 +0000 Subject: [PATCH] initial commit git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/tests/hst-test.c | 123 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 src/tests/hst-test.c diff --git a/src/tests/hst-test.c b/src/tests/hst-test.c new file mode 100644 index 00000000..5e73bb2f --- /dev/null +++ b/src/tests/hst-test.c @@ -0,0 +1,123 @@ + +/* Copyright (C) 2001 Juha Yrjölä + * All rights reserved. + */ + +#include +#include +#include +#include "sc.h" + +int main(int argc, char **argv) { + SCARDHANDLE sc_card; + SCARDCONTEXT sc_ctx; + SCARD_READERSTATE_A rgReaderStates[1]; + DWORD dwState, dwProt, dwAtrLen; + DWORD dwPref; + BYTE pbAtr[MAX_ATR_SIZE]; + BYTE r[MAX_BUFFER_SIZE]; + LPCSTR mszGroups; + LONG rv; + DWORD reader_buf_size; + int i, reader_count; + char *p, *reader_buf; + char *readers[4]; + struct sc_apdu apdu; + struct sc_context ctx; + struct sc_pkcs15_card card; + + rv = SCardEstablishContext(SCARD_SCOPE_GLOBAL, "localhost", NULL, &sc_ctx); + if (rv != SCARD_S_SUCCESS) { + fprintf(stderr, "ERROR: Cannot connect to Resource Manager\n"); + return 1; + } + ctx.sc_ctx = sc_ctx; + SCardListReaders(sc_ctx, NULL, NULL, (LPDWORD) &reader_buf_size); + reader_buf = (char *)malloc(sizeof(char)*reader_buf_size); + SCardListReaders(sc_ctx, mszGroups, reader_buf, (LPDWORD) &reader_buf_size); + + p = reader_buf; + i = reader_count = 0; + do { + reader_count++; + readers[i] = strdup(p); + while (*p++ != 0); + p++; + } while (p < reader_buf + reader_buf_size); + + for (i = 0; i < reader_count; i++) + printf("Reader %d - %s\n", i, readers[i]); + + rgReaderStates[0].szReader = readers[0]; + rgReaderStates[0].dwCurrentState = SCARD_STATE_EMPTY; + printf("Please insert a smartcard\n"); + SCardGetStatusChange(sc_ctx, INFINITE, rgReaderStates, 1); + + printf("Connecting... "); + fflush(stdout); + rv = SCardConnect(sc_ctx, readers[0], + SCARD_SHARE_SHARED, SCARD_PROTOCOL_T0 | SCARD_PROTOCOL_T1, + &sc_card, &dwPref); + + if (rv != SCARD_S_SUCCESS) { + SCardReleaseContext(sc_ctx); + fprintf(stderr, "Error connecting to reader %ld\n", rv); + return 1; + } + printf("done.\n"); + + reader_buf_size = strlen(readers[0])+1; + rv = SCardStatus(sc_card, readers[0], &reader_buf_size, &dwState, + &dwProt, pbAtr, &dwAtrLen); + if (rv != SCARD_S_SUCCESS) { + SCardDisconnect(sc_card, SCARD_UNPOWER_CARD); + SCardReleaseContext(sc_ctx); + fprintf(stderr, "Error receiving status info 0x%08X\n", (unsigned int) rv); + return 1; + } + ctx.sc_card = sc_card; + + i = sc_pkcs15_init(&ctx, &card); + if (i != 0) { + fprintf(stderr, "PKCS#15 card init failed with %d\n", i); + SCardDisconnect(sc_card, SCARD_UNPOWER_CARD ); + SCardReleaseContext( sc_ctx ); + return 1; + } + i = sc_pkcs15_read_certificate(&card, 0); + if (i) { + fprintf(stderr, "Certificate read failed with %d\n", i); + return 1; + } + i = sc_pkcs15_read_pin_object(&card, 0); + if (i) { + fprintf(stderr, "PIN object read failed with %d\n", i); + return 1; + } +/* + printf("Opening EF(DIR)...\n"); + memcpy(r, "\x3f\x00", 2); + i = sc_select_file(&ctx, &file, r, 2, SC_SELECT_FILE_BY_FILE_ID); + if (i != 0) { + fprintf(stderr, "EF(DIR) open failed with %d\n", i); + SCardDisconnect(sc_card, SCARD_UNPOWER_CARD ); + SCardReleaseContext( sc_ctx ); + return 1; + } + + printf("Reading EF(DIR)...\n"); + i = sc_read_binary(&ctx, 0, r, 0x60); + if (i < 0) { + fprintf(stderr, "EF(DIR) read failed with %d\n", i); + SCardDisconnect(sc_card, SCARD_UNPOWER_CARD ); + SCardReleaseContext( sc_ctx ); + return 1; + } + sc_print_tags(r, i); +*/ + + SCardDisconnect(sc_card, SCARD_UNPOWER_CARD); + SCardReleaseContext(sc_ctx); + + return 0; +}