tor-browser

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

CAVersion.ts (5061B)


      1 import * as asn1js from "asn1js";
      2 import * as pvutils from "pvutils";
      3 import { PkiObject, PkiObjectParameters } from "./PkiObject";
      4 import * as Schema from "./Schema";
      5 
      6 const CERTIFICATE_INDEX = "certificateIndex";
      7 const KEY_INDEX = "keyIndex";
      8 
      9 export interface ICAVersion {
     10  certificateIndex: number;
     11  keyIndex: number;
     12 }
     13 
     14 export type CAVersionParameters = PkiObjectParameters & Partial<ICAVersion>;
     15 
     16 export interface CAVersionJson {
     17  certificateIndex: number;
     18  keyIndex: number;
     19 }
     20 
     21 /**
     22 * Represents an CAVersion described in [Certification Authority Renewal](https://docs.microsoft.com/en-us/windows/desktop/seccrypto/certification-authority-renewal)
     23 */
     24 export class CAVersion extends PkiObject implements ICAVersion {
     25 
     26  public static override CLASS_NAME = "CAVersion";
     27 
     28  public certificateIndex!: number;
     29  public keyIndex!: number;
     30 
     31  /**
     32   * Initializes a new instance of the {@link CAVersion} class
     33   * @param parameters Initialization parameters
     34   */
     35  constructor(parameters: CAVersionParameters = {}) {
     36    super();
     37 
     38    this.certificateIndex = pvutils.getParametersValue(parameters, CERTIFICATE_INDEX, CAVersion.defaultValues(CERTIFICATE_INDEX));
     39    this.keyIndex = pvutils.getParametersValue(parameters, KEY_INDEX, CAVersion.defaultValues(KEY_INDEX));
     40 
     41    if (parameters.schema) {
     42      this.fromSchema(parameters.schema);
     43    }
     44  }
     45 
     46  /**
     47   * Returns default values for all class members
     48   * @param memberName String name for a class member
     49   * @returns Default value
     50   */
     51  public static override defaultValues(memberName: typeof CERTIFICATE_INDEX): number;
     52  public static override defaultValues(memberName: typeof KEY_INDEX): number;
     53  public static override defaultValues(memberName: string): any {
     54    switch (memberName) {
     55      case CERTIFICATE_INDEX:
     56      case KEY_INDEX:
     57        return 0;
     58      default:
     59        return super.defaultValues(memberName);
     60    }
     61  }
     62 
     63  /**
     64   * @inheritdoc
     65   * @asn ASN.1 schema
     66   * ```asn
     67   * CAVersion ::= INTEGER
     68   *```
     69   */
     70  public static override schema(): Schema.SchemaType {
     71    return (new asn1js.Integer());
     72  }
     73 
     74  public fromSchema(schema: Schema.SchemaType) {
     75    //#region Check the schema is valid
     76    if (schema.constructor.blockName() !== asn1js.Integer.blockName()) {
     77      throw new Error("Object's schema was not verified against input data for CAVersion");
     78    }
     79    //#endregion
     80 
     81    //#region Check length of the input value and correct it if needed
     82    let value = schema.valueBlock.valueHex.slice(0);
     83    const valueView = new Uint8Array(value);
     84 
     85    switch (true) {
     86      case (value.byteLength < 4):
     87        {
     88          const tempValue = new ArrayBuffer(4);
     89          const tempValueView = new Uint8Array(tempValue);
     90 
     91          tempValueView.set(valueView, 4 - value.byteLength);
     92 
     93          value = tempValue.slice(0);
     94        }
     95        break;
     96      case (value.byteLength > 4):
     97        {
     98          const tempValue = new ArrayBuffer(4);
     99          const tempValueView = new Uint8Array(tempValue);
    100 
    101          tempValueView.set(valueView.slice(0, 4));
    102 
    103          value = tempValue.slice(0);
    104        }
    105        break;
    106      default:
    107    }
    108    //#endregion
    109 
    110    //#region Get internal properties from parsed schema
    111    const keyIndexBuffer = value.slice(0, 2);
    112    const keyIndexView8 = new Uint8Array(keyIndexBuffer);
    113    let temp = keyIndexView8[0];
    114    keyIndexView8[0] = keyIndexView8[1];
    115    keyIndexView8[1] = temp;
    116 
    117    const keyIndexView16 = new Uint16Array(keyIndexBuffer);
    118 
    119    this.keyIndex = keyIndexView16[0];
    120 
    121    const certificateIndexBuffer = value.slice(2);
    122    const certificateIndexView8 = new Uint8Array(certificateIndexBuffer);
    123    temp = certificateIndexView8[0];
    124    certificateIndexView8[0] = certificateIndexView8[1];
    125    certificateIndexView8[1] = temp;
    126 
    127    const certificateIndexView16 = new Uint16Array(certificateIndexBuffer);
    128 
    129    this.certificateIndex = certificateIndexView16[0];
    130    //#endregion
    131  }
    132 
    133  public toSchema(): asn1js.Integer {
    134    //#region Create raw values
    135    const certificateIndexBuffer = new ArrayBuffer(2);
    136    const certificateIndexView = new Uint16Array(certificateIndexBuffer);
    137 
    138    certificateIndexView[0] = this.certificateIndex;
    139 
    140    const certificateIndexView8 = new Uint8Array(certificateIndexBuffer);
    141    let temp = certificateIndexView8[0];
    142    certificateIndexView8[0] = certificateIndexView8[1];
    143    certificateIndexView8[1] = temp;
    144 
    145    const keyIndexBuffer = new ArrayBuffer(2);
    146    const keyIndexView = new Uint16Array(keyIndexBuffer);
    147 
    148    keyIndexView[0] = this.keyIndex;
    149 
    150    const keyIndexView8 = new Uint8Array(keyIndexBuffer);
    151    temp = keyIndexView8[0];
    152    keyIndexView8[0] = keyIndexView8[1];
    153    keyIndexView8[1] = temp;
    154    //#endregion
    155 
    156    //#region Construct and return new ASN.1 schema for this object
    157    return (new asn1js.Integer({
    158      valueHex: pvutils.utilConcatBuf(keyIndexBuffer, certificateIndexBuffer)
    159    }));
    160    //#endregion
    161  }
    162 
    163  public toJSON(): CAVersionJson {
    164    return {
    165      certificateIndex: this.certificateIndex,
    166      keyIndex: this.keyIndex
    167    };
    168  }
    169 
    170 }