tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

PolicyQualifierInfo.ts (4150B)


      1 import * as asn1js from "asn1js";
      2 import * as pvutils from "pvutils";
      3 import { EMPTY_STRING } from "./constants";
      4 import { AsnError } from "./errors";
      5 import { PkiObject, PkiObjectParameters } from "./PkiObject";
      6 import * as Schema from "./Schema";
      7 
      8 const POLICY_QUALIFIER_ID = "policyQualifierId";
      9 const QUALIFIER = "qualifier";
     10 const CLEAR_PROPS = [
     11  POLICY_QUALIFIER_ID,
     12  QUALIFIER
     13 ];
     14 
     15 export interface IPolicyQualifierInfo {
     16  policyQualifierId: string;
     17  qualifier: Schema.SchemaType;
     18 }
     19 
     20 export type PolicyQualifierInfoParameters = PkiObjectParameters & Partial<IPolicyQualifierInfo>;
     21 
     22 export interface PolicyQualifierInfoJson {
     23  policyQualifierId: string;
     24  qualifier: any;
     25 }
     26 
     27 /**
     28 * Represents the PolicyQualifierInfo structure described in [RFC5280](https://datatracker.ietf.org/doc/html/rfc5280)
     29 */
     30 export class PolicyQualifierInfo extends PkiObject implements IPolicyQualifierInfo {
     31 
     32  public static override CLASS_NAME = "PolicyQualifierInfo";
     33 
     34  public policyQualifierId!: string;
     35  public qualifier: Schema.SchemaType;
     36 
     37  /**
     38   * Initializes a new instance of the {@link PolicyQualifierInfo} class
     39   * @param parameters Initialization parameters
     40   */
     41  constructor(parameters: PolicyQualifierInfoParameters = {}) {
     42    super();
     43 
     44    this.policyQualifierId = pvutils.getParametersValue(parameters, POLICY_QUALIFIER_ID, PolicyQualifierInfo.defaultValues(POLICY_QUALIFIER_ID));
     45    this.qualifier = pvutils.getParametersValue(parameters, QUALIFIER, PolicyQualifierInfo.defaultValues(QUALIFIER));
     46 
     47    if (parameters.schema) {
     48      this.fromSchema(parameters.schema);
     49    }
     50  }
     51 
     52  /**
     53   * Returns default values for all class members
     54   * @param memberName String name for a class member
     55   * @returns Default value
     56   */
     57  public static override defaultValues(memberName: typeof POLICY_QUALIFIER_ID): string;
     58  public static override defaultValues(memberName: typeof QUALIFIER): asn1js.Any;
     59  public static override defaultValues(memberName: string): any {
     60    switch (memberName) {
     61      case POLICY_QUALIFIER_ID:
     62        return EMPTY_STRING;
     63      case QUALIFIER:
     64        return new asn1js.Any();
     65      default:
     66        return super.defaultValues(memberName);
     67    }
     68  }
     69 
     70  /**
     71   * @inheritdoc
     72   * @asn ASN.1 schema
     73   * ```asn
     74   * PolicyQualifierInfo ::= SEQUENCE {
     75   *    policyQualifierId  PolicyQualifierId,
     76   *    qualifier          ANY DEFINED BY policyQualifierId }
     77   *
     78   * id-qt          OBJECT IDENTIFIER ::= { id-pkix 2 }
     79   * id-qt-cps      OBJECT IDENTIFIER ::= { id-qt 1 }
     80   * id-qt-unotice  OBJECT IDENTIFIER ::= { id-qt 2 }
     81   *
     82   * PolicyQualifierId ::= OBJECT IDENTIFIER ( id-qt-cps | id-qt-unotice )
     83   *```
     84   */
     85  static override schema(parameters: Schema.SchemaParameters<{ policyQualifierId?: string; qualifier?: string; }> = {}) {
     86    const names = pvutils.getParametersValue<NonNullable<typeof parameters.names>>(parameters, "names", {});
     87 
     88    return (new asn1js.Sequence({
     89      name: (names.blockName || EMPTY_STRING),
     90      value: [
     91        new asn1js.ObjectIdentifier({ name: (names.policyQualifierId || EMPTY_STRING) }),
     92        new asn1js.Any({ name: (names.qualifier || EMPTY_STRING) })
     93      ]
     94    }));
     95  }
     96 
     97  public fromSchema(schema: Schema.SchemaType): void {
     98    // Clear input data first
     99    pvutils.clearProps(schema, CLEAR_PROPS);
    100 
    101    // Check the schema is valid
    102    const asn1 = asn1js.compareSchema(schema,
    103      schema,
    104      PolicyQualifierInfo.schema({
    105        names: {
    106          policyQualifierId: POLICY_QUALIFIER_ID,
    107          qualifier: QUALIFIER
    108        }
    109      })
    110    );
    111    AsnError.assertSchema(asn1, this.className);
    112 
    113    // Get internal properties from parsed schema
    114    this.policyQualifierId = asn1.result.policyQualifierId.valueBlock.toString();
    115    this.qualifier = asn1.result.qualifier;
    116  }
    117 
    118  public toSchema(): asn1js.Sequence {
    119    return (new asn1js.Sequence({
    120      value: [
    121        new asn1js.ObjectIdentifier({ value: this.policyQualifierId }),
    122        this.qualifier
    123      ]
    124    }));
    125  }
    126 
    127  public toJSON(): PolicyQualifierInfoJson {
    128    return {
    129      policyQualifierId: this.policyQualifierId,
    130      qualifier: this.qualifier.toJSON()
    131    };
    132  }
    133 
    134 }