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.html
- function 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,
- }
|