ya-express-ntlm
Version:
51 lines (43 loc) • 1.28 kB
text/typescript
import { AbstractParser } from './AbstractParser';
import {
getFlags,
getOSVersionStructure,
getSecBuf,
getSecBufData,
} from './parser-utils';
import { NTLMMessageType, NTLMType1 } from './parser-interfaces';
import { ntlmFlags } from './flags';
export class NTLMType1Parser extends AbstractParser {
// eslint-disable-next-line no-useless-constructor
constructor (buffer: ArrayBuffer) {
super(buffer);
}
parse (): NTLMType1 {
const flag = new Uint32Array(this.buffer.slice(12, 16))[0];
const result: NTLMType1 = {
messageType: NTLMMessageType.NEGOTIATE_MESSAGE,
flags: getFlags(ntlmFlags, flag),
};
if (this.buffer.byteLength === 16) {
// NTLM version 1.
return result;
}
result.suppliedDomain = getSecBuf(this.buffer, 16);
result.suppliedWorkstation = getSecBuf(this.buffer, 24);
if (result.suppliedDomain.offset !== 32) {
// NTLM version 3: OS Version structure.
result.osVersionStructure = getOSVersionStructure(this.buffer, 32);
}
result.domain = getSecBufData(
this.buffer,
result.suppliedDomain,
'ascii',
);
result.workstation = getSecBufData(
this.buffer,
result.suppliedWorkstation,
'ascii',
);
return result;
}
}