• Michael Paquier's avatar
    Refactor HMAC implementations · e6bdfd97
    Michael Paquier authored
    Similarly to the cryptohash implementations, this refactors the existing
    HMAC code into a single set of APIs that can be plugged with any crypto
    libraries PostgreSQL is built with (only OpenSSL currently).  If there
    is no such libraries, a fallback implementation is available.  Those new
    APIs are designed similarly to the existing cryptohash layer, so there
    is no real new design here, with the same logic around buffer bound
    checks and memory handling.
    
    HMAC has a dependency on cryptohashes, so all the cryptohash types
    supported by cryptohash{_openssl}.c can be used with HMAC.  This
    refactoring is an advantage mainly for SCRAM, that included its own
    implementation of HMAC with SHA256 without relying on the existing
    crypto libraries even if PostgreSQL was built with their support.
    
    This code has been tested on Windows and Linux, with and without
    OpenSSL, across all the versions supported on HEAD from 1.1.1 down to
    1.0.1.  I have also checked that the implementations are working fine
    using some sample results, a custom extension of my own, and doing
    cross-checks across different major versions with SCRAM with the client
    and the backend.
    
    Author: Michael Paquier
    Reviewed-by: Bruce Momjian
    Discussion: https://postgr.es/m/X9m0nkEJEzIPXjeZ@paquier.xyz
    e6bdfd97
Makefile 5.76 KB