All files / src/sso kerberos.ts

33.33% Statements 6/18
0% Branches 0/2
0% Functions 0/3
33.33% Lines 6/18

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 401x 1x 1x 1x             1x                                 1x                        
import { ASN1 } from '@jlguenego/asn.1';
import { inspect } from 'util';
import { ASN1MsgUtils } from '@jlguenego/asn.1/build/src/ASN1MsgUtils';
import { EncodingRule } from '@jlguenego/asn.1/build/src/EncodingRule';
 
interface KrbApReq {
  principalName: string;
  realm: string;
}
 
export function getKerberosDetails(buffer: ArrayBuffer) {
  const message = ASN1.parseMsg(buffer, {
    encodingRule: EncodingRule.DER,
  });
  const array = ASN1MsgUtils.queryAll(message, 'tagLabel', 'GeneralString');
  const principalName = array
    .map((m) => m.value)
    .slice(1)
    .join('/');
  const realm = array[0].value as string;
  const result: KrbApReq = {
    principalName,
    realm,
  };
  return result;
}
 
export function getKerberosResponseDetails(buffer: ArrayBuffer) {
  const message = ASN1.parseMsg(buffer, {
    encodingRule: EncodingRule.DER,
  });
  const msgId = ASN1MsgUtils.query(message, 'tagLabel', '15');
  if (msgId) {
    return 'Regular KRB_AP_REP message';
  }
  return (
    'probably an GSS-API KRB_ERROR message: ' + inspect(message, false, null)
  );
}