PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/avalanche/src/common

Просмотр файла: credentials.ts

/**
 * @packageDocumentation
 * @module Common-Signature
 */
import { NBytes } from "./nbytes"
import { Buffer } from "buffer/"
import BinTools from "../utils/bintools"
import {
  Serializable,
  Serialization,
  SerializedEncoding
} from "../utils/serialization"

/**
 * @ignore
 */
const bintools: BinTools = BinTools.getInstance()
const serialization: Serialization = Serialization.getInstance()

/**
 * Type representing a [[Signature]] index used in [[Input]]
 */
export class SigIdx extends NBytes {
  protected _typeName = "SigIdx"
  protected _typeID = undefined

  serialize(encoding: SerializedEncoding = "hex"): object {
    let fields: object = super.serialize(encoding)
    return {
      ...fields,
      source: serialization.encoder(this.source, encoding, "Buffer", "hex")
    }
  }
  deserialize(fields: object, encoding: SerializedEncoding = "hex") {
    super.deserialize(fields, encoding)
    this.source = serialization.decoder(
      fields["source"],
      encoding,
      "hex",
      "Buffer"
    )
  }

  protected source: Buffer = Buffer.alloc(20)
  protected bytes = Buffer.alloc(4)
  protected bsize = 4

  /**
   * Sets the source address for the signature
   */
  setSource = (address: Buffer) => {
    this.source = address
  }

  /**
   * Retrieves the source address for the signature
   */
  getSource = (): Buffer => this.source

  clone(): this {
    let newbase: SigIdx = new SigIdx()
    newbase.fromBuffer(this.toBuffer())
    return newbase as this
  }

  create(...args: any[]): this {
    return new SigIdx() as this
  }

  /**
   * Type representing a [[Signature]] index used in [[Input]]
   */
  constructor() {
    super()
  }
}

/**
 * Signature for a [[Tx]]
 */
export class Signature extends NBytes {
  protected _typeName = "Signature"
  protected _typeID = undefined

  //serialize and deserialize both are inherited

  protected bytes = Buffer.alloc(65)
  protected bsize = 65

  clone(): this {
    let newbase: Signature = new Signature()
    newbase.fromBuffer(this.toBuffer())
    return newbase as this
  }

  create(...args: any[]): this {
    return new Signature() as this
  }

  /**
   * Signature for a [[Tx]]
   */
  constructor() {
    super()
  }
}

export abstract class Credential extends Serializable {
  protected _typeName = "Credential"
  protected _typeID = undefined

  serialize(encoding: SerializedEncoding = "hex"): object {
    let fields: object = super.serialize(encoding)
    return {
      ...fields,
      sigArray: this.sigArray.map((s) => s.serialize(encoding))
    }
  }
  deserialize(fields: object, encoding: SerializedEncoding = "hex") {
    super.deserialize(fields, encoding)
    this.sigArray = fields["sigArray"].map((s: object) => {
      let sig: Signature = new Signature()
      sig.deserialize(s, encoding)
      return sig
    })
  }

  protected sigArray: Signature[] = []

  abstract getCredentialID(): number

  /**
   * Set the codecID
   *
   * @param codecID The codecID to set
   */
  setCodecID(codecID: number): void {}

  /**
   * Adds a signature to the credentials and returns the index off the added signature.
   */
  addSignature = (sig: Signature): number => {
    this.sigArray.push(sig)
    return this.sigArray.length - 1
  }

  fromBuffer(bytes: Buffer, offset: number = 0): number {
    const siglen: number = bintools
      .copyFrom(bytes, offset, offset + 4)
      .readUInt32BE(0)
    offset += 4
    this.sigArray = []
    for (let i: number = 0; i < siglen; i++) {
      const sig: Signature = new Signature()
      offset = sig.fromBuffer(bytes, offset)
      this.sigArray.push(sig)
    }
    return offset
  }

  toBuffer(): Buffer {
    const siglen: Buffer = Buffer.alloc(4)
    siglen.writeInt32BE(this.sigArray.length, 0)
    const barr: Buffer[] = [siglen]
    let bsize: number = siglen.length
    for (let i: number = 0; i < this.sigArray.length; i++) {
      const sigbuff: Buffer = this.sigArray[`${i}`].toBuffer()
      bsize += sigbuff.length
      barr.push(sigbuff)
    }
    return Buffer.concat(barr, bsize)
  }

  abstract clone(): this
  abstract create(...args: any[]): this
  abstract select(id: number, ...args: any[]): Credential
  constructor(sigarray: Signature[] = undefined) {
    super()
    if (typeof sigarray !== "undefined") {
      /* istanbul ignore next */
      this.sigArray = sigarray
    }
  }
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!