00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029 #ifndef header_crypto_setup
00030 #define header_crypto_setup
00031
00032 #include <prio.h>
00033 #include <certt.h>
00034 #include <keyt.h>
00035
00036 class CL_Certificate;
00037 class CL_PrivateKey;
00038
00039 class PK11PasswordHandler
00040 {
00041 public:
00042 virtual ~PK11PasswordHandler() { return; }
00043 virtual bool get_password(PK11SlotInfo *slot, bool retry, CL_String &out_password)=0;
00044 };
00045
00046 class PK11PasswordHandler_Password : public PK11PasswordHandler
00047 {
00048 public:
00049 PK11PasswordHandler_Password(const CL_String &password) : password(password) { return; }
00050 virtual bool get_password(PK11SlotInfo *slot, bool retry, CL_String &out_password)
00051 {
00052 if (retry)
00053 return false;
00054 out_password = password;
00055 return true;
00056 }
00057 CL_String password;
00058 };
00059
00060 class CL_CryptoSetup
00061 {
00063 public:
00064 CL_CryptoSetup(const CL_String &config_dir, bool read_write = false);
00065
00066 ~CL_CryptoSetup();
00067
00069 public:
00070
00072 public:
00073 void config_server_sid_cache(
00074 int max_cache_entries = 256,
00075 unsigned int timeout = 0,
00076 unsigned int ssl3_timeout = 0,
00077 const CL_String &directory = CL_String());
00078
00079 CL_Certificate find_cert_from_nickname(
00080 const CL_String &nickname,
00081 PK11PasswordHandler *pw_handler);
00082
00083 CL_Certificate find_cert_from_nickname(
00084 const CL_String &nickname,
00085 const CL_String &password = CL_String());
00086
00087 CL_PrivateKey find_key_by_any_cert(
00088 const CL_Certificate &cert,
00089 PK11PasswordHandler *pw_handler);
00090
00092 private:
00093 static CL_CryptoSetup *instance;
00094
00095 static char *pk11_password_func(PK11SlotInfo *slot, PRBool retry, void *arg);
00096 };
00097
00098 #endif