15 #include "prcKeyRegistry.h"
16 #include "config_prc.h"
24 #include "openssl/pem.h"
26 PrcKeyRegistry *PrcKeyRegistry::_global_ptr = NULL;
46 <<
"Internal error--PrcKeyRegistry destructor called!\n";
62 record_keys(
const KeyDef *key_def,
int num_keys) {
63 for (
int i = 0; i < num_keys; i++) {
64 const KeyDef *def = &key_def[i];
65 if (def->_data != (
char *)NULL) {
67 while ((
int)_keys.size() <= i) {
71 key._generated_time = 0;
74 if (_keys[i]._def != def) {
75 if (_keys[i]._pkey != (EVP_PKEY *)NULL) {
76 EVP_PKEY_free(_keys[i]._pkey);
77 _keys[i]._pkey = NULL;
80 _keys[i]._generated_time = def->_generated_time;
96 set_key(
int n, EVP_PKEY *pkey, time_t generated_time) {
98 while ((
int)_keys.size() <= n) {
102 key._generated_time = 0;
103 _keys.push_back(key);
105 _keys[n]._def = NULL;
106 if (_keys[n]._pkey != (EVP_PKEY *)NULL) {
107 EVP_PKEY_free(_keys[n]._pkey);
108 _keys[n]._pkey = NULL;
110 _keys[n]._pkey = pkey;
111 _keys[n]._generated_time = generated_time;
123 get_num_keys()
const {
133 EVP_PKEY *PrcKeyRegistry::
134 get_key(
int n)
const {
135 nassertr(n >= 0 && n < (
int)_keys.size(), (EVP_PKEY *)NULL);
137 if (_keys[n]._def != (KeyDef *)NULL) {
138 if (_keys[n]._pkey == (EVP_PKEY *)NULL) {
140 const KeyDef *def = _keys[n]._def;
141 BIO *mbio = BIO_new_mem_buf((
void *)def->_data, def->_length);
142 EVP_PKEY *pkey = PEM_read_bio_PUBKEY(mbio, NULL, NULL, NULL);
143 ((PrcKeyRegistry *)
this)->_keys[n]._pkey = pkey;
146 if (pkey == (EVP_PKEY *)NULL) {
148 ((PrcKeyRegistry *)
this)->_keys[n]._def = NULL;
153 return _keys[n]._pkey;
162 time_t PrcKeyRegistry::
163 get_generated_time(
int n)
const {
164 nassertr(n >= 0 && n < (
int)_keys.size(), 0);
166 return _keys[n]._generated_time;
174 PrcKeyRegistry *PrcKeyRegistry::
176 if (_global_ptr == (PrcKeyRegistry *)NULL) {
177 _global_ptr =
new PrcKeyRegistry;
182 #endif // HAVE_OPENSSL