mtcute/packages/core/src/utils/buffer-utils.ts

63 lines
1.4 KiB
TypeScript
Raw Normal View History

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)
2021-04-08 12:19:38 +03:00
return ret
}
2022-08-29 16:22:57 +03:00
/**
* Parse url-safe base64 string
*
* @param str String to parse
*/
export function parseUrlSafeBase64(str: string): Buffer {
2022-08-29 16:22:57 +03:00
if (b64urlAvailable) {
return Buffer.from(str, 'base64url')
}
str = str.replace(/-/g, '+').replace(/_/g, '/')
while (str.length % 4) str += '='
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
*/
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, '')
}