The Netscape svrcore library

Terry Hayes wrote the Netscape svrcore library in 1998.
Valerie Chu wrote the ntgetpin.c and related files.

William Brown wrote systemd integration and related parts.

svrcore used to contain two major parts.

The first part is what we released on mozilla.  It is a kind of
object-oriented package for handling PIN requests from NSS. The
idea was to provide a standard way for servers to allow PIN input
from a file or from the terminal.  There is also a PIN handler
that caches the PIN in memory after encrypting it with a key on
a device (such as a Fortezza card). This allowed a server to
restart without having to reenter the PIN. However since the PIN
is encrypted, a core dump would not expose it.  In addition,
removing the device would also make the PIN inaccessible.

The files are:

svrcore.h - API definition
alt.c - allows two possible PIN request methods to be used (say
        file and then terminal)
cache.c - caches the result from another PIN request method
errors.c - error text
file.c - reads the PIN from a specified file
ntgetpin.c - Windows version of a user prompt for PIN
ntgetpin.rc - Windows resource script for ntgetpin.c
ntresource.h - a generated include file used by ntgetpin.rc
key.ico - an icon used by ntgetpin.rc
logo.ico - an icon used by ntgetpin.rc
pin.c - functions to register a PIN request object with NSS
pk11.c - implementation of the encrypted in-memory caching
std.c - a "standard" PIN object that satisfies requests from a
        file or the terminal and allows caching if desired.
std-systemd.c - a "standard" PIN object that satisfies requests from a
        file or the terminal, or systemd-ask-pass, and allows caching 
        if desired.
systemd-ask-pass.c - a PIN object that can request pins from the systemd
        ask password api.
user.c - prompts the user for the PIN

Note: the pk11.c file (secure PIN store) is a pretty good example
of how to encrypt/decrypt with NSS.

There was a second component of svrcore that handled export policy
configuration.  It allowed patching of a single executable (single
program build) to create the export and domestic versions of a
server.  This code was discontinued after the export policy changes.

The LDAP C SDK tools use svrcore.  They also implemented their
own PIN object to allow command line PIN entry.  The directory
server also implemented its own PIN object to allow a watchdog
process to cache the PIN and restart the server.

See INSTALL for build instructions
See INSTALL.win for Windows build instructions
