From decb9297dd1468b8be2b299800b642b654420c0b Mon Sep 17 00:00:00 2001 From: "ludovic.rousseau" Date: Tue, 16 Aug 2005 11:05:09 +0000 Subject: [PATCH] add PKCS11_change_pin() function git-svn-id: https://www.opensc-project.org/svnp/opensc/trunk@2489 c6295689-39f2-0310-b995-f0e70906c6a9 --- src/libp11/libp11.h | 5 +++++ src/libp11/p11_err.c | 1 + src/libp11/p11_slot.c | 24 ++++++++++++++++++++++++ 3 files changed, 30 insertions(+) diff --git a/src/libp11/libp11.h b/src/libp11/libp11.h index dce18295..bedce887 100644 --- a/src/libp11/libp11.h +++ b/src/libp11/libp11.h @@ -179,6 +179,10 @@ extern int PKCS11_init_token(PKCS11_TOKEN *, const char *pin, /* Initialize the user PIN on a token */ extern int PKCS11_init_pin(PKCS11_TOKEN *, const char *pin); +/* Change the user PIN on a token */ +extern int PKCS11_change_pin(PKCS11_SLOT *, const char *old_pin, + const char *new_pin); + /* Store various objects on the token */ extern int PKCS11_generate_key(PKCS11_TOKEN *, int, unsigned int, char *); extern int PKCS11_store_private_key(PKCS11_TOKEN *, EVP_PKEY *, char *); @@ -224,6 +228,7 @@ extern void ERR_load_PKCS11_strings(void); #define PKCS11_F_PKCS11_STORE_CERTIFICATE 19 #define PKCS11_F_PKCS11_SEED_RANDOM 20 #define PKCS11_F_PKCS11_GENERATE_RANDOM 21 +#define PKCS11_F_PKCS11_CHANGE_PIN 22 #define PKCS11_F_PKCS11_GETATTR 40 #define PKCS11_ERR_BASE 1024 diff --git a/src/libp11/p11_err.c b/src/libp11/p11_err.c index f9273312..95592571 100644 --- a/src/libp11/p11_err.c +++ b/src/libp11/p11_err.c @@ -85,6 +85,7 @@ static ERR_STRING_DATA PKCS11_str_functs[] = { {ERR_PACK(0, PKCS11_F_PKCS11_GENERATE_KEY, 0), "PKCS11_generate_key"}, {ERR_PACK(0, PKCS11_F_PKCS11_STORE_PUBLIC_KEY, 0), "PKCS11_store_public_key"}, {ERR_PACK(0, PKCS11_F_PKCS11_STORE_CERTIFICATE, 0), "PKCS11_store_certificate"}, + {ERR_PACK(0, PKCS11_F_PKCS11_CHANGE_PIN, 0), "PKCS11_change_pin"}, {0, NULL} }; diff --git a/src/libp11/p11_slot.c b/src/libp11/p11_slot.c index 60fc310c..a0c215a7 100644 --- a/src/libp11/p11_slot.c +++ b/src/libp11/p11_slot.c @@ -251,6 +251,30 @@ int PKCS11_init_pin(PKCS11_TOKEN * token, const char *pin) return pkcs11_check_token(ctx, TOKEN2SLOT(token)); } +/* + * Change the User PIN + */ +int PKCS11_change_pin(PKCS11_SLOT * slot, const char *old_pin, + const char *new_pin) +{ + PKCS11_SLOT_private *priv = PRIVSLOT(slot); + PKCS11_CTX *ctx = priv->parent; + int old_len, new_len, rv; + + if (!priv->haveSession) { + PKCS11err(PKCS11_F_PKCS11_CHANGE_PIN, PKCS11_NO_SESSION); + return -1; + } + + old_len = old_pin ? strlen(old_pin) : 0; + new_len = new_pin ? strlen(new_pin) : 0; + rv = CRYPTOKI_call(ctx, C_SetPIN(priv->session, (CK_UTF8CHAR *) old_pin, + old_len, (CK_UTF8CHAR *) new_pin, new_len)); + CRYPTOKI_checkerr(PKCS11_F_PKCS11_CHANGE_PIN, rv); + + return pkcs11_check_token(ctx, slot); +} + /* * Seed the random number generator */