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 #pragma once
00030
00033
00034 #include <prio.h>
00035 #include <certt.h>
00036 #include <keyt.h>
00037
00038 class CL_Certificate;
00039 class CL_PrivateKey;
00040
00044 class PK11PasswordHandler
00045 {
00046 public:
00047 virtual ~PK11PasswordHandler() { return; }
00048
00056 virtual bool get_password(PK11SlotInfo *slot, bool retry, CL_String &out_password)=0;
00057 };
00058
00062 class PK11PasswordHandler_Password : public PK11PasswordHandler
00063 {
00064 public:
00065 PK11PasswordHandler_Password(const CL_String &password) : password(password) { return; }
00066
00074 virtual bool get_password(PK11SlotInfo *slot, bool retry, CL_String &out_password)
00075 {
00076 if (retry)
00077 return false;
00078 out_password = password;
00079 return true;
00080 }
00081 CL_String password;
00082 };
00083
00087 class CL_CryptoSetup
00088 {
00091
00092 public:
00093
00098 CL_CryptoSetup(const CL_String &config_dir, bool read_write = false);
00099
00100 ~CL_CryptoSetup();
00101
00105
00106 public:
00107
00111
00112 public:
00113 void config_server_sid_cache(
00114 int max_cache_entries = 256,
00115 unsigned int timeout = 0,
00116 unsigned int ssl3_timeout = 0,
00117 const CL_String &directory = CL_String());
00118
00119 CL_Certificate find_cert_from_nickname(
00120 const CL_String &nickname,
00121 PK11PasswordHandler *pw_handler);
00122
00123 CL_Certificate find_cert_from_nickname(
00124 const CL_String &nickname,
00125 const CL_String &password = CL_String());
00126
00127 CL_PrivateKey find_key_by_any_cert(
00128 const CL_Certificate &cert,
00129 PK11PasswordHandler *pw_handler);
00130
00134
00135 private:
00136 static CL_CryptoSetup *instance;
00137
00145 static char *pk11_password_func(PK11SlotInfo *slot, PRBool retry, void *arg);
00147 };
00148