- added some missing files

- renamed card-setec.c to card-setcos.c


git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@243 c6295689-39f2-0310-b995-f0e70906c6a9
This commit is contained in:
jey 2002-02-26 11:27:49 +00:00
parent 04dfc47d92
commit 4fa7283ae2
8 changed files with 224 additions and 29 deletions

2
docs/.cvsignore Normal file
View File

@ -0,0 +1,2 @@
html
latex

View File

@ -21,7 +21,7 @@ libopensc_la_SOURCES = asn1.c base64.c sec.c log.c sc.c card.c iso7816.c \
dir.c pkcs15.c pkcs15-cert.c pkcs15-pin.c \
pkcs15-prkey.c pkcs15-sec.c pkcs15-cache.c \
$(PCSC_SRC) \
card-setec.c card-miocos.c card-flex.c card-gpk.c \
card-setcos.c card-miocos.c card-flex.c card-gpk.c \
card-tcos.c card-emv.c card-default.c
libopensc_la_LDFLAGS = -version-info 0:6:0
libopensc_la_LIBADD = $(PCSC_LIB) $(SSL_LIB)

View File

@ -1,5 +1,5 @@
/*
* card-setec.c: Support for PKI cards by Setec
* card-setcos.c: Support for PKI cards by Setec
*
* Copyright (C) 2001 Juha Yrjölä <juha.yrjola@iki.fi>
*
@ -21,7 +21,7 @@
#include "sc-internal.h"
#include "sc-log.h"
static const char *setec_atrs[] = {
static const char *setcos_atrs[] = {
/* the current FINEID card has this ATR: */
"3B:9F:94:40:1E:00:67:11:43:46:49:53:45:10:52:66:FF:81:90:00",
/* this is from a Nokia branded SC */
@ -31,26 +31,26 @@ static const char *setec_atrs[] = {
NULL
};
static struct sc_card_operations setec_ops;
static const struct sc_card_driver setec_drv = {
static struct sc_card_operations setcos_ops;
static const struct sc_card_driver setcos_drv = {
"Setec smartcards",
"setec",
&setec_ops
"setcos",
&setcos_ops
};
static int setec_finish(struct sc_card *card)
static int setcos_finish(struct sc_card *card)
{
return 0;
}
static int setec_match_card(struct sc_card *card)
static int setcos_match_card(struct sc_card *card)
{
int i, match = -1;
for (i = 0; setec_atrs[i] != NULL; i++) {
for (i = 0; setcos_atrs[i] != NULL; i++) {
u8 defatr[SC_MAX_ATR_SIZE];
size_t len = sizeof(defatr);
const char *atrp = setec_atrs[i];
const char *atrp = setcos_atrs[i];
if (sc_hex_to_bin(atrp, defatr, &len))
continue;
@ -67,7 +67,7 @@ static int setec_match_card(struct sc_card *card)
return 1;
}
static int setec_init(struct sc_card *card)
static int setcos_init(struct sc_card *card)
{
card->drv_data = NULL;
card->cla = 0x00;
@ -102,7 +102,7 @@ static u8 acl_to_byte(const struct sc_acl_entry *e)
return 0x00;
}
static int setec_create_file(struct sc_card *card, struct sc_file *file)
static int setcos_create_file(struct sc_card *card, struct sc_file *file)
{
if (file->prop_attr_len == 0) {
memcpy(file->prop_attr, "\x03\x00\x00", 3);
@ -139,7 +139,7 @@ static int setec_create_file(struct sc_card *card, struct sc_file *file)
return iso_ops->create_file(card, file);
}
static int setec_set_security_env(struct sc_card *card,
static int setcos_set_security_env(struct sc_card *card,
const struct sc_security_env *env,
int se_num)
{
@ -221,7 +221,7 @@ static void parse_sec_attr(struct sc_file *file, const u8 *buf, size_t len)
add_acl_entry(file, idx[i], buf[i]);
}
static int setec_select_file(struct sc_card *card,
static int setcos_select_file(struct sc_card *card,
const struct sc_path *in_path,
struct sc_file **file)
{
@ -235,7 +235,7 @@ static int setec_select_file(struct sc_card *card,
return 0;
}
static int setec_list_files(struct sc_card *card, u8 *buf, size_t buflen)
static int setcos_list_files(struct sc_card *card, u8 *buf, size_t buflen)
{
struct sc_apdu apdu;
int r;
@ -255,22 +255,22 @@ static const struct sc_card_driver * sc_get_driver(void)
{
const struct sc_card_driver *iso_drv = sc_get_iso7816_driver();
setec_ops = *iso_drv->ops;
setec_ops.match_card = setec_match_card;
setec_ops.init = setec_init;
setec_ops.finish = setec_finish;
setcos_ops = *iso_drv->ops;
setcos_ops.match_card = setcos_match_card;
setcos_ops.init = setcos_init;
setcos_ops.finish = setcos_finish;
if (iso_ops == NULL)
iso_ops = iso_drv->ops;
setec_ops.create_file = setec_create_file;
setec_ops.set_security_env = setec_set_security_env;
setec_ops.select_file = setec_select_file;
setec_ops.list_files = setec_list_files;
setcos_ops.create_file = setcos_create_file;
setcos_ops.set_security_env = setcos_set_security_env;
setcos_ops.select_file = setcos_select_file;
setcos_ops.list_files = setcos_list_files;
return &setec_drv;
return &setcos_drv;
}
#if 1
const struct sc_card_driver * sc_get_setec_driver(void)
const struct sc_card_driver * sc_get_setcos_driver(void)
{
return sc_get_driver();
}

View File

@ -1,5 +1,5 @@
/*
* card-setec.c: Support for TCOS 2.0 cards
* card-tcos.c: Support for TCOS 2.0 cards
*
* Copyright (C) 2001 Juha Yrjölä <juha.yrjola@iki.fi>
*

View File

@ -695,7 +695,7 @@ extern const struct sc_reader_driver *sc_get_pcsc_driver(void);
extern const struct sc_card_driver *sc_get_iso7816_driver(void);
extern const struct sc_card_driver *sc_get_emv_driver(void);
extern const struct sc_card_driver *sc_get_setec_driver(void);
extern const struct sc_card_driver *sc_get_setcos_driver(void);
extern const struct sc_card_driver *sc_get_miocos_driver(void);
extern const struct sc_card_driver *sc_get_flex_driver(void);
extern const struct sc_card_driver *sc_get_gpk_driver(void);

View File

@ -173,7 +173,7 @@ int sc_establish_context(struct sc_context **ctx_out)
ctx->card_drivers[i] = NULL;
i = 0;
#if 1
ctx->card_drivers[i++] = sc_get_setec_driver();
ctx->card_drivers[i++] = sc_get_setcos_driver();
#endif
#if 1
ctx->card_drivers[i++] = sc_get_miocos_driver();

View File

@ -0,0 +1,97 @@
#
# PKCS 15 r/w profile for GPK cards
#
CardInfo
Label "OpenSC Card"
Manufacturer "OpenSC Project"
MinPinLength 0
MaxPinLength 8
#PinEncoding
# This is the secure messaging key required for
# creating files in the MF
#Key PRO 0x0001 "=TEST KEYTEST KEY"
# This is the application DF
DF
Path 3F005015
AID A0:00:00:00:63:50:4B:43:53:2D:31:35
ACL *=NONE
EF pinfile
Path 3F0050150000
Structure 0x21 # GPK specific
RecordLength 8
Size 32
ACL *=NEVER
EF PKCS15-DIR
Path 3F002F00
ACL *=NONE
EF PKCS15-ODF
Path 3F0050155031
ACL *=NONE
EF PKCS15-TokenInfo
Path 3F0050155032
ACL *=NONE
EF PKCS15-AODF
Path 3F0050154401
ACL *=NEVER READ=NONE UPDATE=CHV2
EF PKCS15-PrKDF
Path 3F0050154402
ACL *=NEVER READ=NONE UPDATE=CHV2
EF PKCS15-CDF
Path 3F0050154403
ACL *=NEVER READ=NONE UPDATE=CHV2
# Private key files.
# GPK private key files will never let you read the private key
# part, so it's okay to set READ=NONE. What's more, we need
# read access so we're able to update the file.
EF pk1
Path 3F005015000E
Structure 0x2C # GPK specific
ACL *=NEVER READ=NEVER UPDATE=CHV2 WRITE=CHV2
EF pk2
Path 3F005015000F
Structure 0x2C # GPK specific
ACL *=NEVER READ=NEVER UPDATE=CHV2 WRITE=CHV2
# CVH1. 7 attempts for the PIN, and 3 for the PUK
# Reference 0x8 means "PIN0 in the local EFsc" in GPK parlance
PIN CHV1
File pinfile
Label "Authentication PIN"
Reference 0x8
Attempts 7 3
AuthID 01
# CVH2. 7 attempts for the PIN, and 3 for the PUK
# Reference 0xA means "PIN2 in the local EFsc" in GPK parlance
PIN CHV2
File pinfile
Label "Non-repudiation PIN"
Reference 0xA
Attempts 7 3
Offset 16
AuthID 02
PrivateKey AuthKey
Label "Authentication Key"
File pk1
ID 45
AuthID 01 # Requires CHV1
KeyUsage sign
PrivateKey SignKey
Label "Non-repudiation Key"
File pk2
ID 46
AuthID 02 # Requires CHV2
KeyUsage NonRepudiation

96
src/tools/pkcs15-miocos.c Normal file
View File

@ -0,0 +1,96 @@
/*
* MioCOS specific operation for PKCS15 initialization
*
* Copyright (C) 2002 Juha Yrjölä <juha.yrjola@iki.fi>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <sys/types.h>
#include <string.h>
#include <openssl/bn.h>
#include "opensc.h"
#include "pkcs15-init.h"
#include "util.h"
/*
* Initialize the Application DF and store the PINs
*
*/
static int miocos_init_app(struct sc_profile *profile, struct sc_card *card)
{
#if 0
struct pin_info *pin1, *pin2;
int lockit = 0;
pin1 = sc_profile_find_pin(profile, "CHV1");
pin2 = sc_profile_find_pin(profile, "CHV2");
if (pin1 == NULL) {
fprintf(stderr, "No CHV1 defined\n");
return 1;
}
/* XXX TODO:
* if the CHV2 pin file is required to create files
* in the application DF, create that file first */
/* Create the application DF */
if (do_create_file(profile, profile->df_info.file))
return 1;
/* Store CHV2 */
lockit = 0;
if (pin2) {
if (gpk_store_pin(profile, card, pin2, &lockit))
return 1;
/* If both PINs reside in the same file, don't lock
* it yet. */
if (pin1->file != pin2->file && lockit) {
if (gpk_lock_pinfile(profile, card, pin2->file->file))
return 1;
lockit = 0;
}
}
/* Store CHV1 */
if (gpk_store_pin(profile, card, pin1, &lockit))
return 1;
if (lockit && gpk_lock_pinfile(profile, card, pin2->file->file))
return 1;
#endif
return 0;
}
/*
* Store a RSA key on the card
*/
static int miocos_store_rsa_key(struct sc_profile *profile,
struct sc_card *card,
struct prkey_info *info, RSA *rsa)
{
return 0;
}
void bind_miocos_operations(struct pkcs15_init_operations *ops)
{
ops->erase_card = NULL;
ops->init_app = miocos_init_app;
ops->store_rsa = miocos_store_rsa_key;
ops->store_dsa = NULL;
}