27 #include <openssl/bio.h> 28 #include <openssl/err.h> 29 #include <openssl/bn.h> 30 #include <openssl/rsa.h> 31 #include <openssl/x509.h> 38 #define ERR_LIB_PKCS11 ERR_LIB_USER 40 #define PKCS11err(f,r) \ 41 ERR_PUT_error(ERR_LIB_PKCS11,(f),(r),__FILE__,__LINE__) 80 unsigned char initialized;
81 unsigned char loginRequired;
82 unsigned char secureLogin;
83 unsigned char userPinSet;
84 unsigned char readOnly;
86 unsigned char userPinCountLow;
87 unsigned char userPinFinalTry;
88 unsigned char userPinLocked;
89 unsigned char userPinToBeChanged;
90 unsigned char soPinCountLow;
91 unsigned char soPinFinalTry;
92 unsigned char soPinLocked;
93 unsigned char soPinToBeChanged;
101 unsigned char removable;
285 extern int PKCS11_set_ui_method(
PKCS11_CTX *ctx,
286 UI_METHOD *ui_method,
void *ui_user_data);
320 const char *new_pin);
361 char *label,
unsigned char *
id,
size_t id_len,
365 extern int PKCS11_seed_random(
PKCS11_SLOT *slot,
const unsigned char *s,
unsigned int s_len);
366 extern int PKCS11_generate_random(
PKCS11_SLOT *slot,
unsigned char *r,
unsigned int r_len);
371 RSA_METHOD *PKCS11_get_rsa_method(
void);
373 #if OPENSSL_VERSION_NUMBER >= 0x10100002L && !defined(LIBRESSL_VERSION_NUMBER) 374 EC_KEY_METHOD *PKCS11_get_ec_key_method(
void);
375 void *PKCS11_get_ecdsa_method(
void);
376 void *PKCS11_get_ecdh_method(
void);
378 void *PKCS11_get_ec_key_method(
void);
379 ECDSA_METHOD *PKCS11_get_ecdsa_method(
void);
380 ECDH_METHOD *PKCS11_get_ecdh_method(
void);
391 #if defined(_LIBP11_INT_H) 394 #define P11_DEPRECATED(msg) 395 #elif defined(_MSC_VER) 396 #define P11_DEPRECATED(msg) __declspec(deprecated(msg)) 397 #elif defined(__GNUC__) 398 #if (__GNUC__ * 10000 + __GNUC_MINOR__ * 100 + __GNUC_PATCHLEVEL__) >= 40500 400 #define P11_DEPRECATED(msg) __attribute__ ((deprecated(msg))) 402 #define P11_DEPRECATED(msg) __attribute__ ((deprecated)) 404 #elif defined(__clang__) 405 #define P11_DEPRECATED(msg) __attribute__ ((deprecated(msg))) 407 #define P11_DEPRECATED(msg) 410 #define P11_DEPRECATED_FUNC \ 411 P11_DEPRECATED("This function will be removed in libp11 0.5.0") 431 int algorithm,
unsigned int bits,
432 char *label,
unsigned char*
id,
size_t id_len);
435 P11_DEPRECATED_FUNC
extern int PKCS11_get_key_size(
PKCS11_KEY *);
438 P11_DEPRECATED_FUNC
extern int PKCS11_get_key_modulus(
PKCS11_KEY *, BIGNUM **);
441 P11_DEPRECATED_FUNC
extern int PKCS11_get_key_exponent(
PKCS11_KEY *, BIGNUM **);
444 P11_DEPRECATED_FUNC
extern int PKCS11_ecdsa_sign(
445 const unsigned char *m,
unsigned int m_len,
446 unsigned char *sigret,
unsigned int *siglen,
PKCS11_KEY * key);
449 P11_DEPRECATED_FUNC
extern int PKCS11_sign(
int type,
450 const unsigned char *m,
unsigned int m_len,
451 unsigned char *sigret,
unsigned int *siglen,
PKCS11_KEY * key);
454 P11_DEPRECATED_FUNC
extern int PKCS11_verify(
int type,
455 const unsigned char *m,
unsigned int m_len,
456 unsigned char *signature,
unsigned int siglen,
PKCS11_KEY * key);
459 P11_DEPRECATED_FUNC
extern int PKCS11_private_encrypt(
460 int flen,
const unsigned char *from,
461 unsigned char *to,
PKCS11_KEY * rsa,
int padding);
474 int flen,
const unsigned char *from,
475 unsigned char *to,
PKCS11_KEY * key,
int padding);
480 #define PKCS11_F_PKCS11_CTX_LOAD 1 481 #define PKCS11_F_PKCS11_ENUM_SLOTS 2 482 #define PKCS11_F_PKCS11_CHECK_TOKEN 3 483 #define PKCS11_F_PKCS11_OPEN_SESSION 4 484 #define PKCS11_F_PKCS11_LOGIN 5 485 #define PKCS11_F_PKCS11_ENUM_KEYS 6 486 #define PKCS11_F_PKCS11_GET_KEY 7 487 #define PKCS11_F_PKCS11_RSA_DECRYPT 8 488 #define PKCS11_F_PKCS11_RSA_ENCRYPT 9 489 #define PKCS11_F_PKCS11_RSA_SIGN 10 490 #define PKCS11_F_PKCS11_RSA_VERIFY 11 491 #define PKCS11_F_PKCS11_ENUM_CERTS 12 492 #define PKCS11_F_PKCS11_INIT_TOKEN 13 493 #define PKCS11_F_PKCS11_INIT_PIN 14 494 #define PKCS11_F_PKCS11_LOGOUT 15 495 #define PKCS11_F_PKCS11_STORE_PRIVATE_KEY 16 496 #define PKCS11_F_PKCS11_GENERATE_KEY 17 497 #define PKCS11_F_PKCS11_STORE_PUBLIC_KEY 18 498 #define PKCS11_F_PKCS11_STORE_CERTIFICATE 19 499 #define PKCS11_F_PKCS11_SEED_RANDOM 20 500 #define PKCS11_F_PKCS11_GENERATE_RANDOM 21 501 #define PKCS11_F_PKCS11_CHANGE_PIN 22 502 #define PKCS11_F_PKCS11_GETATTR 40 503 #define PKCS11_F_PKCS11_EC_KEY_SIGN 41 504 #define PKCS11_F_PKCS11_EC_KEY_VERIFY 42 505 #define PKCS11_F_PKCS11_GETSESSIONINFO 43 506 #define PKCS11_F_PKCS11_EC_KEY_COMPUTE_KEY 44 508 #define PKCS11_ERR_BASE 1024 509 #define PKCS11_LOAD_MODULE_ERROR (PKCS11_ERR_BASE+1) 510 #define PKCS11_MODULE_LOADED_ERROR (PKCS11_ERR_BASE+2) 511 #define PKCS11_SYMBOL_NOT_FOUND_ERROR (PKCS11_ERR_BASE+3) 512 #define PKCS11_NOT_SUPPORTED (PKCS11_ERR_BASE+4) 513 #define PKCS11_NO_SESSION (PKCS11_ERR_BASE+5) 514 #define PKCS11_KEYGEN_FAILED (PKCS11_ERR_BASE+6) 515 #define PKCS11_UI_FAILED (PKCS11_ERR_BASE+7) void PKCS11_release_all_slots(PKCS11_CTX *ctx, PKCS11_SLOT *slots, unsigned int nslots)
Free the list of slots allocated by PKCS11_enumerate_slots()
void PKCS11_CTX_unload(PKCS11_CTX *ctx)
Unload a PKCS#11 module.
EVP_PKEY * PKCS11_get_private_key(PKCS11_KEY *key)
Returns a EVP_PKEY object for the private key.
int PKCS11_init_pin(PKCS11_TOKEN *token, const char *pin)
Initialize the user PIN on a token.
int PKCS11_CTX_load(PKCS11_CTX *ctx, const char *ident)
Load a PKCS#11 module.
unsigned char isPrivate
private key present?
int PKCS11_login(PKCS11_SLOT *slot, int so, const char *pin)
Authenticate to the card.
EVP_PKEY * evp_key
initially NULL, need to call PKCS11_load_key
PKCS11_TOKEN * token
NULL if no token present.
EVP_PKEY * PKCS11_get_public_key(PKCS11_KEY *key)
Returns a EVP_PKEY object with the public key.
struct PKCS11_cert_st PKCS11_CERT
PKCS11 certificate object.
unsigned long PKCS11_get_slotid_from_slot(PKCS11_SLOT *slotp)
Get the slot_id from a slot as it is stored in private.
PKCS11 token: smart card or USB key.
unsigned char needLogin
login to read private key?
PKCS11 key object (public or private)
void ERR_load_PKCS11_strings(void)
Load PKCS11 error strings.
int PKCS11_store_certificate(PKCS11_TOKEN *token, X509 *x509, char *label, unsigned char *id, size_t id_len, PKCS11_CERT **ret_cert)
Store certificate on a token.
int PKCS11_enumerate_slots(PKCS11_CTX *ctx, PKCS11_SLOT **slotsp, unsigned int *nslotsp)
Get a list of all slots.
int PKCS11_open_session(PKCS11_SLOT *slot, int rw)
Open a session in RO or RW mode.
struct PKCS11_ctx_st PKCS11_CTX
PKCS11 context.
PKCS11_CTX * PKCS11_CTX_new(void)
Create a new libp11 context.
P11_DEPRECATED_FUNC int PKCS11_generate_key(PKCS11_TOKEN *token, int algorithm, unsigned int bits, char *label, unsigned char *id, size_t id_len)
Generate and store a private key on the token.
int PKCS11_store_public_key(PKCS11_TOKEN *token, EVP_PKEY *pk, char *label, unsigned char *id, size_t id_len)
Store public key on a token.
P11_DEPRECATED_FUNC int PKCS11_private_decrypt(int flen, const unsigned char *from, unsigned char *to, PKCS11_KEY *key, int padding)
Decrypts data using the private key.
PKCS11 slot: card reader.
int PKCS11_store_private_key(PKCS11_TOKEN *token, EVP_PKEY *pk, char *label, unsigned char *id, size_t id_len)
Store private key on a token.
struct PKCS11_slot_st PKCS11_SLOT
PKCS11 slot: card reader.
PKCS11_SLOT * PKCS11_find_token(PKCS11_CTX *ctx, PKCS11_SLOT *slots, unsigned int nslots)
Find the first slot with a token.
int PKCS11_logout(PKCS11_SLOT *slot)
De-authenticate from the card.
struct PKCS11_key_st PKCS11_KEY
PKCS11 key object (public or private)
int PKCS11_init_token(PKCS11_TOKEN *token, const char *pin, const char *label)
Initialize a token.
void PKCS11_CTX_free(PKCS11_CTX *ctx)
Free a libp11 context.
PKCS11 certificate object.
int PKCS11_CTX_reload(PKCS11_CTX *ctx)
Reinitialize a PKCS#11 module (after a fork)
int PKCS11_is_logged_in(PKCS11_SLOT *slot, int so, int *res)
Check if user is already authenticated to a card.
int PKCS11_change_pin(PKCS11_SLOT *slot, const char *old_pin, const char *new_pin)
Change the user PIN on a token.
struct PKCS11_token_st PKCS11_TOKEN
PKCS11 token: smart card or USB key.
void PKCS11_CTX_init_args(PKCS11_CTX *ctx, const char *init_args)
Specify any private PKCS#11 module initialization args, if necessary.