| 12345678910111213141516171819202122232425262728293031323334353637 | 'use strict'// This file contains crypto utility functions for versions of Node.js < 15.0.0,// which does not support the WebCrypto.subtle API.const nodeCrypto = require('crypto')function md5(string) {  return nodeCrypto.createHash('md5').update(string, 'utf-8').digest('hex')}// See AuthenticationMD5Password at https://www.postgresql.org/docs/current/static/protocol-flow.htmlfunction postgresMd5PasswordHash(user, password, salt) {  var inner = md5(password + user)  var outer = md5(Buffer.concat([Buffer.from(inner), salt]))  return 'md5' + outer}function sha256(text) {  return nodeCrypto.createHash('sha256').update(text).digest()}function hmacSha256(key, msg) {  return nodeCrypto.createHmac('sha256', key).update(msg).digest()}async function deriveKey(password, salt, iterations) {  return nodeCrypto.pbkdf2Sync(password, salt, iterations, 32, 'sha256')}module.exports = {  postgresMd5PasswordHash,  randomBytes: nodeCrypto.randomBytes,  deriveKey,  sha256,  hmacSha256,  md5,}
 |