tor-browser

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

PolicyMapping.ts (4167B)


      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 ISSUER_DOMAIN_POLICY = "issuerDomainPolicy";
      9 const SUBJECT_DOMAIN_POLICY = "subjectDomainPolicy";
     10 const CLEAR_PROPS = [
     11  ISSUER_DOMAIN_POLICY,
     12  SUBJECT_DOMAIN_POLICY
     13 ];
     14 
     15 export interface IPolicyMapping {
     16  issuerDomainPolicy: string;
     17  subjectDomainPolicy: string;
     18 }
     19 
     20 export interface PolicyMappingJson {
     21  issuerDomainPolicy: string;
     22  subjectDomainPolicy: string;
     23 }
     24 
     25 export type PolicyMappingParameters = PkiObjectParameters & Partial<IPolicyMapping>;
     26 
     27 /**
     28 * Represents the PolicyMapping structure described in [RFC5280](https://datatracker.ietf.org/doc/html/rfc5280)
     29 */
     30 export class PolicyMapping extends PkiObject implements IPolicyMapping {
     31 
     32  public static override CLASS_NAME = "PolicyMapping";
     33 
     34  public issuerDomainPolicy!: string;
     35  public subjectDomainPolicy!: string;
     36 
     37  /**
     38   * Initializes a new instance of the {@link PolicyMapping} class
     39   * @param parameters Initialization parameters
     40   */
     41  constructor(parameters: PolicyMappingParameters = {}) {
     42    super();
     43 
     44    this.issuerDomainPolicy = pvutils.getParametersValue(parameters, ISSUER_DOMAIN_POLICY, PolicyMapping.defaultValues(ISSUER_DOMAIN_POLICY));
     45    this.subjectDomainPolicy = pvutils.getParametersValue(parameters, SUBJECT_DOMAIN_POLICY, PolicyMapping.defaultValues(SUBJECT_DOMAIN_POLICY));
     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 ISSUER_DOMAIN_POLICY): string;
     58  public static override defaultValues(memberName: typeof SUBJECT_DOMAIN_POLICY): string;
     59  public static override defaultValues(memberName: string): any {
     60    switch (memberName) {
     61      case ISSUER_DOMAIN_POLICY:
     62        return EMPTY_STRING;
     63      case SUBJECT_DOMAIN_POLICY:
     64        return EMPTY_STRING;
     65      default:
     66        return super.defaultValues(memberName);
     67    }
     68  }
     69 
     70  /**
     71   * @inheritdoc
     72   * @asn ASN.1 schema
     73   * ```asn
     74   * PolicyMapping ::= SEQUENCE {
     75   *    issuerDomainPolicy      CertPolicyId,
     76   *    subjectDomainPolicy     CertPolicyId }
     77   *```
     78   */
     79  public static override schema(parameters: Schema.SchemaParameters<{
     80    issuerDomainPolicy?: string;
     81    subjectDomainPolicy?: string;
     82  }> = {}): Schema.SchemaType {
     83    const names = pvutils.getParametersValue<NonNullable<typeof parameters.names>>(parameters, "names", {});
     84 
     85    return (new asn1js.Sequence({
     86      name: (names.blockName || EMPTY_STRING),
     87      value: [
     88        new asn1js.ObjectIdentifier({ name: (names.issuerDomainPolicy || EMPTY_STRING) }),
     89        new asn1js.ObjectIdentifier({ name: (names.subjectDomainPolicy || EMPTY_STRING) })
     90      ]
     91    }));
     92  }
     93 
     94  public fromSchema(schema: Schema.SchemaType): void {
     95    // Clear input data first
     96    pvutils.clearProps(schema, CLEAR_PROPS);
     97 
     98    // Check the schema is valid
     99    const asn1 = asn1js.compareSchema(schema,
    100      schema,
    101      PolicyMapping.schema({
    102        names: {
    103          issuerDomainPolicy: ISSUER_DOMAIN_POLICY,
    104          subjectDomainPolicy: SUBJECT_DOMAIN_POLICY
    105        }
    106      })
    107    );
    108    AsnError.assertSchema(asn1, this.className);
    109 
    110    // Get internal properties from parsed schema
    111    this.issuerDomainPolicy = asn1.result.issuerDomainPolicy.valueBlock.toString();
    112    this.subjectDomainPolicy = asn1.result.subjectDomainPolicy.valueBlock.toString();
    113  }
    114 
    115  public toSchema(): asn1js.Sequence {
    116    // Construct and return new ASN.1 schema for this object
    117    return (new asn1js.Sequence({
    118      value: [
    119        new asn1js.ObjectIdentifier({ value: this.issuerDomainPolicy }),
    120        new asn1js.ObjectIdentifier({ value: this.subjectDomainPolicy })
    121      ]
    122    }));
    123  }
    124 
    125  public toJSON(): PolicyMappingJson {
    126    return {
    127      issuerDomainPolicy: this.issuerDomainPolicy,
    128      subjectDomainPolicy: this.subjectDomainPolicy
    129    };
    130  }
    131 
    132 }