On Sat, Jan 08, 2022 at 08:12:50AM -0800, Adrian Klaver wrote:
> On 1/8/22 05:21, Ali Koca wrote:
>> I can't understand functions in md5.h, these are seemingly little bit
>> weird. Such as:
>> /* Utilities common to all the MD5 implementations,
>> as of md5_common.c */
>> extern bool pg_md5_hash(const void *buff, size_t len, char *hexsum);
>> extern bool pg_md5_binary(const void *buff, size_t len, void *outbuf);
>> extern bool pg_md5_encrypt(const char *passwd, const char *salt,
>> size_t salt_len, char *buf);
>
> What they do is explained in md5_common.c.
pg_md5_hash() and pg_md5_binary() do the same thing, by computing a
MD5. pg_md5_hash() computes it as a string in hex format, meaning
that it is 33-character long with the final trailing '\0'.
pg_md5_binary() computes 16 raw bytes.
pg_md5_encrypt() is a utility wrapper that does the operation of
pg_md5_hash() based on a password and a salt, used at authentication
time for MD5. Its result is a 36-byte long string, prefixed with
"md5" and a 33-byte long hex string. Those routine names are
historic.
--
Michael