-
Deucе authored
Private key objects in cryptlib are not copied into sessions when they're added, only the refcount is incremented. These objects contain a bignum context, which therefore ends up shared across all instances of the private key. Unfortunately, the locking is on the session context, not the private key objects, so shared bignum contexts can cause memory corruption. Further, even if the locking issue was fixed, the performance handbrake would still exists... activating sessions that use the same private key would be serialized, with the results we've been seeing lately. With this, each session gets a unique private key, which is loaded from the file. When a session is finished with the key, it is cached in a list with an epoch, so when the date on the key file changes, old private keys will be eliminated. While this solves a lot of issues, logging of certificate generation and loading issues has regressed to the point where it's effectively not done at all. Logging was previously passed back to the caller, but given the much longer call chain to get to where a cert is created, the extra parameters was just too much. Something better should be done here at some point.
Deucе authoredPrivate key objects in cryptlib are not copied into sessions when they're added, only the refcount is incremented. These objects contain a bignum context, which therefore ends up shared across all instances of the private key. Unfortunately, the locking is on the session context, not the private key objects, so shared bignum contexts can cause memory corruption. Further, even if the locking issue was fixed, the performance handbrake would still exists... activating sessions that use the same private key would be serialized, with the results we've been seeing lately. With this, each session gets a unique private key, which is loaded from the file. When a session is finished with the key, it is cached in a list with an epoch, so when the date on the key file changes, old private keys will be eliminated. While this solves a lot of issues, logging of certificate generation and loading issues has regressed to the point where it's effectively not done at all. Logging was previously passed back to the caller, but given the much longer call chain to get to where a cert is created, the extra parameters was just too much. Something better should be done here at some point.