libstrongswan

libstrongswan is the foundation library of the IKEv2 keying daemon. It is the base of all newer strongSwan components.

Plugins

libstrongswan itself also supports plugins to provide modular cryptographic algorithms, database support or transport protocol implementations. Each plugin implements the plugin_t interface and registers itself at one of the factories:

credentialsCredential implementations, e.g. certificates or keys.
cryptoCrypto implementations, e.g. encryption algorithms or hashers.
databaseDatabase wrappers to access different databases transparently.
fetcherTransport helpers to fetch files, e.g. via HTTP/FTP.
  +-------------------------------------+
  | libstrongswan           +---+ +-----+------+
  |                         |   | |    aes     |
  |                         |   | +-----+------+
  | +-------------+         |   | +-----+------+
  | | credentials |  ---->  | p | |    curl    |
  | +-------------+         | l | +-----+------+
  | +-------------+  <----  | u | +-----+------+
  | | crypto      |         | g | |    des     |
  | +-------------+  ---->  | i | +-----+------+
  | +-------------+         | n | +-----+------+
  | | database    |  <----  |   | |  fips_prf  |
  | +-------------+         | l | +-----+------+
  | +-------------+  ---->  | o | +-----+------+
  | | fetcher     |         | a | |    gmp     |
  | +-------------+  <----  | d | +-----+------+
  |                         | e | +-----+------+
  |                         | r | |    hmac    |
  |                         |   | +-----+------+
  |                         |   | +-----+------+
  |                         |   | |    ...     |
  |                         +---+ +-----+------+
  +-------------------------------------+

Currently libstrongswan ships with the following plugins:

aesAES-128/192/256 implementation in software, non-US code.
desSingle- and Triple-DES implementation in software, non-US code.
md5MD5 hasher software implementation.
sha1SHA1 hasher software implementation.
sha2SHA-256/384/512 hasher software implementation.
hmacHMAC implementation to prived MAC/PRF functionality using hashers.
xcbcXCBC implementation to prived MAC/PRF functionality using crypters.
fips_prfPseudo random function implementing the FIPS PRF function.
gmpImplementation of RSA private/public keys using the GNU Multi Precision library libgmp.
x509Implementation of X509 certificates, CRLs, OCSP and attribute certificates.
pubkeyGeneric public key loader plugin.
opensslWrapper to use OpenSSL to provide crypto services.
padlockExperimental plugin to provide hardware accelerated AES/SHA1 on VIA padlock.
randomSource of random data implemented on top of /dev/(u)random.
mysqlDatabase wrapper to access MySQL databases, uses libmysqlcleint_r.
sqliteDatabase wrapper to access SQLite databases, uses libsqlite3.
curlFetching of HTTP and other URLs using libcurl.
ldapFetching from LDAP servers using OpenLDAP.