This folder gives access to the External Libraries used by the mORMot Open Source framework, version 2.
All mormot.lib.*.pas
units define direct access to external libraries, like zlib, lizard, curl or openssl.
We define "external" libraries as some code which is statically linked or dynamically linked into your executable, as dependencies, and are not part of the mORMot framework itself and its licensing terms.
Notes:
- The mandatory libraries which are meant to be part of the Operating System - e.g. the Windows API or the
libc
/pthread
API - are defined inmormot.core.os
. - Access to the SQL database client libraries won't be in this folder, but defined as
mormot.db.raw.*
units in thesrc/db
folder.
Those mormot.lib.*.pas
units are just wrappers to the c
/stdcall
external API of the libraries. They are then encapsulated in higher level units, which are meant to be used by the framework.
For instance
mormot.lib.z.pas
/mormot.lib.openssl11
contains the raw access to thezlib
/OpenSSL
API,- whereas
mormot.core.zip.pas
/mormot.core.crypto.openssl
contains the high-leveldeflate
and.zip
file process / encryption and signing usingOpenSSL
.
On Windows, some Operating-System high-level features like Windows HTTP and WebSockets client/server API, or SSPI/SChannel API are also defined in this folder, to leverage mormot.core.os.pas
focusing on core cross-platform features.
Cross-Platform and Cross-Compiler zlib
API
- Low-Level ZLib Streaming Access
- Low-Level libdeflate in-memory Compression Library
- Simple Wrapper Functions for Deflate/ZLib Process
FPC Intel-Linux and Win32 use the faster libdeflate for in-memory compression.
Cross-Platform and Cross-Compiler Lizard
(LZ5) API
- Low-Level Lizard API Process
TAlgoLizard TAlgoLizardFast TAlgoLizardHuffman
High-Level Algorithms
Cross-Platform and Cross-Compiler libcurl
API
- CURL Low-Level Constants and Types
- CURL Functions API
Cross-Platform and Cross-Compiler OpenSSL
1.1/ 3.x API
- Dynamic or Static OpenSSL Library Loading
- OpenSSL Library Constants
- OpenSSL Library Types and Structures
- OpenSSL Library Functions
- OpenSSL Helpers
- TLS / HTTPS Encryption Layer using OpenSSL for
mormot.net.sock
/TCrtSocket
Implementation notes:
- In respect to OpenSSL 1.0.x, the new 1.1 / 3.x API hide most structures behind getter/setter functions, and doesn't require complex initialization.
- OpenSSL 1.1 features TLS 1.3, and is a LTS revision (until 2023-09-11).
- OpenSSL 3.x is also supported on some platforms (currently Windows and Linux), as the next major version.
- OpenSSL 1.1 / 3.x API adaptation is done at runtime by dynamic loading.
- The Full OpenSSL 1.1 API can be defined if
OPENSSLFULLAPI
conditional is set (untested).
Warning: on Windows, you need to define the USE_OPENSSL
conditional in YOUR project options to have this code actually link to the OpenSSL library.
Legal Notice: as stated by our LICENSE.md terms, make sure that you comply to any restriction about the use of cryptographic software in your country.
Windows HTTP and WebSockets API Libraries
WinINet
API Additional Wrappershttp.sys
/ HTTP Server API low-level direct accesswinhttp.dll
Windows API Definitionswebsocket.dll
Windows API Definitions
Security Support Provider Interface (SSPI) Support on Windows
- Low-Level SSPI/SChannel Functions
- Middle-Level SSPI Wrappers
- High-Level Client and Server Authentication using SSPI e.g. in
mormot.core.rest
- Lan Manager Access Functions
Generic Security Service API on POSIX/Linux
- Low-Level
libgssapi_krb5
/libgssapi.so
Library Access - Middle-Level GSSAPI Wrappers
- High-Level Client and Server Authentication using GSSAPI e.g. in
mormot.core.rest
Windows GDI+ Graphics Device Interface Support
- GDI+ Shared Types
- GDI+
TImageAttributes
wrapper TGdiPlus
class for Direct Access to the GDI+ Library- AntiAliased Rendering of GDI MetaFile
See mormot.ui.gdiplus.pas
for high-level LCL/VCL pictures support.
Cross-Platform and Cross-Compiler JavaScript Interpreter
- QuickJS Low-Level Constants and Types
- QuickJS Functions API
- QuickJS to Pascal Wrappers
QuickJS is a small and embeddable Javascript engine.
It supports the ES2020 specification including modules, asynchronous generators, proxies and BigInt.
We supply the engine as static binaires (no external .dll
/.so
needed), with some fixes and extensions.
Access to the 7-Zip Compression/Decompression DLL on Windows
- Low-Level 7-Zip API Definitions
I7zReader
/I7zWriter
High-Level Wrappers
Can I use the EXE or DLL files from 7-Zip in a commercial application?
Yes, but you are required to specify in documentation for your application:
- that you used parts of the 7-Zip program,
- that 7-Zip is licensed under the GNU LGPL license and
- you must give a link to www.7-zip.org, where the source code can be found.
Can I become insane because of directly calling the 7-Zip public dll API?
Yes, Igor's API is just bloated and crazy complex: the LCL unit has 10,000 lines just for basic archive work. So don't become insane and use our unit. Better be safe than sorry.