Spécifications techniques Moteur PKCS#11 pour OpenSSL Pour

Transcription

Spécifications techniques Moteur PKCS#11 pour OpenSSL Pour
:
GR
ER
ET
PU B
L IC
Référence
OpenSSL - Moteur PKCS11 pour CPS_V1.2.doc
OU
T
’IN
PEM EN T D
Spécifications techniques
Moteur PKCS#11 pour OpenSSL
Pour cartes CPS
17 Janvier 2008
Version 1.2
Document d’information
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
SOMMAIRE
1.
INTRODUCTION......................................................................................................... 4
1.1.
RAPPEL ............................................................................................................................................................ 4
1.2.
BUT .................................................................................................................................................................. 4
1.3.
PREREQUIS ...................................................................................................................................................... 4
2.
TECHNIQUE ............................................................................................................... 5
2.1.
GENERALITES.................................................................................................................................................. 5
2.2.
MOTEUR PKCS#11............................................................................................................................................ 5
2.3.
2.2.1.
Récupération et installation du moteur PKCS#11.................................................................................. 5
2.2.2.
Chargement du moteur ........................................................................................................................... 6
UTILISATION DU MOTEUR PKCS#11 ................................................................................................................ 8
2.3.1.
Généralités.............................................................................................................................................. 8
2.3.2.
Commandes............................................................................................................................................ 8
2.3.3.
Exemples de commandes ....................................................................................................................... 8
2.4.
RESTRICTIONS D’USAGE – LIMITES ................................................................................................................ 9
2.5.
UTILISATION DU MOTEUR PKCS#11 A PARTIR D’UN FICHIER DE CONFIGURATION ................................... 11
2.6.
OPENSSL COMME BIBLIOTHEQUE ............................................................................................................... 11
2.6.1.
généralités ............................................................................................................................................ 11
2.6.2.
Exemples de code................................................................................................................................. 12
2.6.3.
Liste des commandes ........................................................................................................................... 15
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 2 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
Suivi des Modifications
Version
1.0
1.1
Date
09/03/2007
14/03/2007
Auteur
Frédéric BARAN
Frédéric BARAN
1.2
17/01/2008
Frédéric BARAN
17 Janvier 2008
Description
Version initiale
Corrections – ajout exemples de
codes pour appli en C.
Correction des restrictions d’usage
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 3 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
1. INTRODUCTION
1.1.
RAPPEL
OpenSSL est un ensemble de librairies permettant de réaliser des opérations cryptographiques de
manière logicielle avec divers algorithmes (blowfish, DES ou Triple DES, DSA, RC4, RC5,
RSA,…).
Des plug-in appelés moteurs peuvent être ajoutés à OpenSSL, pour permettre de réaliser des
opérations cryptographiques externes depuis un hardware.
Plus précisément, nous nous intéresserons dans ce document à un moteur PKCS#11 appelé
engine_PKCS11, permettant d’accéder à un matériel cryptographique tel qu’une carte CPS, par
l’intermédiaire d’un module PKCS#11 (du GIP-CPS).
1.2.
BUT
Le but de ce document est d’expliquer comment utiliser OpenSSL avec un moteur hardware
PKCS#11 pour accéder et utiliser la carte CPS pour des opérations cryptographiques.
OpenSSL faisant dans ce cas, office de surcouche du PKCS#11 (du GIP-CPS) pour l’accès aux
données CPS avec des fonctions de plus haut niveau.
1.3.
-
PREREQUIS
Un système d’exploitation Microsoft Windows ou Linux (versions utilisées pour les tests :
Windows 2000 Professionnel et Linux Fedora Core 4)
Les cryptoLib (librairies PKCS#11 du GIP-CPS) devront être installées.
Un version récente d’OpenSSL devra être installée (version courante 0.9.8e)
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 4 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
2. TECHNIQUE
2.1.
GENERALITES
OpenSSL peut s’utiliser de 3 manières différentes :
- Par ligne de commandes,
- Comme bibliothèque (API) pour langage C,
- Par intégration à d’autres langages (PHP, perl)
Dans ce document, nous nous intéresserons à l’utilisation d’OpenSSL en ligne de commandes ainsi
que sous forme de bibliothèques utilisées dans une application C, et sous les environnements
Windows et Linux.
L’utilisation de d’OpenSSL en tant que bibliothèque est plus complète que sous ligne de
commandes. Néanmoins, nous détaillerons l’utilisation par ligne de commandes, car son utilisation
est plus souple et plus simple d’utilisation.
L’intérêt du moteur PKCS#11 d’OpenSSL pour la carte CPS, est :
- Utilisation de la clé de signature de la carte pour signer des fichiers.
- Utilisation de la clé d’authentification de la carte pour s’authentifier auprès d’un serveur
sécurisé. (par exemple SSL)
2.2.
MOTEUR PKCS#11
Le module PKCS#11 du GIP-CPS se trouve sous la forme d’une DLL (Dynamic Link Librairie)
sous environnement Microsoft Windows : cps_pkcs11_w32.dll et se trouve dans le répertoire de
Windows (« c:/winnt » sous windows 2000)
Cette bibliothèque fait partie de l’ensemble appelée Cryptolib et est installée lors de l’installation de
ce package.
Sous environnement Unix (Linux) : le module se trouve sous forme d’un SO (Shared Object)
nommé libcps_pkcs11_lux.so et se trouve dans /usr/local/galss.
Il est installé à partir du package Cryptolib pour Linux.
2.2.1. Récupération et installation du moteur PKCS#11
Comme nous l’avons déjà dit, pour faire le lien entre le module PKSC11 de la CPS et OpenSSL, il
est nécessaire de se procurer un module appelé engine_pkcs11.
Dans les deux environnements, il peut être récupéré sur le site : http://www.opensc-project.org.
OpenSC est un projet Open Source autour des cartes à puce. Dans cette optique, il a été développé
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 5 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
en autres, le moteur PKCS#11 pour interconnecter OpenSSL avec un module PKCS#11.
Pour windows : le Smart Card Bundle doit être téléchargé et installé. (adresse : http://www.openscproject.org/files/scb/)
Ce package installe différents modules comme OpenSC, OpenSSL, putty, ainsi que engine_pkcs11.
Ainsi que des librairies comme libp11.dll et libltdl3.dll, nécessaires au fonctionnement de
engine_pkcs11.
Pour Linux : Le moteur est directement téléchargeable depuis cette adresse : http://www.openscproject.org/files/engine_pkcs11/
Pour installer le moteur, il faudra avoir auparavant avoir installé la bibliothèque libp11
(http://www.opensc-project.org/files/libp11/)
2.2.2. Chargement du moteur
Une fois le moteur installé, il suffira de la charger en mémoire, en lui attribuant un identifiant.
Cet identifiant servira à appeler par le suite ce moteur à partir d’autres commandes OpenSSL.
Par ligne de commandes, il suffit de lancer le shell openssl :
(Windows)
OpenSSL> engine -t dynamic -pre SO_PATH:c:/winnt/engine_pkcs11.dll -pre ID:pkcs11 -pre LIST_ADD:1 -pre
LOAD -pre MODULE_PATH:c:/winnt/cps_pkcs11_w32.dll
(Linux)
OpenSSL> engine -t dynamic -pre SO_PATH:/usr/lib/engines/engine_pkcs11.so -pre ID:pkcs11 -pre LIST_ADD:1 pre LOAD -pre MODULE_PATH:/usr/local/galss/libcps_pkcs11_lux.so
Options utilisées :
SO_PATH : défini le chemin d’accès au moteur PKCS#11
MODULE_PATH : défini le chemin d’accès au module PKCS#11
ID : défini l’identifiant du module PKCS#11 chargé en mémoire (doit être « PKCS11 »)
LOAD : commande de chargement du module en mémoire.
-pre : liste des commandes à exécuter avant le chargement du module.
dynamic : chargement du module ne mémoire de manière partagée.
Si tout se passe bien, le résultat devra être :
(dynamic) Dynamic engine loading support
[Success]: SO_PATH:c:/winnt/engine_pkcs11.dll
[Success]: ID:pkcs11
[Success]: LIST_ADD:1
[Success]: LOAD
[Success]: MODULE_PATH:c:/winnt/cps_pkcs11_w32.dll
Loaded: (pkcs11) pkcs11 engine
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 6 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
[ available ]
Ainsi suite a cela, le module PKCS#11 est chargé en mémoire, et prêt à être utilisé par OpenSSL.
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 7 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
2.3.
UTILISATION DU MOTEUR PKCS#11
2.3.1. Généralités
L’utilisation du moteur PKCS#11 par une commande OpenSSL se fait toujours de la même
manière.
L’appel du module se fait à partir de certaines options de la commande :
-engine ID : indique le moteur à utiliser pour les fonctions cryptographiques de la commande.
(ID=identifiant du module PKCS#11 chargé, dans notre cas PKCS#11)
-keyform engine : indique la forme de la clé privée à utiliser (dans notre cas : engine indique que
la clé se trouve sur la carte CPS depuis le module PKCS#11)
-key ID : indique ou aller chercher la clé : dans le cas d’une carte CPS, ID sera soit 01000000 pour
la clé de signature, 0400000 pour la clé d’authentification. (Le port utilisé peut être ajouté devant
l’ID : par exemple : -key 0:04000000. Dans notre cas, il est 0. Le port par défaut étant 0, il est
facultatif)
-inkey ID : pour certaines commandes –in sera remplacé par –inkey. L’utilisation est identique.
2.3.2. Commandes
Voici une liste de fonctions pouvant utiliser un moteur pkcs#11 en argument, pour les fonctions
cryptographiques :
-
req : Création de demande de certificats (ou de certificats auto signés).
smime : Gestion des smimes : signature/encryptage/décryptage de mails.
x509 : Gestion de certificats : lecture/conversion/signature.
dgst : Fonctions de hachage : création de condensé/signature/vérification signature.
rsautl : utilitaire RSA : signature de messages, encryptage/décryptage.
enc : utilitaire d’encryptage.
s_client : Fonctions SSL/TLS clientes : connection à un serveur SSL,…
s_server : Fonctions SSL/TLS serveurs : Création de serveur de test SSL,…
PKCS7 : Gestion de PKCS#7 : Conversions.
rand : génération de nombre pseudo aléatoire.
speed : test de performances. (des algorithmes de cryptographies)
2.3.3. Exemples de commandes
Génération d’un certificat auto-signé (pour test), avec le certificat de la carte CPS
OpenSSL> req -config c:/openssl.conf -engine pkcs11 -new -key 01000000 -keyform engine -out req.pem -text -x509 subj "/CN=TEST"
Signature d’un mail, avec une carte CPS.
OpenSSL> smime -sign -engine pkcs11 -signer C:/res.pem -in c:/requete_00007_tosign.txt -keyform engine -inkey
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 8 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
01000000 -text
Par défaut : signature au format PKCS7 v1.5 (RFC2315) : Hashage + padding + signature.
Pour une signature au format CMS (RFC2630), utiliser l’option « -nodetach » qui formatera avec
une structure SignedData.
Génération d’un nombre pseudo-aléatoire, à partir de la carte CPS :
OpenSSL> rand -engine pkcs11 10
Connection à un serveur sécurisé avec SSL :
OpenSSL> s_client -connect testssl.gip-cps.fr:443 -engine pkcs11 -state -showcerts -keyform engine -key 0:04000000 CAfile c:\ca-bundle.cer -cert c:/auth.pem -certform PEM -ssl3 -debug
- 443 étant le port SSL
- auth.pem étant le certificat d’authentification présent sur la carte et correspondant à la clé privée
0 :04000000 (ce certificat devra préalablement être extrait et converti en PEM)
- connect testssl.gip-cps.fr:443 étant le site distant sécurisé en SSL
Hachage d’un fichier + signature :
OpenSSL> dgst -sign 01000000 -engine pkcs11 -out c:/toto.txt -keyform engine –hex c:/requete_00007.txt
Test de performances de l’algorithme de hachage :
OpeSSL> speed -engine pkcs11 sha1
Signature d’une demande de certificat :
OpenSSL> x509 -engine pkcs11 -req -in c:/requete_tosign.txt -keyform engine -out c:/toto.txt -signkey 01000000
2.4.
RESTRICTIONS D’USAGE – LIMITES
Les fonctions d’OpenSSL associé à un moteur PKCS#11 ne peuvent pas réaliser certaines
opérations utiles dans le cadre de la gestion de la carte CPS et de ses certificats.
-
Récupération d’un certificat directement sur une carte CPS : pour certaines fonctions
d’OpenSSL (s_client, smime), le certificat correspondant à une clé privée de la carte
CPS doit être donné en paramètre. Mais seul un fichier correspondant au certificat peut
être donné. OpenSSL ne peut pas passer par le module PKCS#11 pour aller chercher ce
certificat. Aucune fonction d’extraction de certificat n’est disponible avec le moteur
PKCS#11. Ce certificat devra préalablement être extrait de la carte (par une fonction
PKCS#11 par exemple, ou bien d’autres outils, tel que pkcs11tool de OpenSC)
-
Constatation du blocage du port de la carte après une utilisation du module PKCS#11 en
ligne de commandes. Impossibilité de décharger le module en mémoire. Fermeture de la
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 9 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
session OpenSSL obligatoire, puis relance (fermeture de la fenêtre DOS). Le problème
peut être résolu en utilisant OpenSSL en tant que librairie dans du code C par exemple,
où là, des fonctions de libération du moteur PKCS#11 existent. (Engine_free() par
exemple)
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 10 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
2.5.
UTILISATION DU MOTEUR PKCS#11 A PARTIR D’UN FICHIER DE CONFIGURATION
De cette manière, il n’est pas nécessaire de charger préalablement le moteur en mémoire.
Par exemple : Création d’un certificat auto signé :
OpenSSL> req –config /usr/local/openssl.conf -engine pkcs11 -new -key 01000000 -keyform engine -out
req.pem -text -x509 -subj "/CN=TEST"
Avec le fichier openssl.conf suivant :
openssl_conf
= openssl_def
[openssl_def]
engines = engine_section
[engine_section]
pkcs11 = pkcs11_section
[pkcs11_section]
engine_id = pkcs11
dynamic_path = /usr/lib/engines/engine_pkcs11.so
MODULE_PATH = /usr/local/galss/libcps_pkcs11_lux.so
init = 0
[req]
distinguished_name = req_distinguished_name
[req_distinguished_name]
2.6.
OPENSSL COMME BIBLIOTHEQUE
2.6.1. généralités
L’API OpenSSL est disponible pour une application en C.
La bibliothèque de l’engine d’openSSL s’inclut dans le code de cette façon :
#include <openssl/engine.h>
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 11 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
2.6.2. Exemples de code
Voici un exemple de fonction permettant le chargement du module PKCS#11 :
static int tls_engine_load_dynamic_pkcs11(const char *pkcs11_so_path,
const char *pkcs11_module_path)
{
char *engine_id = "pkcs11";
const char *pre_cmd[] = {
"SO_PATH", pkcs11_so_path,
"ID", engine_id,
"LIST_ADD", "1",
/* "NO_VCHECK", "1", */
"LOAD", NULL,
NULL, NULL
};
const char *post_cmd[] = {
"MODULE_PATH", pkcs11_module_path,
NULL, NULL
};
if (!pkcs11_so_path || !pkcs11_module_path)
return 0;
wpa_printf(MSG_DEBUG, "ENGINE: Loading pkcs11 Engine from %s",
pkcs11_so_path);
return tls_engine_load_dynamic_generic(pre_cmd, post_cmd, engine_id);
}
Exemple d’une fonction générique et permettant de charger n’importe quel moteur OpenSSL :
static int tls_engine_load_dynamic_generic(const char *pre[],
const char *post[], const char *id)
{
ENGINE *engine;
const char *dynamic_id = "dynamic";
engine = ENGINE_by_id(id);
if (engine) {
ENGINE_free(engine);
wpa_printf(MSG_DEBUG, "ENGINE: engine '%s' is already "
"available", id);
return 0;
}
ERR_clear_error();
engine = ENGINE_by_id(dynamic_id);
if (engine == NULL) {
wpa_printf(MSG_INFO, "ENGINE: Can't find engine %s [%s]",
dynamic_id,
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 12 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
ERR_error_string(ERR_get_error(), NULL));
return -1;
}
/* Perform the pre commands. This will load the engine. */
while (pre && pre[0]) {
wpa_printf(MSG_DEBUG, "ENGINE: '%s' '%s'", pre[0], pre[1]);
if (ENGINE_ctrl_cmd_string(engine, pre[0], pre[1], 0) == 0) {
wpa_printf(MSG_INFO, "ENGINE: ctrl cmd_string failed: "
"%s %s [%s]", pre[0], pre[1],
ERR_error_string(ERR_get_error(), NULL));
ENGINE_free(engine);
return -1;
}
pre += 2;
}
/*
* Free the reference to the "dynamic" engine. The loaded engine can
* now be looked up using ENGINE_by_id().
*/
ENGINE_free(engine);
engine = ENGINE_by_id(id);
if (engine == NULL) {
wpa_printf(MSG_INFO, "ENGINE: Can't find engine %s [%s]",
id, ERR_error_string(ERR_get_error(), NULL));
return -1;
}
while (post && post[0]) {
wpa_printf(MSG_DEBUG, "ENGINE: '%s' '%s'", post[0], post[1]);
if (ENGINE_ctrl_cmd_string(engine, post[0], post[1], 0) == 0) {
wpa_printf(MSG_DEBUG, "ENGINE: ctrl cmd_string failed:"
" %s %s [%s]", post[0], post[1],
ERR_error_string(ERR_get_error(), NULL));
ENGINE_remove(engine);
ENGINE_free(engine);
return -1;
}
post += 2;
}
ENGINE_free(engine);
return 0;
}
Exemple de fonction permettant une récupération d’une la clé publique de la carte CPS à partir de
OpenSSL/PKCS#11 :
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 13 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
static int tls_engine_init(struct tls_connection *conn, const char *engine_id,
const char *pin, const char *key_id)
{
#ifndef OPENSSL_NO_ENGINE
int ret = -1;
if (engine_id == NULL) {
wpa_printf(MSG_ERROR, "ENGINE: Engine ID not set");
return -1;
}
if (pin == NULL) {
wpa_printf(MSG_ERROR, "ENGINE: Smartcard PIN not set");
return -1;
}
if (key_id == NULL) {
wpa_printf(MSG_ERROR, "ENGINE: Key Id not set");
return -1;
}
ERR_clear_error();
conn->engine = ENGINE_by_id(engine_id);
if (!conn->engine) {
wpa_printf(MSG_ERROR, "ENGINE: engine %s not available [%s]",
engine_id, ERR_error_string(ERR_get_error(), NULL));
goto err;
}
if (ENGINE_init(conn->engine) != 1) {
wpa_printf(MSG_ERROR, "ENGINE: engine init failed "
"(engine: %s) [%s]", engine_id,
ERR_error_string(ERR_get_error(), NULL));
goto err;
}
wpa_printf(MSG_DEBUG, "ENGINE: engine initialized");
if (ENGINE_ctrl_cmd_string(conn->engine, "PIN", pin, 0) == 0) {
wpa_printf(MSG_ERROR, "ENGINE: cannot set pin [%s]",
ERR_error_string(ERR_get_error(), NULL));
goto err;
}
conn->public_key = ENGINE_load_public_key (conn->engine,
key_id, NULL, NULL);
if (!conn->public_key) {
wpa_printf(MSG_ERROR, "ENGINE: cannot load public key with id"
" '%s' [%s]", key_id,
ERR_error_string(ERR_get_error(), NULL));
ret = TLS_SET_PARAMS_ENGINE_INIT_FAILED;
goto err;
}
return 0;
err:
if (conn->engine) {
ENGINE_free(conn->engine);
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 14 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
conn->engine = NULL;
}
if (conn->public_key) {
EVP_PKEY_free(conn->public_key);
conn->public_key = NULL;
}
return ret;
#else /* OPENSSL_NO_ENGINE */
return 0;
#endif /* OPENSSL_NO_ENGINE */
}
2.6.3. Liste des commandes
Voici une liste exhaustive des fonctions disponibles pour l’engine d’OpenSSL :
ENGINE *ENGINE_get_first(void);
ENGINE *ENGINE_get_last(void);
ENGINE *ENGINE_get_next(ENGINE *e);
ENGINE *ENGINE_get_prev(ENGINE *e);
int ENGINE_add(ENGINE *e);
int ENGINE_remove(ENGINE *e);
ENGINE *ENGINE_by_id(const char *id);
int ENGINE_init(ENGINE *e);
int ENGINE_finish(ENGINE *e);
void ENGINE_load_openssl(void);
void ENGINE_load_dynamic(void);
#ifndef OPENSSL_NO_STATIC_ENGINE
void ENGINE_load_4758cca(void);
void ENGINE_load_aep(void);
void ENGINE_load_atalla(void);
void ENGINE_load_chil(void);
void ENGINE_load_cswift(void);
void ENGINE_load_gmp(void);
void ENGINE_load_nuron(void);
void ENGINE_load_sureware(void);
void ENGINE_load_ubsec(void);
#endif
void ENGINE_load_cryptodev(void);
void ENGINE_load_builtin_engines(void);
void ENGINE_cleanup(void);
ENGINE *ENGINE_get_default_RSA(void);
ENGINE *ENGINE_get_default_DSA(void);
ENGINE *ENGINE_get_default_ECDH(void);
ENGINE *ENGINE_get_default_ECDSA(void);
ENGINE *ENGINE_get_default_DH(void);
ENGINE *ENGINE_get_default_RAND(void);
ENGINE *ENGINE_get_cipher_engine(int nid);
ENGINE *ENGINE_get_digest_engine(int nid);
int ENGINE_set_default_RSA(ENGINE *e);
int ENGINE_set_default_DSA(ENGINE *e);
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 15 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
int ENGINE_set_default_ECDH(ENGINE *e);
int ENGINE_set_default_ECDSA(ENGINE *e);
int ENGINE_set_default_DH(ENGINE *e);
int ENGINE_set_default_RAND(ENGINE *e);
int ENGINE_set_default_ciphers(ENGINE *e);
int ENGINE_set_default_digests(ENGINE *e);
int ENGINE_set_default_string(ENGINE *e, const char *list);
int ENGINE_set_default(ENGINE *e, unsigned int flags);
unsigned int ENGINE_get_table_flags(void);
void ENGINE_set_table_flags(unsigned int flags);
int ENGINE_register_RSA(ENGINE *e);
void ENGINE_unregister_RSA(ENGINE *e);
void ENGINE_register_all_RSA(void);
int ENGINE_register_DSA(ENGINE *e);
void ENGINE_unregister_DSA(ENGINE *e);
void ENGINE_register_all_DSA(void);
int ENGINE_register_ECDH(ENGINE *e);
void ENGINE_unregister_ECDH(ENGINE *e);
void ENGINE_register_all_ECDH(void);
int ENGINE_register_ECDSA(ENGINE *e);
void ENGINE_unregister_ECDSA(ENGINE *e);
void ENGINE_register_all_ECDSA(void);
int ENGINE_register_DH(ENGINE *e);
void ENGINE_unregister_DH(ENGINE *e);
void ENGINE_register_all_DH(void);
int ENGINE_register_RAND(ENGINE *e);
void ENGINE_unregister_RAND(ENGINE *e);
void ENGINE_register_all_RAND(void);
int ENGINE_register_STORE(ENGINE *e);
void ENGINE_unregister_STORE(ENGINE *e);
void ENGINE_register_all_STORE(void);
int ENGINE_register_ciphers(ENGINE *e);
void ENGINE_unregister_ciphers(ENGINE *e);
void ENGINE_register_all_ciphers(void);
int ENGINE_register_digests(ENGINE *e);
void ENGINE_unregister_digests(ENGINE *e);
void ENGINE_register_all_digests(void);
int ENGINE_register_complete(ENGINE *e);
int ENGINE_register_all_complete(void);
int ENGINE_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)(void));
int ENGINE_cmd_is_executable(ENGINE *e, int cmd);
int ENGINE_ctrl_cmd(ENGINE *e, const char *cmd_name,
long i, void *p, void (*f)(void), int cmd_optional);
int ENGINE_ctrl_cmd_string(ENGINE *e, const char *cmd_name, const char *arg,
int cmd_optional);
int ENGINE_set_ex_data(ENGINE *e, int idx, void *arg);
void *ENGINE_get_ex_data(const ENGINE *e, int idx);
int ENGINE_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
CRYPTO_EX_dup *dup_func, CRYPTO_EX_free *free_func);
ENGINE *ENGINE_new(void);
int ENGINE_free(ENGINE *e);
int ENGINE_up_ref(ENGINE *e);
int ENGINE_set_id(ENGINE *e, const char *id);
int ENGINE_set_name(ENGINE *e, const char *name);
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 16 / 17
GIP-CPS
OpenSSL/PKCS#11 pour CPS
Version 1.2
Spécifications techniques
int ENGINE_set_RSA(ENGINE *e, const RSA_METHOD *rsa_meth);
int ENGINE_set_DSA(ENGINE *e, const DSA_METHOD *dsa_meth);
int ENGINE_set_ECDH(ENGINE *e, const ECDH_METHOD *dh_meth);
int ENGINE_set_ECDSA(ENGINE *e, const ECDSA_METHOD *dh_meth);
int ENGINE_set_DH(ENGINE *e, const DH_METHOD *dh_meth);
int ENGINE_set_RAND(ENGINE *e, const RAND_METHOD *rand_meth);
int ENGINE_set_STORE(ENGINE *e, const STORE_METHOD *rand_meth);
int ENGINE_set_destroy_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR destroy_f);
int ENGINE_set_init_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR init_f);
int ENGINE_set_finish_function(ENGINE *e, ENGINE_GEN_INT_FUNC_PTR finish_f);
int ENGINE_set_ctrl_function(ENGINE *e, ENGINE_CTRL_FUNC_PTR ctrl_f);
int ENGINE_set_load_privkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpriv_f);
int ENGINE_set_load_pubkey_function(ENGINE *e, ENGINE_LOAD_KEY_PTR loadpub_f);
int ENGINE_set_ciphers(ENGINE *e, ENGINE_CIPHERS_PTR f);
int ENGINE_set_digests(ENGINE *e, ENGINE_DIGESTS_PTR f);
int ENGINE_set_flags(ENGINE *e, int flags);
int ENGINE_set_cmd_defns(ENGINE *e, const ENGINE_CMD_DEFN *defns);
const char *ENGINE_get_id(const ENGINE *e);
const char *ENGINE_get_name(const ENGINE *e);
const RSA_METHOD *ENGINE_get_RSA(const ENGINE *e);
const DSA_METHOD *ENGINE_get_DSA(const ENGINE *e);
const ECDH_METHOD *ENGINE_get_ECDH(const ENGINE *e);
const ECDSA_METHOD *ENGINE_get_ECDSA(const ENGINE *e);
const DH_METHOD *ENGINE_get_DH(const ENGINE *e);
const RAND_METHOD *ENGINE_get_RAND(const ENGINE *e);
const STORE_METHOD *ENGINE_get_STORE(const ENGINE *e);
ENGINE_GEN_INT_FUNC_PTR ENGINE_get_destroy_function(const ENGINE *e);
ENGINE_GEN_INT_FUNC_PTR ENGINE_get_init_function(const ENGINE *e);
ENGINE_GEN_INT_FUNC_PTR ENGINE_get_finish_function(const ENGINE *e);
ENGINE_CTRL_FUNC_PTR ENGINE_get_ctrl_function(const ENGINE *e);
ENGINE_LOAD_KEY_PTR ENGINE_get_load_privkey_function(const ENGINE *e);
ENGINE_LOAD_KEY_PTR ENGINE_get_load_pubkey_function(const ENGINE *e);
ENGINE_CIPHERS_PTR ENGINE_get_ciphers(const ENGINE *e);
ENGINE_DIGESTS_PTR ENGINE_get_digests(const ENGINE *e);
const EVP_CIPHER *ENGINE_get_cipher(ENGINE *e, int nid);
const EVP_MD *ENGINE_get_digest(ENGINE *e, int nid);
int ENGINE_get_flags(const ENGINE *e);
const ENGINE_CMD_DEFN *ENGINE_get_cmd_defns(const ENGINE *e);
EVP_PKEY *ENGINE_load_private_key(ENGINE *e, const char *key_id,
UI_METHOD *ui_method, void *callback_data);
EVP_PKEY *ENGINE_load_public_key(ENGINE *e, const char *key_id,
UI_METHOD *ui_method, void *callback_data);
void ENGINE_add_conf_module(void);
17 Janvier 2008
Documentation GIP-CPS
© GIP-CPS : Ce document est la propriété du Groupement d'intérêt Public CPS.
Il ne peut être reproduit sans autorisation écrite.
Page 17 / 17