2023-10-09 05:59:48 +03:00
|
|
|
export { _randomBytes as randomBytes } from './platform/random'
|
2021-04-08 12:19:38 +03:00
|
|
|
|
2022-08-29 16:22:57 +03:00
|
|
|
const b64urlAvailable = Buffer.isEncoding('base64url')
|
|
|
|
|
|
|
|
/**
|
|
|
|
* Check if two buffers are equal
|
|
|
|
*
|
|
|
|
* @param a First buffer
|
|
|
|
* @param b Second buffer
|
|
|
|
*/
|
2021-04-08 12:19:38 +03:00
|
|
|
export function buffersEqual(a: Buffer, b: Buffer): boolean {
|
|
|
|
if (a.length !== b.length) return false
|
|
|
|
|
|
|
|
for (let i = 0; i < a.length; i++) {
|
|
|
|
if (a[i] !== b[i]) return false
|
|
|
|
}
|
|
|
|
|
|
|
|
return true
|
|
|
|
}
|
|
|
|
|
2022-08-29 16:22:57 +03:00
|
|
|
/**
|
|
|
|
* Copy a buffer
|
|
|
|
*
|
|
|
|
* @param buf Buffer to copy
|
|
|
|
* @param start Start offset
|
|
|
|
* @param end End offset
|
|
|
|
*/
|
2021-04-08 12:19:38 +03:00
|
|
|
export function cloneBuffer(buf: Buffer, start = 0, end = buf.length): Buffer {
|
|
|
|
const ret = Buffer.alloc(end - start)
|
|
|
|
buf.copy(ret, 0, start, end)
|
2023-06-05 03:30:48 +03:00
|
|
|
|
2021-04-08 12:19:38 +03:00
|
|
|
return ret
|
|
|
|
}
|
2021-05-23 20:33:10 +03:00
|
|
|
|
2022-08-29 16:22:57 +03:00
|
|
|
/**
|
|
|
|
* Parse url-safe base64 string
|
|
|
|
*
|
|
|
|
* @param str String to parse
|
|
|
|
*/
|
2021-05-23 20:33:10 +03:00
|
|
|
export function parseUrlSafeBase64(str: string): Buffer {
|
2022-08-29 16:22:57 +03:00
|
|
|
if (b64urlAvailable) {
|
|
|
|
return Buffer.from(str, 'base64url')
|
|
|
|
}
|
|
|
|
|
2021-05-23 20:33:10 +03:00
|
|
|
str = str.replace(/-/g, '+').replace(/_/g, '/')
|
|
|
|
while (str.length % 4) str += '='
|
2023-06-05 03:30:48 +03:00
|
|
|
|
2021-05-23 20:33:10 +03:00
|
|
|
return Buffer.from(str, 'base64')
|
|
|
|
}
|
|
|
|
|
2022-08-29 16:22:57 +03:00
|
|
|
/**
|
|
|
|
* Convert a buffer to url-safe base64 string
|
|
|
|
*
|
|
|
|
* @param buf Buffer to convert
|
|
|
|
*/
|
2021-05-23 20:33:10 +03:00
|
|
|
export function encodeUrlSafeBase64(buf: Buffer): string {
|
2022-08-29 16:22:57 +03:00
|
|
|
if (b64urlAvailable) {
|
|
|
|
return buf.toString('base64url')
|
|
|
|
}
|
|
|
|
|
2023-09-24 01:32:22 +03:00
|
|
|
return buf.toString('base64').replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/g, '')
|
2021-05-23 20:33:10 +03:00
|
|
|
}
|