First commit
This commit is contained in:
61
node_modules/@ldapjs/dn/lib/utils/parse-string/read-hex-string.js
generated
vendored
Normal file
61
node_modules/@ldapjs/dn/lib/utils/parse-string/read-hex-string.js
generated
vendored
Normal file
@ -0,0 +1,61 @@
|
||||
'use strict'
|
||||
|
||||
const { BerReader } = require('@ldapjs/asn1')
|
||||
|
||||
const isValidHexCode = code => /[0-9a-fA-F]{2}/.test(code) === true
|
||||
|
||||
/**
|
||||
* @typedef {object} ReadHexStringResult
|
||||
* @property {number} endPos The position in the buffer where the end of the
|
||||
* hex string was encountered.
|
||||
* @property {import('@ldapjs/asn1').BerReader} berReader The parsed hex string
|
||||
* as an BER object.
|
||||
*/
|
||||
|
||||
/**
|
||||
* Read a sequence of bytes as a hex encoded octet string. The sequence is
|
||||
* assumed to be a spec compliant encoded BER object.
|
||||
*
|
||||
* @param {Buffer} searchBuffer The buffer to read.
|
||||
* @param {number} startPos The position in the buffer to start reading from.
|
||||
*
|
||||
* @returns {ReadHexStringResult}
|
||||
*
|
||||
* @throws When an invalid hex pair has been encountered.
|
||||
*/
|
||||
module.exports = function readHexString ({ searchBuffer, startPos }) {
|
||||
const bytes = []
|
||||
|
||||
let pos = startPos
|
||||
while (pos < searchBuffer.byteLength) {
|
||||
if (isEndChar(searchBuffer[pos])) {
|
||||
break
|
||||
}
|
||||
|
||||
const hexPair = String.fromCharCode(searchBuffer[pos]) +
|
||||
String.fromCharCode(searchBuffer[pos + 1])
|
||||
if (isValidHexCode(hexPair) === false) {
|
||||
throw Error('invalid hex pair encountered: 0x' + hexPair)
|
||||
}
|
||||
|
||||
bytes.push(parseInt(hexPair, 16))
|
||||
pos += 2
|
||||
}
|
||||
|
||||
return {
|
||||
endPos: pos,
|
||||
berReader: new BerReader(Buffer.from(bytes))
|
||||
}
|
||||
}
|
||||
|
||||
function isEndChar (c) {
|
||||
switch (c) {
|
||||
case 0x20: // space
|
||||
case 0x2b: // +
|
||||
case 0x2c: // ,
|
||||
case 0x3b: // ;
|
||||
return true
|
||||
default:
|
||||
return false
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user