{"version":3,"file":"tesseract-sdk-st-lib.mjs","sources":["../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/Key.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/domain/Result.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/enums/KeyUsage.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/enums/Encoding.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/ResponseFormat.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/ChallengeFormat.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/AlgorithmParameter.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/DataElement.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/Data.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/enums/PINUsageMode.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/PinPolicy.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/Policy.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/KeyPackage.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/DeviceInfo.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/CryptoModuleInfo.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/AlgorithmUtils.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/algorithm/ocra/Suite.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/algorithm/ocra/OCRA.ts","../../../projects/tesseract-sdk-st-lib/src/lib/utils/StringUtils.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/enums/TokenStatus.ts","../../../projects/tesseract-sdk-st-lib/src/lib/xml/factories/KeyContainerFactory.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/CipherData.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/EncryptedValue.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/EncryptionMethod.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/KeyContainer.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/Token.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/exceptions/PersistenceException.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/exceptions/GenericException.ts","../../../projects/tesseract-sdk-st-lib/src/lib/xml/readers/KeyContainerReader.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/exceptions/ConstraintViolationException.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/exceptions/DataException.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/exceptions/NotFoundException.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/utils/HashUtils.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/utils/PSKCFileUtils.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/repositories/impl/KeyContainerRepository.ts","../../../projects/tesseract-sdk-st-lib/src/lib/xml/builders/DeviceInfoBuilder.ts","../../../projects/tesseract-sdk-st-lib/src/lib/xml/builders/KeyContainerBuilder.ts","../../../projects/tesseract-sdk-st-lib/src/lib/managers/exceptions/KeyContainerException.ts","../../../projects/tesseract-sdk-st-lib/src/lib/persistence/utils/LunaUtils.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/models/PasswordKey.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/utils/CipherAesUtils.ts","../../../projects/tesseract-sdk-st-lib/src/lib/http/client/Request.ts","../../../projects/tesseract-sdk-st-lib/src/lib/xml/utils/KeyContainerUtils.ts","../../../projects/tesseract-sdk-st-lib/src/lib/http/client/AsyncClientTask.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/exceptions/EnrollmentStringException.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/algorithm/hotp/OneTimePassword.ts","../../../projects/tesseract-sdk-st-lib/src/lib/managers/KeyContainerManager.ts","../../../projects/tesseract-sdk-st-lib/src/lib/SDK.ts","../../../projects/tesseract-sdk-st-lib/src/lib/tesseract-sdk-st-lib.service.ts","../../../projects/tesseract-sdk-st-lib/src/lib/tesseract-sdk-st-lib.component.ts","../../../projects/tesseract-sdk-st-lib/src/lib/tesseract-sdk-st-lib.module.ts","../../../projects/tesseract-sdk-st-lib/src/lib/support/pskc/enums/TokenType.ts","../../../projects/tesseract-sdk-st-lib/src/public-api.ts","../../../projects/tesseract-sdk-st-lib/src/tesseract-sdk-st-lib.ts"],"sourcesContent":["import type { AlgorithmParameter } from \"./AlgorithmParameter\";\nimport type { Data } from \"./Data\";\nimport type { Policy } from \"./Policy\";\n\nexport class Key{\n    private _id!: string;\n    \n    private _algorithm!: string;\n\n    private _issuer!: string;\n\n    private _profileId!: string;\n\n    private _referenceId!: string;\n\n    private _friendlyName!: string;\n\n    private _algorithmParameter!: AlgorithmParameter;\n\n    private _data!: Data;\n\n    private _userID!: string;\n    \n    private _policy!: Policy;\n\n    constructor(){\n        this.algorithm = \"urn:ietf:params:xml:ns:keyprov:pskc:hotp\";\n    }\n\n    public get id(): string {\n        return this._id;\n    }\n    public set id(value: string) {\n        this._id = value;\n    }\n    public get algorithm(): string {\n        return this._algorithm;\n    }\n    public set algorithm(value: string) {\n        this._algorithm = value;\n    }\n    public get issuer(): string {\n        return this._issuer;\n    }\n    public set issuer(value: string) {\n        this._issuer = value;\n    }\n    public get profileId(): string {\n        return this._profileId;\n    }\n    public set profileId(value: string) {\n        this._profileId = value;\n    }\n    public get referenceId(): string {\n        return this._referenceId;\n    }\n    public set referenceId(value: string) {\n        this._referenceId = value;\n    }\n    public get friendlyName(): string {\n        return this._friendlyName;\n    }\n    public set friendlyName(value: string) {\n        this._friendlyName = value;\n    }\n    public get algorithmParameter(): AlgorithmParameter {\n        return this._algorithmParameter;\n    }\n    public set algorithmParameter(value: AlgorithmParameter) {\n        this._algorithmParameter = value;\n    }\n    public get data(): Data {\n        return this._data;\n    }\n    public set data(value: Data ) {\n        this._data = value;\n    }\n    public get userID(): string {\n        return this._userID;\n    }\n    public set userID(value: string) {\n        this._userID = value;\n    }\n    public get policy(): Policy {\n        return this._policy;\n    }\n    public set policy(value: Policy) {\n        this._policy = value;\n    }\n}","export enum Result\n{\n    SDK_NOT_INIT=\"SDK_NOT_INIT\",\n    SUCCESS=\"SUCCESS\",\n    TOKEN_ALREADY_EXISTS=\"TOKEN_ALREADY_EXISTS\",\n    ERROR_SAVING_TOKEN=\"ERROR_SAVING_TOKEN\",\n    TOKEN_NOT_FOUND=\"TOKEN_NOT_FOUND\",\n    INVALID_TOKEN_STATUS=\"INVALID_TOKEN_STATUS\",\n    TOKEN_NOT_SELECTED=\"TOKEN_NOT_SELECTED\",\n    INVALID_ENROLLMENT_STRING=\"INVALID_ENROLLMENT_STRING\",\n    INVALID_ACT_CODE=\"INVALID_ACT_CODE\",\n    UNKNOWN_ERROR=\"UNKNOWN_ERROR\",\n    NOT_AUTH=\"NOT_AUTH\",\n    BAD_PIN=\"BAD_PIN\",\n    ACTIVATION_ERROR=\"ACTIVATION_ERROR\",\n    INVALID_PARAMETER=\"INVALID_PARAMETER\",\n    NO_INTERNET_ACCESS=\"NO_INTERNET_ACCESS\",\n    INVALID_TOKEN_IS_UNASSIGNED=\"INVALID_TOKEN_IS_UNASSIGNED\",\n    INVALID_TOKEN_IS_WAITING=\"INVALID_TOKEN_IS_WAITING\",\n    INVALID_TOKEN_IS_ASSIGNED=\"INVALID_TOKEN_IS_ASSIGNED\",\n    INVALID_TOKEN_ALREADY_ACTIVATED=\"INVALID_TOKEN_ALREADY_ACTIVATED\",\n    INVALID_TOKEN_IS_REVOKED=\"INVALID_TOKEN_IS_REVOKED\",\n    INVALID_TOKEN_IS_BLOCKED=\"INVALID_TOKEN_IS_BLOCKED\",\n    TOKEN_INFORMATION_CORRUPT=\"TOKEN_INFORMATION_CORRUPT\",\n    NO_MATCH_BODY_TOKEN_SERIAL=\"NO_MATCH_BODY_TOKEN_SERIAL\",\n    ACTIVATION_PROCESS=\"ACTIVATION_PROCESS\",\n    SYNC_SUCCESS=\"SYNC_SUCCESS\",\n    SYNC_FAILED=\"SYNC_FAILED\",\n    UNNECESSARY_SYNC=\"UNNECESSARY_SYNC\",\n    ERROR_DATE=\"ERROR_DATE\"\n}","export enum KeyUsage\n{\n    OTP=\"OTP\",\n    CR=\"CR\",\n    ENCRYPT=\"ENCRYPT\",\n    INTEGRITY=\"INTEGRITY\",\n    VERIFY=\"VERIFY\",\n    UNLOCK=\"UNLOCK\",\n    DECRYPT=\"DECRYPT\",\n    KEYWRAP=\"KEYWRAP\",\n    UNWRAP=\"UNWRAP\",\n    DERIVE=\"DERIVE\",\n    GENERATE=\"GENERATE\"\n}\n\n    \n    \n    \n    \n    ","export enum Encoding\n{\n    DECIMAL=\"DECIMAL\",\n    HEXADECIMAL=\"HEXADECIMAL\",\n    ALPHANUMERIC=\"ALPHANUMERIC\",\n    BASE64=\"BASE64\",\n    BINARY=\"BINARY\"\n}\n    ","import { Encoding } from \"./enums/Encoding\";\nexport class ResponseFormat{\n    private _encoding!: Encoding;\n    \n    private _checkDigit!: boolean;\n    \n    private _length!: number;\n    \n    constructor(){\n        this.encoding = Encoding.DECIMAL;\n        this.checkDigit = false;\n        this.length = 6;\n    }\n\n    public ResponseFormat(encoding:Encoding, length:number) {\n        this.encoding = encoding;\n        this.length = length;\n    }\n\n    public get encoding(): Encoding {\n        return this._encoding;\n    }\n    public set encoding(value: Encoding) {\n        this._encoding = value;\n    }\n    public get checkDigit(): boolean {\n        return this._checkDigit;\n    }\n    public set checkDigit(value: boolean) {\n        this._checkDigit = value;\n    }\n    public get length(): number {\n        return this._length;\n    }\n    public set length(value: number) {\n        this._length = value;\n    }\n}","import { Encoding } from \"./enums/Encoding\";\nexport class ChallengeFormat{\n    private _encoding: Encoding = Encoding.DECIMAL;\n    \n    private _checkDigit: boolean = false;\n    \n    private _min!: number;\n   \n    private _max!: number;\n    \n    constructor(){\n        this.encoding = Encoding.DECIMAL;\n        this.checkDigit = false;\n        this.min = 6;\n        this.max = 6;\n    }\n\n    public ChallengeFormat(encoding:Encoding, min:number, max:number) {\n        this.encoding = encoding;\n        this.min = min;\n        this.max = max;\n    }\n    public get encoding(): Encoding {\n        return this._encoding;\n    }\n    public set encoding(value: Encoding) {\n        this._encoding = value;\n    }\n    public get checkDigit(): boolean {\n        return this._checkDigit;\n    }\n    public set checkDigit(value: boolean) {\n        this._checkDigit = value;\n    } \n    public get min(): number {\n        return this._min;\n    }\n    public set min(value: number) {\n        this._min = value;\n    }\n    public get max(): number {\n        return this._max;\n    }\n    public set max(value: number) {\n        this._max = value;\n    }\n}","import type { ChallengeFormat } from \"./ChallengeFormat\";\nimport type { ResponseFormat } from \"./ResponseFormat\";\n\nexport class AlgorithmParameter {\n\n    private _suite!: string | null;\n\n    private _challengeFormat!: ChallengeFormat | null;\n\n    private _responseFormat!: ResponseFormat | null;\n\n    constructor() {\n    }\n\n    public AlgorithmParameter(suite: string) {\n        this.suite = suite;\n    }\n\n    public get suite(): string | null {\n        return this._suite;\n    }\n    public set suite(value: string | null) {\n        this._suite = value;\n    }\n\n    public get challengeFormat(): ChallengeFormat | null {\n        return this._challengeFormat;\n    }\n    public set challengeFormat(value: ChallengeFormat | null) {\n        this._challengeFormat = value;\n    }\n    public get responseFormat(): ResponseFormat | null {\n        return this._responseFormat;\n    }\n    public set responseFormat(value: ResponseFormat | null) {\n        this._responseFormat = value;\n    }\n\n}","import type { EncryptedValue } from \"./EncryptedValue\";\n\nexport class DataElement {\n    private _plainValue: string | undefined;\n\n    private _encryptedValue: EncryptedValue | undefined;\n\n    private _valueMac: string | undefined;\n\n    //public constructor();\n    //public constructor(plainValue: string)\n    public constructor(plainValue: string | null) {\n        if (plainValue != null) {\n            this.plainValue = plainValue;\n        }\n    }\n\n\n    public get plainValue(): string | undefined {\n        return this._plainValue;\n    }\n    public set plainValue(value: string | undefined) {\n        this._plainValue = value;\n    }\n    public get encryptedValue(): EncryptedValue | undefined {\n        return this._encryptedValue;\n    }\n    public set encryptedValue(value: EncryptedValue | undefined) {\n        this._encryptedValue = value;\n    }\n    public get valueMac(): string | undefined {\n        return this._valueMac;\n    }\n    public set valueMac(value: string | undefined) {\n        this._valueMac = value;\n    }\n}","import type { DataElement } from \"./DataElement\";\n\n\nexport class Data{\n    private _secret: DataElement | undefined;\n    \n    private _counter: DataElement | undefined;\n    \n    private _time: DataElement | undefined;\n    \n    private _timeInterval: DataElement | undefined;\n    \n    private _timeDrift: DataElement | undefined;\n    \n    private _pin: DataElement | undefined;\n    \n    private _status: DataElement | undefined;\n    \n    private _url: DataElement | undefined;\n    \n\n    constructor(){\n\n    }\n\n    public get secret(): DataElement | undefined{\n        return this._secret;\n    }\n    public set secret(value: DataElement | undefined) {\n        this._secret = value;\n    }\n    public get counter(): DataElement | undefined{\n        return this._counter;\n    }\n    public set counter(value: DataElement | undefined) {\n        this._counter = value;\n    }\n    public get time(): DataElement | undefined{\n        return this._time;\n    }\n    public set time(value: DataElement | undefined) {\n        this._time = value;\n    }\n    public get timeInterval(): DataElement | undefined{\n        return this._timeInterval;\n    }\n    public set timeInterval(value: DataElement | undefined) {\n        this._timeInterval = value;\n    }\n    public get timeDrift(): DataElement | undefined{\n        return this._timeDrift;\n    }\n    public set timeDrift(value: DataElement | undefined) {\n        this._timeDrift = value;\n    }\n    public get pin(): DataElement | undefined{\n        return this._pin;\n    }\n    public set pin(value: DataElement | undefined) {\n        this._pin = value;\n    }\n    public get status(): DataElement | undefined{\n        return this._status;\n    }\n    public set status(value: DataElement | undefined) {\n        this._status = value;\n    }\n    public get url(): DataElement | undefined{\n        return this._url;\n    }\n    public set url(value: DataElement | undefined) {\n        this._url = value;\n    }\n}","export enum PINUsageMode\n{\n    LOCAL=\"LOCAL\",\n    PREPEND=\"PREPEND\",\n    APPEND=\"APPEND\",\n    ALGORITHMIC=\"ALGORITHMIC\"\n}","import { Encoding } from \"./enums/Encoding\";\nimport { PINUsageMode } from \"./enums/PINUsageMode\";\n\nexport class PinPolicy{\n    private _pinKeyId!: string;\n    \n    private _pinUsageMode: PINUsageMode;\n    \n    private _maxFailedAttempts: number;\n    \n    private _minLength: number;\n    \n    private _maxLength: number;\n    \n    private _pinEncoding: Encoding;\n    \n\n    constructor(){\n        this._pinUsageMode = PINUsageMode.LOCAL;\n        this._maxFailedAttempts = 5;\n        this._minLength = 4;\n        this._maxLength = 4;\n        this._pinEncoding = Encoding.DECIMAL;\n    }\n\n    public get pinKeyId(): string {\n        return this._pinKeyId;\n    }\n    public set pinKeyId(value: string) {\n        this._pinKeyId = value;\n    }\n\n    public get pinUsageMode(): PINUsageMode {\n        return this._pinUsageMode;\n    }\n    public set pinUsageMode(value: PINUsageMode) {\n        this._pinUsageMode = value;\n    }\n\n    public get maxFailedAttempts(): number {\n        return this._maxFailedAttempts;\n    }\n    public set maxFailedAttempts(value: number) {\n        this._maxFailedAttempts = value;\n    }\n\n    public get minLength(): number {\n        return this._minLength;\n    }\n    public set minLength(value: number) {\n        this._minLength = value;\n    }\n    public get maxLength(): number {\n        return this._maxLength;\n    }\n    public set maxLength(value: number) {\n        this._maxLength = value;\n    }\n    public get pinEncoding(): Encoding {\n        return this._pinEncoding;\n    }\n    public set pinEncoding(value: Encoding) {\n        this._pinEncoding = value;\n    }\n\n\n}","import type { KeyUsage } from \"./enums/KeyUsage\";\nimport type { PinPolicy } from \"./PinPolicy\";\n\nexport class Policy{\n    private _startDate: Date | undefined;\n    \n    private _expiryDate: Date | undefined;\n    \n    private _noOfTransactions: number | undefined;\n    \n    private _keyUsage!: KeyUsage;\n    \n    private _pinPolicy: PinPolicy | undefined;\n    \n     constructor(){\n        this.noOfTransactions = 0;\n     }\n\n     public get startDate(): Date | undefined {\n        return this._startDate;\n    }\n    public set startDate(value: Date | undefined) {\n        this._startDate = value;\n    }\n\n    public get expiryDate(): Date | undefined {\n        return this._expiryDate;\n    }\n    public set expiryDate(value: Date | undefined) {\n        this._expiryDate = value;\n    }\n\n    public get noOfTransactions(): number | undefined {\n        return this._noOfTransactions;\n    }\n    public set noOfTransactions(value: number | undefined) {\n        this._noOfTransactions = value;\n    }\n\n    public get keyUsage(): KeyUsage {\n        return this._keyUsage;\n    }\n    public set keyUsage(value: KeyUsage) {\n        this._keyUsage = value;\n    }\n\n    public get pinPolicy(): PinPolicy | undefined {\n        return this._pinPolicy;\n    }\n    public set pinPolicy(value: PinPolicy | undefined) {\n        this._pinPolicy = value;\n    }\n\n\n     \n}","import type { CryptoModuleInfo } from \"./CryptoModuleInfo\";\nimport type { DeviceInfo } from \"./DeviceInfo\";\nimport type { Key } from \"./Key\";\nimport type { Token } from \"./Token\";\n\n\nexport class KeyPackage {\n    private _deviceInfo!: DeviceInfo | null;\n\n\n    private _cryptoModuleInfo!: CryptoModuleInfo | null;\n\n\n    private _key!: Key | null;\n\n\n    private _token!: Token | null;\n\n\n    constructor() { \n\n    }\n\n    public get deviceInfo(): DeviceInfo | null  {\n        return this._deviceInfo;\n    }\n    public set deviceInfo(value: DeviceInfo | null) {\n        this._deviceInfo = value;\n    }\n    public get cryptoModuleInfo(): CryptoModuleInfo | null {\n        return this._cryptoModuleInfo;\n    }\n    public set cryptoModuleInfo(value: CryptoModuleInfo | null) {\n        this._cryptoModuleInfo = value;\n    }\n    public get key(): Key | null {\n        return this._key;\n    }\n    public set key(value: Key | null) {\n        this._key = value;\n    }\n    public get token(): Token | null {\n        return this._token;\n    }\n    public set token(value: Token | null) {\n        this._token = value;\n    }\n\n}","export class DeviceInfo {\n\n    private _manufacturer!: string;\n\n    private _serialNo!: string | null;\n\n    private _model!: string;\n\n    private _issueNumber!: string | null;\n\n    private _deviceBinding!: string | null;\n\n    private _startDate!: Date;\n\n    private _expiryDate!: Date;\n\n    private _userId!: string;\n\n    constructor() {\n\n    }\n    public get manufacturer(): string {\n        return this._manufacturer;\n    }\n    public set manufacturer(value: string) {\n        this._manufacturer = value;\n    }\n    public get serialNo(): string | null {\n        return this._serialNo;\n    }\n    public set serialNo(value: string | null) {\n        this._serialNo = value;\n    }\n    public get model(): string {\n        return this._model;\n    }\n    public set model(value: string) {\n        this._model = value;\n    }\n    public get issueNumber(): string | null {\n        return this._issueNumber;\n    }\n    public set issueNumber(value: string | null) {\n        this._issueNumber = value;\n    }\n    public get deviceBinding(): string | null {\n        return this._deviceBinding;\n    }\n    public set deviceBinding(value: string | null) {\n        this._deviceBinding = value;\n    }\n    public get startDate(): Date {\n        return this._startDate;\n    }\n    public set startDate(value: Date) {\n        this._startDate = value;\n    }\n    public get expiryDate(): Date {\n        return this._expiryDate;\n    }\n    public set expiryDate(value: Date) {\n        this._expiryDate = value;\n    }\n\n    public get userId(): string {\n        return this._userId;\n    }\n    public set userId(value: string) {\n        this._userId = value;\n    }\n}","export class CryptoModuleInfo{\n    private _id!: string;\n    \n    constructor(){\n\n    }\n    public get id(): string {\n        return this._id;\n    }\n    public set id(value: string) {\n        this._id = value;\n    }\n    \n}","import CryptoES from \"crypto-es\";\n\nexport class AlgorithmUtils {\n\n  constructor() {\n    throw new Error(\"Not Allowed.\")\n  }\n\n  public static DOUBLE_DIGITS = [0, 2, 4, 6, 8, 1, 3, 5, 7, 9];\n\n  public static hmac_sha1(crypto: string, keyBytes: Uint8Array, text: Uint8Array): Uint8Array | null {\n    let key = CryptoES.lib.WordArray.create(keyBytes);\n    let t = CryptoES.lib.WordArray.create(text);\n    switch (crypto) {\n      case \"HmacSHA1\": {\n        return convert_word_array_to_uint8Array(CryptoES.HmacSHA1(t, key));\n      }\n      case \"HMAC-SHA1\": {\n        return convert_word_array_to_uint8Array(CryptoES.HmacSHA1(t, key));\n      }\n      case \"HmacSHA256\": {\n        return convert_word_array_to_uint8Array(CryptoES.HmacSHA256(t, key));\n      }\n      case \"HMAC-SHA256\": {\n        return convert_word_array_to_uint8Array(CryptoES.HmacSHA256(t, key));\n      }\n      case \"HmacSHA512\": {\n        return convert_word_array_to_uint8Array(CryptoES.HmacSHA512(t, key));\n      }\n      case \"HMAC-SHA512\": {\n        return convert_word_array_to_uint8Array(CryptoES.HmacSHA512(t, key));\n      }\n      default: {\n        return null;\n      }\n    }\n  }\n\n  public static hexStr2Bytes(hex: string) {\n    for (var bytes = [], c = 0; c < hex.length; c += 2)\n      bytes.push(parseInt(hex.substr(c, 2), 16));\n    return bytes;\n\n\n  }\n\n  public static hexStr2BytesOCRA(hex: string) {\n    if(hex.length%2!=0){\n      hex = \"0\"+hex;\n    }\n    for (var bytes = [], c = 0; c < hex.length; c += 2)\n      bytes.push(parseInt(hex.substr(c, 2), 16));\n    return bytes;\n\n\n  }\n  public static asHex(bytes: Uint8Array): string {\n    for (var hex = [], i = 0; i < bytes.length; i++) {\n      var current = bytes[i] < 0 ? bytes[i] + 256 : bytes[i];\n      hex.push((current >>> 4).toString(16));\n      hex.push((current & 0xF).toString(16));\n    }\n    return hex.join(\"\");\n  }\n  public static calcDigitsPower(power: number): number {\n    if (power < 0)\n      throw new Error(\"power must be greater than 0\");\n\n    return Math.round(Math.pow(10, power));\n  }\n\n}\n//Not in original\nfunction convert_word_array_to_uint8Array(wordArray: any) {\n  var len = wordArray.words.length,\n    u8_array = new Uint8Array(len << 2),\n    offset = 0, word, i\n    ;\n  for (i = 0; i < len; i++) {\n    word = wordArray.words[i];\n    u8_array[offset++] = word >> 24;\n    u8_array[offset++] = (word >> 16) & 0xff;\n    u8_array[offset++] = (word >> 8) & 0xff;\n    u8_array[offset++] = word & 0xff;\n  }\n  return u8_array;\n}\n\n","import { Encoding } from \"../../pskc/enums/Encoding\";\n\nexport class Suite {\n    private _suite!: string;\n    private _ocra!: string;\n    private _ocraVersion!: number;\n    private _cryptoFunction!: string;\n    private _crypto!: string;\n    private _digits!: number;\n    private _dataInput!: string;\n    private _questionEncoding!: Encoding;\n    private _questionLength!: number;\n\n    constructor(suite:string){\n        this.suite= suite;\n        const ocraSuite: string[] = suite.toUpperCase().split(\":\");\n        \n        if(ocraSuite.length!=3){\n            throw new Error(\"Invalid Suite \"+suite);\n        }\n        this.ocra = ocraSuite[0];\n        this.ocraVersion = Number(this.ocra.substring(this.ocra.lastIndexOf(\"OCRA-\")+5));\n        if(this.ocraVersion!=1){\n            throw new Error(\"Unsupported OCRA Version \" + this.ocraVersion);\n        }\n        this.cryptoFunction = ocraSuite[1];\n        if(this.cryptoFunction.toLowerCase().indexOf(\"sha1\")>1){\n            this.crypto = \"HmacSHA1\"\n        }\n        else if(this.cryptoFunction.toLowerCase().indexOf(\"sha256\") > 1){\n            this.crypto = \"HmacSHA256\";\n        }\n        else if(this.cryptoFunction.toLowerCase().indexOf(\"sha512\") > 1){\n            this.crypto = \"HmacSHA512\";\n        }else{\n            throw new Error(\"Unsupported Crypto Function \"+this.cryptoFunction)\n        }\n        this.digits = Number(this.cryptoFunction.substring(this.cryptoFunction.lastIndexOf(\"-\")+1));\n        if(this.digits<4|| this.digits>10){\n            throw new Error(\"Unsupported Crypto Function\" +this.cryptoFunction+\", digits must be greater than or equal to 4 and less than or equal to 10\")\n        }\n        var index:number;\n        this.dataInput=ocraSuite[2];\n        if(this.dataInput.toLowerCase().includes(\"qa\")){\n            this.questionEncoding = Encoding.ALPHANUMERIC;\n            index = this.dataInput.toLowerCase().indexOf(\"qa\")+2;\n        }else if(this.dataInput.toLowerCase().includes(\"qh\")){\n            this.questionEncoding = Encoding.HEXADECIMAL;\n            index = this.dataInput.toLowerCase().indexOf(\"qh\")+2;\n        }else if(this.dataInput.toLowerCase().includes(\"qn\")){\n            this.questionEncoding = Encoding.DECIMAL;\n            index = this.dataInput.toLowerCase().indexOf(\"qn\")+2;\n        }else{\n            throw new Error(\"Unsupported Input Data\"+this.dataInput+\", Question Format Invalid\")\n        }\n        this.questionLength = parseInt(this.dataInput.toLowerCase().substring(index, index + 2));\n        if(this.questionLength<4|| this.questionLength>64){\n            throw new Error(\"Unsupported Input Data \"+this.dataInput+\", Question Length must be greater than or equal to 4 and less than or equal to 64\")\n        }\n    }\n    public get suite(): string {\n        return this._suite;\n    }\n    public set suite(value: string) {\n        this._suite = value;\n    }\n    \n    public get ocra(): string {\n        return this._ocra;\n    }\n    public set ocra(value: string) {\n        this._ocra = value;\n    }\n    \n    public get ocraVersion(): number {\n        return this._ocraVersion;\n    }\n    public set ocraVersion(value: number) {\n        this._ocraVersion = value;\n    }\n    \n    public get cryptoFunction(): string {\n        return this._cryptoFunction;\n    }\n    public set cryptoFunction(value: string) {\n        this._cryptoFunction = value;\n    }\n    \n    public get crypto(): string {\n        return this._crypto;\n    }\n    public set crypto(value: string) {\n        this._crypto = value;\n    }\n    public get digits(): number {\n        return this._digits;\n    }\n    public set digits(value: number) {\n        this._digits = value;\n    }\n    public get dataInput(): string {\n        return this._dataInput;\n    }\n    public set dataInput(value: string) {\n        this._dataInput = value;\n    }\n    \n    public get questionEncoding(): Encoding {\n        return this._questionEncoding;\n    }\n    public set questionEncoding(value: Encoding) {\n        this._questionEncoding = value;\n    }\n    \n    public get questionLength(): number {\n        return this._questionLength;\n    }\n    public set questionLength(value: number) {\n        this._questionLength = value;\n    }\n\n}","import { Key } from \"../../../support/pskc/Key\";\nimport { AlgorithmUtils } from \"../../AlgorithmUtils\";\nimport { Encoding } from \"../../pskc/enums/Encoding\";\nimport { Suite } from \"./Suite\";\nimport { decode } from 'js-base64';\n\nexport class OCRA {\n    constructor() {\n        throw new Error(\"Illegal\")\n    }\n    public static generateOCRA(key: Key, question: string, password: string, sessionInformation: string, timeStamp: string) {\n        var counter: string = key.data.counter?.plainValue!;\n        var counterLength = 0;\n        var questionLength = 0;\n        var passwordLength = 0;\n        var sessionInformationLength = 0;\n        var timeStampLength = 0;\n        var suite: Suite = new Suite(key.algorithmParameter.suite!);\n\n        if (suite.dataInput.toLowerCase().startsWith(\"c\")) {\n            while (counter.length < 16) {\n                counter = \"0\" + counter;\n            }\n            counterLength = 0;\n        }\n        if (suite.dataInput.toLowerCase().startsWith(\"q\") ||\n            suite.dataInput.toLowerCase().includes(\"-q\")) {\n            while (question.length < 256) {\n                question = question + \"0\";\n            }\n            questionLength = 128;\n        }\n        if (suite.dataInput.toLowerCase().indexOf(\"psha1\") > 1) {\n            while (password.length < 40) {\n                password = \"0\" + password;\n            }\n            passwordLength = 20;\n        }\n        \n        if (suite.dataInput.toLowerCase().indexOf(\"psha256\") > 1) {\n            while (password.length < 64)\n                password = \"0\" + password;\n            passwordLength = 32;\n        }\n\n        // Password - sha512\n        if (suite.dataInput.toLowerCase().indexOf(\"psha512\") > 1) {\n            while (password.length < 128)\n                password = \"0\" + password;\n            passwordLength = 64;\n        }\n        // sessionInformation - s064\n        if (suite.dataInput.toLowerCase().indexOf(\"s064\") > 1) {\n            while (sessionInformation.length < 128)\n                sessionInformation = \"0\" + sessionInformation;\n            sessionInformationLength = 64;\n        }\n\n        // sessionInformation - s128\n        if (suite.dataInput.toLowerCase().indexOf(\"s128\") > 1) {\n            while (sessionInformation.length < 256)\n                sessionInformation = \"0\" + sessionInformation;\n            sessionInformationLength = 128;\n        }\n\n        // sessionInformation - s256\n        if (suite.dataInput.toLowerCase().indexOf(\"s256\") > 1) {\n            while (sessionInformation.length < 512)\n                sessionInformation = \"0\" + sessionInformation;\n            sessionInformationLength = 256;\n        }\n\n        // sessionInformation - s512\n        if (suite.dataInput.toLowerCase().indexOf(\"s512\") > 1) {\n            while (sessionInformation.length < 1024)\n                sessionInformation = \"0\" + sessionInformation;\n            sessionInformationLength = 512;\n        }\n        // TimeStamp\n        if (suite.dataInput.toLowerCase().startsWith(\"t\") || (suite.dataInput.toLowerCase().indexOf(\"-t\") > 1)) {\n            while (timeStamp.length < 16)\n                timeStamp = \"0\" + timeStamp;\n            timeStampLength = 8;\n        }\n        const encoder = new TextEncoder();\n        var msg: Uint8Array = new Uint8Array(encoder.encode(suite.suite).length +\n            counterLength +\n            questionLength +\n            passwordLength +\n            sessionInformationLength +\n            timeStampLength +\n            1);\n        var bArray: Uint8Array = encoder.encode(suite.suite);\n        var tmp = new Uint8Array(msg.length);\n        tmp.set(new Uint8Array(bArray), 0);\n        tmp.set(new Uint8Array(msg.slice(bArray.length, msg.length)), bArray.length);\n        msg = tmp;\n        msg[bArray.length] = 0x00;\n        if (counterLength > 0) {\n            bArray = new Uint8Array(AlgorithmUtils.hexStr2Bytes(counter));\n            msg.set(bArray, encoder.encode(suite.suite).length + 1);\n        }\n        if (questionLength > 0) {\n            bArray = new Uint8Array(AlgorithmUtils.hexStr2BytesOCRA(OCRA.asHexQuestion(key.algorithmParameter.challengeFormat?.encoding!, question)));\n            msg.set(bArray, encoder.encode(suite.suite).length + 1 + counterLength);\n        }\n        if (passwordLength > 0) {\n            bArray = new Uint8Array(AlgorithmUtils.hexStr2Bytes(password));\n            msg.set(bArray, encoder.encode(suite.suite).length + 1 + counterLength + questionLength);\n        }\n\n        if (timeStampLength > 0) {\n            bArray = new Uint8Array(AlgorithmUtils.hexStr2Bytes(timeStamp));\n            msg.set(bArray, encoder.encode(suite.suite).length + 1\n                + counterLength + questionLength +\n                passwordLength + sessionInformationLength,);\n        }\n        const secret = new String(decode(key.data.secret?.plainValue!))\n        bArray = new Uint8Array(AlgorithmUtils.hexStr2Bytes(secret.toString()));\n        var hash = AlgorithmUtils.hmac_sha1(suite.crypto, bArray, msg);\n        let offset =  hash![hash?.length!-1]& 0xf;\n        var binary =\n                ((hash![offset] & 0x7f) << 24) |\n                        ((hash![offset + 1] & 0xff) << 16) |\n                        ((hash![offset + 2] & 0xff) << 8) |\n                        (hash![offset + 3] & 0xff);\n        var otp = binary % AlgorithmUtils.calcDigitsPower(key.algorithmParameter.responseFormat?.length!);\n        var result = otp.toString();\n        while(result.length < key.algorithmParameter.responseFormat?.length!){\n            result = \"0\"+ result;\n        }\n        return result;\n\n\n    }\n    private static asHexQuestion(encoding: Encoding, question: string): string {\n        var questionHex: string = \"\";\n        const encoder = new TextEncoder();\n        switch (encoding) {\n            case Encoding.DECIMAL:\n\n                questionHex = BigInt(question).\n                    toString(16).\n                    toUpperCase();\n                break;\n            case Encoding.ALPHANUMERIC:\n                questionHex = AlgorithmUtils.asHex(encoder.encode(question));\n                break;\n        }\n        return questionHex;\n    }\n} ","export class StringUtils{\n    constructor(){\n        throw new Error(\"Method not implemented.\");\n    }\n    public static isEmptyOrNull(s:string):boolean{\n        return s == null|| typeof s === \"string\" && s.trim().length == 0\n    }\n}","export enum TokenStatus\n{\n    UNKNOWN=\"UNKNOWN\",    // Token corrupto\n    CREATED=\"CREATED\",     // Token creado\n    ENROLLMENT=\"ENROLLMENT\",  // Token que ha recibido la cadena de enrolamiento y la clave de activación\n    WAITING_PIN=\"WAITING_PIN\", // Token en espera de establecmiento de PIN\n    READY=\"READY\",       // Token listo para generar OTP\n    BLOCKED=\"BLOCKED\"     // Token bloqueado no se puede recuperar\n}","import type { CryptoModuleInfo } from \"../../support/pskc/CryptoModuleInfo\";\nimport type { Data } from \"../../support/pskc/Data\";\nimport type { DeviceInfo } from \"../../support/pskc/DeviceInfo\";\nimport { Encoding } from \"../../support/pskc/enums/Encoding\";\nimport { KeyUsage } from \"../../support/pskc/enums/KeyUsage\";\nimport { PINUsageMode } from \"../../support/pskc/enums/PINUsageMode\";\nimport { TokenStatus } from \"../../support/pskc/enums/TokenStatus\";\nimport type { Key } from \"../../support/pskc/Key\";\nimport type { KeyContainer } from \"../../support/pskc/KeyContainer\";\nimport type { KeyPackage } from \"../../support/pskc/KeyPackage\";\nimport type { Policy } from \"../../support/pskc/Policy\";\nimport type { Token } from \"../../support/pskc/Token\";\nimport { AlgorithmParameter } from \"../../support/pskc/AlgorithmParameter\";\nimport { XmlWriter } from \"xml-writer-ts\"\n\nexport class KeyContainerFactory {\n    private keyContainer: KeyContainer;\n    private xmlSerializer: any;\n\n    constructor(keyContainer: KeyContainer) {\n        this.keyContainer = keyContainer;\n    }\n    public toXmlString(): string {\n        this.xmlSerializer = new XmlWriter();\n        this.xmlSerializer.startDocument('1.0');\n        this.writeKeyContainer(this.keyContainer);\n        this.xmlSerializer.endDocument();\n        return this.xmlSerializer.toString();\n    }\n    private writeKeyContainer(keyContainer: KeyContainer) {\n        this.xmlSerializer.startElement('pskc:KeyContainer');\n        if (keyContainer.id != null) {\n            this.xmlSerializer.writeAttribute('pskc:Id', keyContainer.id)\n        }\n\n        if (keyContainer.version != null) {\n            this.xmlSerializer.writeAttribute('pskc:Version', keyContainer.version)\n        }\n\n        keyContainer.keyPackages.forEach((keyPackage: KeyPackage) =>\n            this.writeKeyPackage(keyPackage));\n        this.xmlSerializer.endElement('pskc:KeyContainer');\n\n    }\n    private writeKeyPackage(keyPackage: KeyPackage) {\n        this.xmlSerializer.startElement('pskc:KeyPackage');\n\n        this.writeDeviceInfo(keyPackage.deviceInfo!);\n        this.writeCryptoModuleInfo(keyPackage.cryptoModuleInfo!);\n        this.writeKey(keyPackage.key!);\n        this.writeToken(keyPackage.token!);\n        this.xmlSerializer.endElement('pskc:KeyPackage');\n\n\n    }\n    private writeDeviceInfo(deviceInfo: DeviceInfo) {\n        this.xmlSerializer.startElement('pskc:DeviceInfo');\n        if (deviceInfo != null) {\n            this.xmlSerializer.startElement('pskc:Manufacturer');\n            if (deviceInfo.manufacturer != null) {\n                this.xmlSerializer.text(deviceInfo.manufacturer);\n            }\n            this.xmlSerializer.endElement('pskc:Manufacturer');\n\n            this.xmlSerializer.startElement('pskc:SerialNo');\n            if (deviceInfo.serialNo != null) {\n                this.xmlSerializer.text(deviceInfo.serialNo);\n            }\n            this.xmlSerializer.endElement('pskc:SerialNo');\n            this.xmlSerializer.startElement('pskc:Model');\n            if (deviceInfo.model != null) {\n                this.xmlSerializer.text(deviceInfo.model);\n            }\n            this.xmlSerializer.endElement('pskc:Model');\n\n            this.xmlSerializer.startElement('pskc:IssueNumber');\n            if (deviceInfo.issueNumber != null) {\n                this.xmlSerializer.text(deviceInfo.issueNumber);\n            }\n            this.xmlSerializer.endElement('pskc:IssueNumber');\n\n            this.xmlSerializer.startElement('pskc:DeviceBinding');\n            if (deviceInfo.deviceBinding != null) {\n                this.xmlSerializer.text(deviceInfo.deviceBinding);\n            }\n            this.xmlSerializer.endElement('pskc:DeviceBinding');\n\n            this.xmlSerializer.startElement('pskc:StartDate');\n            if (deviceInfo.startDate != null) {\n                this.xmlSerializer.text(deviceInfo.startDate.toDateString());\n            }\n            this.xmlSerializer.endElement('pskc:StartDate');\n\n            this.xmlSerializer.startElement('pskc:ExpiryDate');\n            if (deviceInfo.expiryDate != null) {\n                this.xmlSerializer.text(deviceInfo.expiryDate.toDateString());\n            }\n            this.xmlSerializer.endElement('pskc:ExpiryDate');\n\n\n            this.xmlSerializer.startElement('pskc:UserId');\n            if (deviceInfo.userId != null) {\n                this.xmlSerializer.text(deviceInfo.userId);\n            }\n            this.xmlSerializer.endElement('pskc:UserId');\n        }\n        this.xmlSerializer.endElement('pskc:DeviceInfo');\n    }\n    private writeCryptoModuleInfo(cryptoModuleInfo: CryptoModuleInfo) {\n        this.xmlSerializer.startElement('pskc:CryptoModuleInfo');\n        if (cryptoModuleInfo != null) {\n            this.xmlSerializer.startElement('pskc:Id');\n            if (cryptoModuleInfo.id != null) {\n                this.xmlSerializer.text(cryptoModuleInfo.id);\n            }\n            this.xmlSerializer.endElement('pskc:Id');\n        }\n        this.xmlSerializer.endElement('pskc:CryptoModuleInfo');\n    }\n    private writeKey(key: Key) {\n        this.xmlSerializer.startElement('pskc:Key');\n        if (key != null) {\n            if (key.id != null) {\n                this.xmlSerializer.writeAttribute('pskc:Id', key.id);\n            }\n            if (key.algorithm != null) {\n                this.xmlSerializer.writeAttribute('pskc:Algorithm', key.algorithm);\n            }\n\n            this.xmlSerializer.startElement('pskc:Issuer');\n            if (key.issuer != null) {\n                this.xmlSerializer.text(key.issuer);\n            }\n            this.xmlSerializer.endElement('pskc:Issuer');\n\n            this.xmlSerializer.startElement('pskc:ProfileId');\n            if (key.profileId != null) {\n                this.xmlSerializer.text(key.profileId);\n            }\n            this.xmlSerializer.endElement('pskc:ProfileId');\n\n            this.xmlSerializer.startElement('pskc:ReferenceId');\n            if (key.referenceId != null) {\n                this.xmlSerializer.text(key.referenceId);\n            }\n            this.xmlSerializer.endElement('pskc:ReferenceId');\n\n            this.xmlSerializer.startElement('pskc:FriendlyName');\n            if (key.friendlyName != null) {\n                this.xmlSerializer.text(key.friendlyName);\n            }\n            this.xmlSerializer.endElement('pskc:FriendlyName');\n\n            this.writeAlgorithmParameter(key.algorithmParameter);\n\n            this.xmlSerializer.startElement('pskc:UserId');\n            if (key.userID != null) {\n                this.xmlSerializer.text(key.userID);\n            }\n            this.xmlSerializer.endElement('pskc:UserId');\n\n            this.writeData(key.data);\n\n            this.writePolicy(key.policy);\n\n        }\n        this.xmlSerializer.endElement('pskc:Key');\n\n    }\n    private writeAlgorithmParameter(algorithmParameter: AlgorithmParameter) {\n        this.xmlSerializer.startElement('pskc:AlgorithmParameters');\n        if (algorithmParameter != null) {\n            this.xmlSerializer.startElement('pskc:Suite');\n            if (algorithmParameter.suite != null) {\n                this.xmlSerializer.text(algorithmParameter.suite);\n            }\n            this.xmlSerializer.endElement('pskc:Suite');\n\n            this.xmlSerializer.startElement('pskc:ChallengeFormat');\n            if (algorithmParameter.challengeFormat?.encoding != null) {\n                this.xmlSerializer.writeAttribute(\"pskc:Encoding\", algorithmParameter.challengeFormat.encoding.toString());\n            }\n            if (algorithmParameter.challengeFormat?.checkDigit != null) {\n                this.xmlSerializer.writeAttribute(\"pskc:CheckDigit\", algorithmParameter.challengeFormat.checkDigit.toString());\n            }\n            if (algorithmParameter.challengeFormat?.min != null) {\n                this.xmlSerializer.writeAttribute(\"pskc:Min\", algorithmParameter.challengeFormat.min.toString());\n            }\n            if (algorithmParameter.challengeFormat?.max != null) {\n                this.xmlSerializer.writeAttribute(\"pskc:Max\", algorithmParameter.challengeFormat.max.toString());\n            }\n\n            this.xmlSerializer.endElement('pskc:ChallengeFormat');\n\n            this.xmlSerializer.startElement('pskc:ResponseFormat');\n            if (algorithmParameter.responseFormat != null) {\n                if (algorithmParameter.responseFormat.encoding != null) {\n                    this.xmlSerializer.writeAttribute(\"pskc:Encoding\", algorithmParameter.responseFormat.encoding.toString());\n                }\n                if (algorithmParameter.responseFormat.checkDigit != null) {\n                    this.xmlSerializer.writeAttribute(\"pskc:CheckDigit\", algorithmParameter.responseFormat.checkDigit.toString());\n                }\n                if (algorithmParameter.responseFormat.length != null) {\n                    this.xmlSerializer.writeAttribute(\"pskc:Length\", algorithmParameter.responseFormat.length.toString());\n                }\n            }\n            this.xmlSerializer.endElement('pskc:ResponseFormat');\n        }\n        this.xmlSerializer.endElement('pskc:AlgorithmParameters');\n    }\n    private writeData(data: Data) {\n        this.xmlSerializer.startElement('pskc:Data');\n        if (data != null) {\n            this.xmlSerializer.startElement('pskc:Secret');\n            if (data.secret != null) {\n                this.xmlSerializer.startElement('pskc:PlainValue');\n                if (data.secret.plainValue != null) {\n                    this.xmlSerializer.text(data.secret.plainValue);\n                }\n                this.xmlSerializer.endElement('pskc:PlainValue');\n            }\n            this.xmlSerializer.endElement('pskc:Secret');\n\n            this.xmlSerializer.startElement('pskc:Counter');\n            if (data.counter != null) {\n                this.xmlSerializer.startElement('pskc:PlainValue');\n                if (data.counter.plainValue != null) {\n                    this.xmlSerializer.text(data.counter.plainValue);\n                }\n                this.xmlSerializer.endElement('pskc:PlainValue');\n            }\n            this.xmlSerializer.endElement('pskc:Counter');\n\n            this.xmlSerializer.startElement('pskc:Time');\n            if (data.time != null) {\n                this.xmlSerializer.startElement('pskc:PlainValue');\n                if (data.time.plainValue != null) {\n                    this.xmlSerializer.text(data.time.plainValue);\n                }\n                this.xmlSerializer.endElement('pskc:PlainValue');\n            }\n            this.xmlSerializer.endElement('pskc:Time');\n\n            this.xmlSerializer.startElement('pskc:TimeDrift');\n            if (data.timeDrift != null) {\n                this.xmlSerializer.startElement('pskc:PlainValue');\n                if (data.timeDrift.plainValue != null) {\n                    this.xmlSerializer.text(data.timeDrift.plainValue);\n                }\n                this.xmlSerializer.endElement('pskc:PlainValue');\n            }\n            this.xmlSerializer.endElement('pskc:TimeDrift');\n\n            this.xmlSerializer.startElement('pskc:TimeInterval');\n            if (data.timeInterval != null) {\n                this.xmlSerializer.startElement('pskc:PlainValue');\n                if (data.timeInterval.plainValue != null) {\n                    this.xmlSerializer.text(data.timeInterval.plainValue);\n                }\n                this.xmlSerializer.endElement('pskc:PlainValue');\n            }\n            this.xmlSerializer.endElement('pskc:TimeInterval');\n        }\n        this.xmlSerializer.endElement('pskc:Data');\n\n    }\n    private writePolicy(policy: Policy) {\n        this.xmlSerializer.startElement('pskc:Policy');\n        if (policy != null) {\n            this.xmlSerializer.startElement('pskc:StartDate');\n            if (policy.startDate != null) {\n                this.xmlSerializer.text(policy.startDate.toDateString());\n            }\n            this.xmlSerializer.endElement('pskc:StartDate');\n            this.xmlSerializer.startElement('pskc:ExpiryDate');\n            if (policy.expiryDate != null) {\n                this.xmlSerializer.text(policy.expiryDate.toDateString());\n            }\n            this.xmlSerializer.endElement('pskc:ExpiryDate');\n            this.xmlSerializer.startElement('pskc:NoOfTransactions');\n            if (policy.noOfTransactions != null) {\n                this.xmlSerializer.text(policy.noOfTransactions.toString());\n            }\n            this.xmlSerializer.endElement('pskc:NoOfTransactions');\n            this.xmlSerializer.startElement('pskc:KeyUsage');\n            if (policy.keyUsage != null) {\n                this.xmlSerializer.text(KeyUsage[policy.keyUsage].toString());\n            }\n            this.xmlSerializer.endElement('pskc:KeyUsage');\n            this.xmlSerializer.startElement('pskc:PINPolicy');\n            if (policy.pinPolicy != null) {\n                this.xmlSerializer.startElement('pskc:PINKeyId');\n                if (policy.pinPolicy.pinKeyId != null) {\n                    this.xmlSerializer.text(policy.pinPolicy.pinKeyId);\n                }\n                this.xmlSerializer.endElement('pskc:PINKeyId');\n                this.xmlSerializer.startElement('pskc:PINUsageMode');\n                if (policy.pinPolicy.pinUsageMode != null) {\n                    this.xmlSerializer.text(PINUsageMode[policy.pinPolicy.pinUsageMode].toString());\n                }\n                this.xmlSerializer.endElement('pskc:PINUsageMode');\n                this.xmlSerializer.startElement('pskc:MaxFailedAttempts');\n                if (policy.pinPolicy.maxFailedAttempts != null) {\n                    this.xmlSerializer.text(policy.pinPolicy.maxFailedAttempts.toString());\n                }\n                this.xmlSerializer.endElement('pskc:MaxFailedAttempts');\n                this.xmlSerializer.startElement('pskc:MinLength');\n                if (policy.pinPolicy.minLength != null) {\n                    this.xmlSerializer.text(policy.pinPolicy.minLength.toString());\n                }\n                this.xmlSerializer.endElement('pskc:MinLength');\n                this.xmlSerializer.startElement('pskc:MaxLength');\n                if (policy.pinPolicy.maxLength != null) {\n                    this.xmlSerializer.text(policy.pinPolicy.maxLength.toString());\n                }\n                this.xmlSerializer.endElement('pskc:MaxLength');\n                this.xmlSerializer.startElement('pskc:PINEncoding');\n                if (policy.pinPolicy.pinEncoding != null) {\n                    this.xmlSerializer.text(Encoding[policy.pinPolicy.pinEncoding].toString());\n                }\n                this.xmlSerializer.endElement('pskc:PINEncoding');\n            }\n            this.xmlSerializer.endElement('pskc:PINPolicy');\n\n        }\n        this.xmlSerializer.endElement('pskc:Policy');\n    }\n    private writeToken(token: Token) {\n        this.xmlSerializer.startElement('pskc:Token');\n        if(token != null){\n            this.xmlSerializer.startElement('pskc:SerialNo');\n            if(token.serialNo != null){\n                this.xmlSerializer.text(token.serialNo);\n            }\n            this.xmlSerializer.endElement('pskc:SerialNo');\n\n            this.xmlSerializer.startElement('pskc:TokenStatus');\n            if(token.tokenStatus != null){\n                this.xmlSerializer.text(TokenStatus[token.tokenStatus].toString());\n            }\n            this.xmlSerializer.endElement('pskc:TokenStatus');\n\n            this.xmlSerializer.startElement('pskc:PIN');\n            if(token.pin != null){\n                this.xmlSerializer.text(token.pin);\n            }\n            this.xmlSerializer.endElement('pskc:PIN');\n\n            this.xmlSerializer.startElement('pskc:Attempts');\n            if(token.attempts != null){\n                this.xmlSerializer.text(token.attempts.toString());\n            }\n            this.xmlSerializer.endElement('pskc:Attempts');\n\n            this.xmlSerializer.startElement('pskc:URL');\n            if(token.url != null){\n                this.xmlSerializer.text(token.url);\n            }\n            this.xmlSerializer.endElement('pskc:URL');\n\n            this.xmlSerializer.startElement('pskc:TokenId');\n            if(token.tokenId != null){\n                this.xmlSerializer.text(token.tokenId);\n            }\n            this.xmlSerializer.endElement('pskc:TokenId');\n        }\n        this.xmlSerializer.endElement('pskc:Token');\n    }\n}","export class CipherData{\n    private _CipherValue: string | undefined;\n\n    constructor(){\n\n    }\n\n    public get CipherValue(): string | undefined {\n        return this._CipherValue;\n    }\n    public set CipherValue(value: string | undefined) {\n        this._CipherValue = value;\n    }\n}","import type { CipherData } from \"./CipherData\";\nimport type { EncryptionMethod } from \"./EncryptionMethod\";\n\n\nexport class EncryptedValue{\n\n    private _encryptionMethod: EncryptionMethod | undefined;\n\n    private _cipherData: CipherData | undefined;\n\n    constructor(){\n\n    }\n\n    public get encryptionMethod(): EncryptionMethod | undefined {\n        return this._encryptionMethod;\n    }\n    public set encryptionMethod(value: EncryptionMethod | undefined) {\n        this._encryptionMethod = value;\n    }\n    public get cipherData(): CipherData | undefined {\n        return this._cipherData;\n    }\n    public set cipherData(value: CipherData | undefined) {\n        this._cipherData = value;\n    }\n}","export class EncryptionMethod{\n\n    private _algorithm: string | undefined;\n\n    constructor(){\n\n    }\n    \n    public get algorithm(): string | undefined {\n        return this._algorithm;\n    }\n    public set algorithm(value: string | undefined) {\n        this._algorithm = value;\n    }\n\n}","import type { KeyPackage } from \"./KeyPackage\";\n\nexport class KeyContainer{\n    private _id!: string;\n    \n    private _version!: string;\n    \n    private _keyPackages: Array<KeyPackage> = new Array();\n    \n    constructor(){\n        this.version=\"1.0\";\n    \n    }\n    \n    public get id(): string {\n        return this._id;\n    }\n    public set id(value: string) {\n        this._id = value;\n    }\n\n    public get version(): string {\n        return this._version;\n    }\n    public set version(value: string) {\n        this._version = value;\n    }\n    public get keyPackages(): Array<KeyPackage> {\n        return this._keyPackages;\n    }\n    public set keyPackages(value: Array<KeyPackage>) {\n        this._keyPackages = value;\n    }\n    public add(keyPackage:KeyPackage){\n        this._keyPackages.push(keyPackage)\n    }\n    \n   \n\n\n}","import { TokenStatus } from \"./enums/TokenStatus\";\n\nexport class Token {\n    private _tokenId!: string | null;\n\n    private _serialNo!: string;\n\n    private _tokenStatus!: TokenStatus | null;\n\n    private _pin!: string | null;\n\n    private _isAuth!: boolean;\n\n    private _attempts!: number;\n\n    private _url!: string | null;\n\n\n    constructor() {\n        this.tokenStatus = TokenStatus.CREATED;\n        this.isAuth = false;\n    }\n    public get tokenId(): string | null {\n        return this._tokenId;\n    }\n    public set tokenId(value: string | null) {\n        this._tokenId = value;\n    }\n    public get serialNo(): string {\n        return this._serialNo;\n    }\n    public set serialNo(value: string) {\n        this._serialNo = value;\n    }\n    public get tokenStatus(): TokenStatus | null {\n        return this._tokenStatus;\n    }\n    public set tokenStatus(value: TokenStatus | null) {\n        this._tokenStatus = value;\n    }\n    public get pin(): string | null {\n        return this._pin;\n    }\n    public set pin(value: string | null) {\n        this._pin = value;\n    }\n    public get isAuth(): boolean {\n        return this._isAuth;\n    }\n    public set isAuth(value: boolean) {\n        this._isAuth = value;\n    }\n    public get attempts(): number {\n        return this._attempts;\n    }\n    public set attempts(value: number) {\n        this._attempts = value;\n    }\n    public get url(): string | null {\n        return this._url;\n    }\n    public set url(value: string | null) {\n        this._url = value;\n    }\n}","export class PersistenceException {\n    private message!: string;\n    private cause: any;\n    constructor(message: string, cause?: any) {\n      this.message = message;\n      if (cause) this.cause = cause;\n    }\n  }\n  ","import { PersistenceException } from './PersistenceException';\nexport class GenericException extends PersistenceException{\n    constructor(message: string, cause?: any){\n        super(message, cause);\n    }\n}","import { AlgorithmParameter } from \"../../support/pskc/AlgorithmParameter\";\nimport { ChallengeFormat } from \"../../support/pskc/ChallengeFormat\";\nimport { CipherData } from \"../../support/pskc/CipherData\";\nimport { CryptoModuleInfo } from \"../../support/pskc/CryptoModuleInfo\";\nimport { Data } from \"../../support/pskc/Data\";\nimport { DataElement } from \"../../support/pskc/DataElement\";\nimport { DeviceInfo } from \"../../support/pskc/DeviceInfo\";\nimport { EncryptedValue } from \"../../support/pskc/EncryptedValue\";\nimport { EncryptionMethod } from \"../../support/pskc/EncryptionMethod\";\nimport { Encoding } from \"../../support/pskc/enums/Encoding\";\nimport { KeyUsage } from \"../../support/pskc/enums/KeyUsage\";\nimport { PINUsageMode } from \"../../support/pskc/enums/PINUsageMode\";\nimport { TokenStatus } from \"../../support/pskc/enums/TokenStatus\";\nimport { Key } from \"../../support/pskc/Key\";\nimport { KeyContainer } from \"../../support/pskc/KeyContainer\";\nimport { KeyPackage } from \"../../support/pskc/KeyPackage\";\nimport { PinPolicy } from \"../../support/pskc/PinPolicy\";\nimport { Policy } from \"../../support/pskc/Policy\";\nimport { ResponseFormat } from \"../../support/pskc/ResponseFormat\";\nimport { Token } from \"../../support/pskc/Token\";\nimport { DOMParser } from 'xmldom';\nimport { GenericException } from \"../../persistence/exceptions/GenericException\";\n\n\nexport class KeyContainerReader {\n\n    private inputStream: string = \"\";\n    public constructor(inputStream: string) {\n        this.inputStream = inputStream;\n    }\n\n    public toKeyContainer(): KeyContainer {\n        var keyContainer: KeyContainer = new KeyContainer();\n        var keyPackage: KeyPackage = new KeyPackage();\n        try {\n            var document = new DOMParser().parseFromString(this.inputStream);\n            var KeyContainerNodeList = document.getElementsByTagName(\"pskc:KeyContainer\");\n            var attributes = KeyContainerNodeList[0]?.attributes!;\n            for (var i = 0; i < attributes?.length; i++) {\n                var attribute = attributes[i];\n                var attributeName = attribute?.nodeName;\n                var attributeTextContent = attribute?.textContent;\n                switch (attributeName) {\n                    case \"pskc:Id\":\n                        if (typeof attributeTextContent === \"string\" && attributeTextContent.trim().length != 0) {\n                            keyContainer.id = attributeTextContent;\n                        }\n                        break;\n                    case \"pskc:Version\":\n                        if (typeof attributeTextContent === \"string\" && attributeTextContent.trim().length != 0) {\n                            keyContainer.version = attributeTextContent;\n                        }\n                        break;\n                }\n            }\n            var deviceInfoNodeList = document.getElementsByTagName(\"pskc:DeviceInfo\");\n            var cryptoModuleInfoNodeList = document.getElementsByTagName(\"pskc:CryptoModuleInfo\");\n            var keyNodeList = document.getElementsByTagName(\"pskc:Key\");\n            var tokenNodeList = document.getElementsByTagName(\"pskc:Token\");\n            var deviceInfoItem = deviceInfoNodeList[0];\n            keyPackage.deviceInfo = (deviceInfoItem==null ? null : this.getDeviceInfo(deviceInfoItem));\n            var cryptoModuleInfoItem = cryptoModuleInfoNodeList[0];\n            keyPackage.cryptoModuleInfo = (cryptoModuleInfoItem == null ? null : this.getCryptoModuleInfo(cryptoModuleInfoItem));\n            var keyItem = keyNodeList[0];\n            keyPackage.key = (keyItem == null ? null : this.getKey(keyItem));\n            var tokenItem = tokenNodeList[0];\n            keyPackage.token = (tokenItem == null ? null : this.getToken(tokenItem));\n            \n            \n        } catch (error) {\n            throw new GenericException(\"Generic, nony-specific PersistenceException.\");\n        }\n        \n        keyContainer.add(keyPackage);\n        return keyContainer;\n\n    }\n\n    private getDeviceInfo(node: any): DeviceInfo {\n        var deviceInfo: DeviceInfo = new DeviceInfo();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName: string = nodeList[i].nodeName;\n            var content: string = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:Manufacturer\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.manufacturer = content;\n                    }\n                    break;\n                case \"pskc:SerialNo\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.serialNo = content;\n                    }\n                    break;\n                case \"pskc:Model\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.model = content;\n                    }\n                    break;\n                case \"pskc:IssueNumber\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.issueNumber = content;\n                    }\n                    break;\n                case \"pskc:DeviceBinding\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.deviceBinding = content;\n                    }\n                    break;\n                case \"pskc:StartDate\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.startDate = new Date(Number(content));\n                    }\n                    break;\n                case \"pskc:ExpiryDate\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.expiryDate = new Date(Number(content));\n                    }\n                    break;\n                case \"pskc:UserId\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        deviceInfo.userId = content;\n                    }\n                    break;\n            }\n        }\n        return deviceInfo;\n    }\n\n    private getCryptoModuleInfo(node: any): CryptoModuleInfo {\n        var cryptoModuleInfo: CryptoModuleInfo = new CryptoModuleInfo();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName: string = nodeList[i].nodeName;\n            var content: string = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:Id\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        cryptoModuleInfo.id = content\n                    }\n                    break;\n            }\n        }\n        return cryptoModuleInfo\n    }\n\n    private getKey(node: any): Key {\n        var key: Key = new Key();\n        var attributes = node.attributes;\n\n        for (var i = 0; i < attributes.length; i++) {\n            var attribute = attributes[i];\n            var attributeName = attribute.nodeName;\n            var attributeTextContent = attribute.textContent;\n            switch (attributeName) {\n                case \"pskc:Id\":\n                    if (typeof attributeTextContent === \"string\" && attributeTextContent.trim().length != 0) {\n                        key.id = attributeTextContent;\n                    }\n                    break;\n                case \"pskc:Algorithm\":\n                    if (typeof attributeTextContent === \"string\" && attributeTextContent.trim().length != 0) {\n                        key.algorithm = attributeTextContent;\n                    }\n                    break;\n            }\n        }\n        \n        var childNodes = node.childNodes;\n        for (var i = 0; i < childNodes.length; i++) {\n            var childNode = childNodes[i];\n            var itemName: string = childNode.nodeName;\n            var content: string = childNode.textContent;\n            switch (itemName) {\n                case \"pskc:Issuer\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        key.issuer = content;\n                    }\n                    break;\n                case \"pskc:ProfileId\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        key.profileId = content;\n                    }\n                    break;\n                case \"pskc:FriendlyName\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        key.friendlyName = content;\n                    }\n                    break;\n                case \"pskc:AlgorithmParameters\":\n                    key.algorithmParameter = this.getAlgorithmParameter(childNode);\n                    break;\n                case \"pskc:Data\":\n                    key.data = this.getData(childNode);\n                    break;\n                case \"pskc:UserId\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        key.userID = content\n                    }\n                    break;\n                case \"pskc:Policy\":\n                    key.policy = this.getPolicy(childNode);\n                    break;\n\n            }\n        }\n\n        return key;\n    }\n    private getPolicy(node: any): Policy {\n        var policy: Policy = new Policy();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var childNode = nodeList[i];\n            var nodeName: string = childNode.nodeName;\n            var nodeTextContent: string = childNode.textContent;\n            switch (nodeName) {\n                case \"pskc:PINPolicy\":\n                    policy.pinPolicy = this.getPinPolicy(childNode);\n                    break;\n                case \"pskc:NoOfTransactions\":\n                    if (typeof nodeTextContent === \"string\" && nodeTextContent.trim().length != 0) {\n                        policy.noOfTransactions = Number(nodeTextContent);\n\n                    }\n                    break;\n                case \"pskc:KeyUsage\":\n                    if (typeof nodeTextContent === \"string\" && nodeTextContent.trim().length != 0) {\n                        var keyUsage = nodeTextContent as keyof typeof KeyUsage;\n                        policy.keyUsage = KeyUsage[keyUsage];\n\n                    }\n                    break;\n                case \"pskc:ExpiryDate\":\n                    if (typeof nodeTextContent === \"string\" && nodeTextContent.trim().length != 0) {\n                        policy.expiryDate = new Date(Number(nodeTextContent));\n\n                    }\n                    break;\n                case \"pskc:StartDate\":\n                    if (typeof nodeTextContent === \"string\" && nodeTextContent.trim().length != 0) {\n                        policy.startDate = new Date(Number(nodeTextContent));\n\n                    }\n                    break;\n            }\n        }\n        return policy;\n    }\n    private getPinPolicy(node: any): PinPolicy {\n        var pinPolicy: PinPolicy = new PinPolicy();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName = nodeList[i].nodeName;\n            var content = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:PINKeyId\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        pinPolicy.pinKeyId = content;\n                    }\n                    break;\n                case \"pskc:Encoding\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        var status = content as keyof typeof Encoding\n                        pinPolicy.pinEncoding = Encoding[status];\n                    }\n                    break;\n                case \"pskc:MaxFailedAttempts\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        pinPolicy.maxFailedAttempts = Number(content);\n                    }\n                    break;\n                case \"pskc:MaxLength\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        pinPolicy.maxLength = Number(content);\n                    }\n                    break;\n                case \"pskc:MinLength\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        pinPolicy.minLength = Number(content);\n                    }\n                    break;\n                case \"pskc:PINUsageMode\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        var pinUsageMode = content as keyof typeof PINUsageMode\n                        pinPolicy.pinUsageMode = PINUsageMode[pinUsageMode];\n                    }\n                    break;\n            }\n        }\n        return pinPolicy;\n    }\n\n    private getAlgorithmParameter(node: any): AlgorithmParameter {\n        var algorithmParameter: AlgorithmParameter = new AlgorithmParameter();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var childNode = nodeList[i];\n            var itemName: string = childNode.nodeName;\n            var content: string = childNode.textContent;\n            switch (itemName) {\n                case \"pskc:Suite\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        algorithmParameter.suite = content;\n                    }\n                    break;\n                case \"pskc:ResponseFormat\":\n                    algorithmParameter.responseFormat = this.getResponseFormat(childNode);\n                    break;\n                case \"pskc:ChallengeFormat\":\n                    algorithmParameter.challengeFormat = this.getChallengeFormat(childNode);\n                    break;\n            }\n        }\n        return algorithmParameter;\n    }\n\n    private getResponseFormat(node: any): ResponseFormat {\n        var responseFormat: ResponseFormat = new ResponseFormat();\n        var attributes = node.attributes;\n        for (var i = 0; i < attributes.length; i++) {\n            var childNode = attributes[i];\n            var itemName: string = childNode.nodeName;\n            var content: string = childNode.textContent;\n            switch (itemName) {\n                case \"pskc:CheckDigit\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        responseFormat.checkDigit = JSON.parse(content);\n                    }\n                    break;\n                case \"pskc:Encoding\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        var status = content as keyof typeof Encoding\n                        responseFormat.encoding = Encoding[status];\n                    }\n                    break;\n            }\n        }\n        return responseFormat;\n    }\n\n    private getChallengeFormat(node: any): ChallengeFormat {\n        var challengeFormat: ChallengeFormat = new ChallengeFormat();\n        var nodeMap = node.attributes;\n        for (var i = 0; i < nodeMap.length; i++) {\n            var item = nodeMap[i]\n            var itemName: string = item.nodeName;\n            var content: string = item.textContent;\n            switch (itemName) {\n                case \"pskc:CheckDigit\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        challengeFormat.checkDigit = Boolean(content);\n                    }\n                    break;\n                case \"pskc:Encoding\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        var status = content as keyof typeof Encoding\n                        challengeFormat.encoding = Encoding[status];\n                    }\n                    break;\n                case \"pskc:max\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        challengeFormat.max = Number(content);\n                    }\n                    break;\n                case \"pskc:Min\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        challengeFormat.min = Number(content);\n                    }\n                    break;\n            }\n        }\n        return challengeFormat;\n    }\n\n    private getData(node: any): Data {\n        var data: Data = new Data();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName: string = nodeList[i].nodeName;\n            var content: string = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:Secret\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        data.secret = this.getDataElement(nodeList[i]);\n                    }\n                    break;\n                case \"pskc:TimeInterval\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        data.timeInterval = this.getDataElement(nodeList[i]);\n                    }\n                    break;\n                case \"pskc:Time\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        data.time = this.getDataElement(nodeList[i]);\n                    }\n                    break;\n                case \"pskc:Counter\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        data.counter = this.getDataElement(nodeList[i]);\n                    }\n                    break;\n                case \"pskc:TimeDrift\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        data.timeDrift = this.getDataElement(nodeList[i]);\n                    }\n                    break;\n            }\n        }\n        return data;\n    }\n    private getDataElement(node: any): DataElement {\n        var dataElement: DataElement = new DataElement(null);\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName: string = nodeList[i].nodeName;\n            var content: string = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:PlainValue\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        dataElement.plainValue = content;\n                    }\n                    break;\n                case \"pskc:ValueMac\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        dataElement.valueMac = content;\n                    }\n                    break;\n                case \"pskc:EncryptedValue\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        dataElement.encryptedValue = this.getEncryptedValue(nodeList[i]);\n                    }\n                    break;\n            }\n        }\n        return dataElement;\n    }\n\n    private getEncryptedValue(node: any): EncryptedValue {\n        var encryptedValue: EncryptedValue = new EncryptedValue();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName: string = nodeList[i].nodeName;\n            var content: string = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:CipherData\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        encryptedValue.cipherData = this.getCipherData(nodeList[i]);\n                    }\n                    break;\n                case \"pskc:EncryptionMethod\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        encryptedValue.encryptionMethod = this.getEncryptionMethod(nodeList[i]);\n                    }\n                    break;\n            }\n        }\n        return encryptedValue;\n    }\n\n    private getCipherData(node: any): CipherData {\n        var cipherData: CipherData = new CipherData;\n\n        var nodeList = node.childNodes;\n\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName: string = nodeList[i].nodeName;\n            var content: string = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:CipherValue\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        cipherData.CipherValue = content;\n                    }\n                    break;\n            }\n        }\n\n        return cipherData;\n    }\n\n    private getEncryptionMethod(node: any): EncryptionMethod {\n        var encryptionMethod: EncryptionMethod = new EncryptionMethod();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var itemName: string = nodeList[i].nodeName;\n            var content: string = nodeList[i].textContent;\n            switch (itemName) {\n                case \"pskc:Algorithm\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        encryptionMethod.algorithm = content\n                    }\n                    break;\n            }\n        }\n        return encryptionMethod;\n    }\n\n    private getToken(node: any): Token {\n        var token: Token = new Token();\n        var nodeList = node.childNodes;\n        for (var i = 0; i < nodeList.length; i++) {\n            var item = nodeList[i];\n            var itemName = item.nodeName;\n            var content = item.textContent;\n            switch (itemName) {\n                case \"pskc:TokenId\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        token.tokenId = content;\n                    }\n                    break;\n                case \"pskc:SerialNo\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        token.serialNo = content;\n                    }\n                    break;\n                case \"pskc:TokenStatus\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        var status = content as keyof typeof TokenStatus\n                        token.tokenStatus = TokenStatus[status];\n                    }\n                    break;\n                case \"pskc:Attempts\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        token.attempts = Number(content);\n                    }\n                    break;\n                case \"pskc:PIN\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        token.pin = content;\n                    }\n                    break;\n                case \"pskc:URL\":\n                    if (typeof content === \"string\" && content.trim().length != 0) {\n                        token.url = content;\n                    }\n                    break;\n            }\n        }\n        return token;\n    }\n}","import { PersistenceException } from './PersistenceException';\nexport class ConstraintViolationException extends PersistenceException{\n    constructor(message : string, cause? : any){\n        super(message, cause);\n    }\n}","import { PersistenceException } from './PersistenceException';\nexport class DataException extends PersistenceException{\n    constructor(message: string, cause?: any){\n        super(message, cause);\n    }\n}","import { PersistenceException } from './PersistenceException';\nexport class NotFoundException extends PersistenceException{\n    constructor(message: string, cause?: any){\n        super(message, cause);\n    }\n}","import CryptoES from \"crypto-es\";\n\nexport class HashUtils {\n   constructor(){\n      throw new Error(\"Not Allowed.\")\n   }\n     static stringSha256(message: string): string | null{\n      return CryptoES.SHA256(message).toString(CryptoES.enc.Hex);\n  }\n}\n","import { Filesystem, Directory, Encoding } from '@capacitor/filesystem';\n\nimport { ConstraintViolationException } from '../exceptions/ConstraintViolationException';\nimport { GenericException } from '../exceptions/GenericException';\nimport { NotFoundException } from '../exceptions/NotFoundException';\nimport { HashUtils } from './HashUtils';\n\nexport class PSKCFileUtils {\n\n    static TESSERACT_PSKC_DIRECTORY: string = \"tesseract/pskc/\";\n    static PSKC_EXTENSION: string = \".pskc\";\n    static UTF_8: string = \"UTF-8\";\n\n    constructor() {\n        throw new Error(\"Not Allowed.\")\n    }\n\n    private static tesseractPSKCDirectory = async () => {\n        await Filesystem.mkdir({\n            directory: Directory.Data,\n            path: this.TESSERACT_PSKC_DIRECTORY, recursive: true,\n        }).catch((error) => {\n            console.log(\"Alredy created\", error)\n        });\n    };\n\n    public static async findByFileName(fileName: string): Promise<string> {\n        return await this.readFile(fileName);\n    }\n\n    public static async find(friendlyName: string) {\n        await this.tesseractPSKCDirectory();\n        const fileName: String = HashUtils.stringSha256(friendlyName) + this.PSKC_EXTENSION;\n        return fileName;\n    };\n    public static async findOrFailed(friendlyName: string): Promise<string> {\n        const tokenFileName: string = HashUtils.stringSha256(friendlyName) + PSKCFileUtils.PSKC_EXTENSION;\n        try {\n            await Filesystem.stat(\n                {\n                    path: this.TESSERACT_PSKC_DIRECTORY + '/' + tokenFileName,\n                    directory: Directory.Data\n                }\n            );\n            return await this.findByFileName(tokenFileName);\n        } catch (checkDirException) {\n            throw new NotFoundException(`Not found PSKC ${tokenFileName}`)\n        }\n    }\n\n    public static write = async (friendlyName: string, content: string) => {\n        var fileName = await this.find(friendlyName)\n        try {\n            await Filesystem.writeFile({\n                path: this.TESSERACT_PSKC_DIRECTORY + '/' + fileName,\n                data: content,\n                directory: Directory.Data,\n                encoding: Encoding.UTF8,\n            });\n        } catch (error) {\n            throw new GenericException(\"Generic, nony-specific PersistenceException.\");\n        }\n    };\n\n    public static list = async () => {\n        var list = null\n        try {\n            list = await Filesystem.readdir({\n                path: '/' + this.TESSERACT_PSKC_DIRECTORY,\n                directory: Directory.Data\n            });\n        } catch (error) {\n            throw new GenericException(\"Generic, nony-specific PersistenceException.\");\n        }\n        return list?.files;\n    };\n\n    public static delete = async (friendlyName: string) => {\n        var fileName = await this.find(friendlyName)\n        await Filesystem.deleteFile({\n            path: this.TESSERACT_PSKC_DIRECTORY + '/' + fileName,\n            directory: Directory.Data,\n        }).catch((err)=>{\n            throw new GenericException(\"Generic, nony-specific PersistenceException.\");\n        })\n    };\n\n    private static readFile = async (fileName: string) => {\n        const contents = await Filesystem.readFile({\n            path: this.TESSERACT_PSKC_DIRECTORY + '/' + fileName,\n            directory: Directory.Data,\n            encoding: Encoding.UTF8,\n        });\n        return contents.data;\n    };\n\n\n}\n\n\n","import { KeyContainer } from \"../../../support/pskc/KeyContainer\";\nimport { KeyPackage } from \"../../../support/pskc/KeyPackage\";\nimport { StringUtils } from \"../../../utils/StringUtils\";\nimport { KeyContainerFactory } from \"../../../xml/factories/KeyContainerFactory\";\nimport { KeyContainerReader } from \"../../../xml/readers/KeyContainerReader\";\nimport { ConstraintViolationException } from \"../../exceptions/ConstraintViolationException\";\nimport { DataException } from \"../../exceptions/DataException\";\nimport { GenericException } from \"../../exceptions/GenericException\";\nimport { PSKCFileUtils } from \"../../utils/PSKCFileUtils\";\nimport type { IKeyContainerRepository } from \"../IKeyContainerRepository\";\n\nexport class KeyContainerRepository implements IKeyContainerRepository {\n    constructor() {\n\n    }\n    async find(s: string): Promise<KeyContainer | null> {\n        if (StringUtils.isEmptyOrNull(s)) {\n            throw new DataException(\"Illegal argument not can't be empty or null\");\n        }\n        const file = await PSKCFileUtils.findOrFailed(s);\n        try {\n            var keyContainer = new KeyContainerReader(file).toKeyContainer();\n            return keyContainer\n        } catch (error) {\n            console.log(error)\n        }\n        return null;\n    }\n    async findAll(): Promise<KeyContainer[]> {\n        var keyContainers = new Array<KeyContainer>();\n        var fileList = await PSKCFileUtils.list();\n        for (const file of fileList) {\n            var keyContainer: KeyContainer;\n            try {\n                keyContainer = new KeyContainerReader(await PSKCFileUtils.findByFileName(file.name)).toKeyContainer();\n                keyContainers.push(keyContainer);\n            } catch (error) {\n                console.log(error)\n            }\n        }\n        return keyContainers;\n    }\n    async save(keyContainer: KeyContainer): Promise<KeyContainer> {\n        try {\n            if (keyContainer.keyPackages.length == 0) {\n                throw new ConstraintViolationException(\"Not found KeyPackage in KeyContainer\");\n            }\n            keyContainer.keyPackages.forEach(keyPackage => {\n                if (StringUtils.isEmptyOrNull(keyPackage.key!.friendlyName)) {\n                    throw new DataException(\"Illegal argument 'Friendly Name' not can't be empty or null\");\n                }\n            })\n            const friendlyName = keyContainer.keyPackages[0].key?.friendlyName;\n            \n            const xmlKeyContainer = new KeyContainerFactory(keyContainer).toXmlString();\n            \n            await PSKCFileUtils.write(friendlyName!, xmlKeyContainer);\n        } catch (error) {\n            throw new GenericException(\"Generic, nony-specific PersistenceException.\");\n        }\n        return keyContainer;\n    }\n    async delete(s: string) {\n        const keyContainer = await this.find(s);\n        await PSKCFileUtils.delete(s);\n    }\n    async update(s: string, keyContainer: KeyContainer): Promise<KeyContainer> {\n        if (s != keyContainer.keyPackages[0].key?.friendlyName) {\n            throw new DataException(\"Not match ID \" + s);\n        }\n        await this.delete(s);\n        return await this.save(keyContainer)\n    }\n\n}","import { Device } from '@capacitor/device';\nimport { DeviceInfo } from '../../support/pskc/DeviceInfo';\nexport class DeviceInfoBuilder {\n  static mDeviceId: string;\n  static mDeviceName: string;\n  static mUserAgent: string;\n  static MANUFACTURER_FIELD = \"MANUFACTURER\";\n  static USER_AGENT_TEMP = \"Ionic\";\n\n  static async getDeviceModelAndManufacturer(): Promise<string> {\n    if (DeviceInfoBuilder.mDeviceName == null) {\n      const info = await Device.getInfo();\n      var model = info.model\n      var deviceName = model;\n      var manufacturer = info.manufacturer;\n      if (manufacturer != null) {\n        deviceName = manufacturer + ' ' + model;\n      }\n      DeviceInfoBuilder.mDeviceName = deviceName;\n    }\n    return DeviceInfoBuilder.mDeviceName;\n  }\n\n  static async getUserAgent() {\n    const info = await Device.getInfo();\n    if (DeviceInfoBuilder.mUserAgent == null) {\n      DeviceInfoBuilder.mUserAgent = DeviceInfoBuilder.USER_AGENT_TEMP + info.osVersion + '; ' + await this.getDeviceModelAndManufacturer();\n    }\n    return DeviceInfoBuilder.mUserAgent;\n  }\n\n\n  static async build() {\n    const info = await Device.getInfo();\n    const id = await Device.getId();\n    var deviceInfo = new DeviceInfo();\n    deviceInfo.manufacturer = info.manufacturer;\n    deviceInfo.model = info.model;\n    deviceInfo.issueNumber = id.uuid;\n    deviceInfo.deviceBinding = id.uuid;\n    deviceInfo.serialNo = id.uuid;\n    return deviceInfo;\n  }\n\n\n}\n","import { CryptoModuleInfo } from \"../../support/pskc/CryptoModuleInfo\";\nimport type { DeviceInfo } from \"../../support/pskc/DeviceInfo\";\nimport { Key } from \"../../support/pskc/Key\";\nimport { KeyContainer } from \"../../support/pskc/KeyContainer\";\nimport { KeyPackage } from \"../../support/pskc/KeyPackage\";\nimport { Token } from \"../../support/pskc/Token\";\nimport { DeviceInfoBuilder } from \"./DeviceInfoBuilder\";\n\nexport class KeyContainerBuilder {\n    private friendlyName!: string;\n    constructor(friendlyName: string) {\n        this.friendlyName = friendlyName\n    }\n\n    public async build(): Promise<KeyContainer> {\n        var keyContainer: KeyContainer = new KeyContainer();\n        var deviceInfo = await DeviceInfoBuilder.build();\n        var cryptoModuleInfo: CryptoModuleInfo = new CryptoModuleInfo();\n        var key: Key = new Key();\n        key.friendlyName = this.friendlyName;\n        var token: Token = new Token();\n        var keyPackage: KeyPackage = new KeyPackage();\n        keyPackage.deviceInfo = deviceInfo!;\n        keyPackage.cryptoModuleInfo = cryptoModuleInfo;\n        keyPackage.key = key;\n        keyPackage.token = token;\n        keyContainer.add(keyPackage);\n\n        return keyContainer;\n\n    }\n}","export class KeyContainerException {\n    private message!: string;\n    private cause:any;\n    constructor(m:string) {\n        this.message = m;\n        this.cause = \"KeyContainerException\"\n        console.log(this.message)\n    }\n}","export class LunaUtils {\n  static hexStringToByteArray(s: string) {\n    var result = [];\n    for (var i = 0; i < s.length; i += 2) {\n      if(!isNaN(parseInt(s.substr(i, 2), 16))){\n        if(parseInt(s.substr(i, 2), 16)>127){\n          result.push(parseInt(s.substr(i, 2), 16)-256);\n        }else{\n          result.push(parseInt(s.substr(i, 2), 16));\n        }\n      } \n    }\n    \n    return result;\n    /*\n    for (var bytes = [], c = 0; c < s.length; c += 2)\n      bytes.push(parseInt(s.substr(c, 2), 16));\n    return bytes;\n  var numBytes = s.length / 2;\n  var byteArray = new Uint8Array(numBytes);\n  for (var i=0; i<numBytes; i++) {\n      byteArray[i/2] = parseInt(s.substr(i, 2), 16);\n  }\n  return byteArray;*/\n\n  }\n  static bytesToHex(bytes: string | any[]) {\n    for (var hex = [], i = 0; i < bytes.length; i++) {\n      var current = bytes[i] < 0 ? bytes[i] + 256 : bytes[i];\n      hex.push((current >>> 4).toString(16));\n      hex.push((current & 0xF).toString(16));\n    }\n    return hex.join(\"\");\n  }\n\n}","export class PasswordKey {\n    private _key: string;\n    private _salt: string;\n\n    constructor(key: string, salt: string) {\n        this._key = key;\n        this._salt = salt;\n    }\n    public get key(): string {\n        return this._key;\n    }\n    public set key(value: string) {\n        this._key = value;\n    }\n    public get salt(): string {\n        return this._salt;\n    }\n    public set salt(value: string) {\n        this._salt = value;\n    }\n\n}","import { Base64 } from 'js-base64';\nimport CryptoES from 'crypto-es';\nimport { PasswordKey } from '../models/PasswordKey';\n\nexport class CipherAesUtils {\n    static AES_NAME: string = \"AES\";\n    static KEY_DERIVATION_ALGORITHM: string = \"PBKDF2WithHmacSHA1\";\n    static PBKDF_DEFAULT_ITERATIONS: number = 10000;\n    static KEY_SIZE: number = 256;\n    static IV_SIZE: number = 16;\n    static SALT_LENGTH: number = 8;\n\n    public static decryptData(cipherText: number[], password: string) {\n        var encryptionSalt = Base64.fromUint8Array(new Uint8Array(cipherText.slice(0, 8)));\n        var iv = Base64.fromUint8Array(new Uint8Array(cipherText.slice(8, 24)));\n        var textPlain = Base64.fromUint8Array(new Uint8Array(cipherText.slice(24, cipherText.length)));\n        return this.decryptSalt(textPlain, password, encryptionSalt, iv);\n    }\n    private static decryptSalt(plainText: string, password: string, encryptionSalt: string, iv: string) {\n        var encryptionKey = CryptoES.PBKDF2(password, CryptoES.enc.Base64.parse(encryptionSalt), { keySize: 256 / 32, iterations: 10000 });\n        return this.decrypt(plainText, new PasswordKey(Base64.fromUint8Array(convert_word_array_to_uint8Array(encryptionKey)), encryptionSalt), iv, encryptionKey);\n    }\n    private static decrypt(plainText: string, decryptionKey: PasswordKey, iv: string, encryptionKey: CryptoES.lib.WordArray):string|null {\n        var decrypted = null;\n        try {\n            decrypted = CryptoES.AES.decrypt(\n                { ciphertext: CryptoES.enc.Base64.parse(plainText) },\n                encryptionKey,\n                { iv: CryptoES.enc.Base64.parse(iv) }\n              ).toString(CryptoES.enc.Utf8);\n            return decrypted;\n        } catch (error) {\n            console.log(error);\n        }\n        return decrypted;\n    }\n}\n//Not in original\nfunction convert_word_array_to_uint8Array(wordArray: any) {\n    var len = wordArray.words.length,\n        u8_array = new Uint8Array(len << 2),\n        offset = 0, word, i\n        ;\n    for (i = 0; i < len; i++) {\n        word = wordArray.words[i];\n        u8_array[offset++] = word >> 24;\n        u8_array[offset++] = (word >> 16) & 0xff;\n        u8_array[offset++] = (word >> 8) & 0xff;\n        u8_array[offset++] = word & 0xff;\n    }\n    return u8_array;\n}\n\n","import type { DeviceInfo } from \"../../support/pskc/DeviceInfo\";\nimport type { Token } from \"../../support/pskc/Token\";\nimport { DeviceInfoBuilder } from \"../../xml/builders/DeviceInfoBuilder\";\n\nexport class CreateRequest {\n    static ACCEPT: string = \"Accept\";\n\n    static ACCEPT_VALUE: string = \"application/pskc+xml\";\n\n    static CONTENT_TYPE: string = \"Content-Type\";\n\n    static CONTENT_TYPE_VALUE: string = \"application/json\";\n\n    static USER_AGENT: string = \"User-Agent\";\n\n    static METHOD_POST: string = \"POST\";\n\n    static BASE_URL: string = \"/api/v2/tokens/\";\n\n    static READ_TIMEOUT = 10000;\n\n    static CONNECTION_TIMEOUT = 15000;\n\n    private _url!: string;\n\n    private _body!: { token_serial: String; manufacturer: string; serial_no: string; model: string; issue_number: string; device_binding: string; };\n\n    private _headers!: Headers;\n\n    constructor(token: Token, deviceInfo: DeviceInfo) {\n        this.url = token.url + CreateRequest.BASE_URL + token.tokenId;\n\n        this.headers = new Headers();\n        this.headers.append(CreateRequest.ACCEPT, CreateRequest.ACCEPT_VALUE);\n        this.headers.append(CreateRequest.CONTENT_TYPE, CreateRequest.CONTENT_TYPE_VALUE);\n\n        this.body = {\n            \"token_serial\": token.serialNo,\n            \"manufacturer\": deviceInfo.manufacturer,\n            \"serial_no\": deviceInfo.serialNo!,\n            \"model\": deviceInfo.model,\n            \"issue_number\": deviceInfo.issueNumber!,\n            \"device_binding\": deviceInfo.deviceBinding!\n        }\n    }\n\n    static async init(headers:Headers):Promise<Headers> {\n        var userAgent = await DeviceInfoBuilder.getUserAgent();\n        headers.append(CreateRequest.USER_AGENT, userAgent)\n        return headers;\n    }\n\n\n    public get url(): string {\n        return this._url;\n    }\n    public set url(value: string) {\n        this._url = value;\n    }\n    public get body(): { token_serial: String; manufacturer: string; serial_no: string; model: string; issue_number: string; device_binding: string; } {\n        return this._body;\n    }\n    public set body(value: { token_serial: String; manufacturer: string; serial_no: string; model: string; issue_number: string; device_binding: string; }) {\n        this._body = value;\n    }\n    public get headers(): Headers {\n        return this._headers;\n    }\n    public set headers(value: Headers) {\n        this._headers = value;\n    }\n\n}","\nimport { AlgorithmParameter } from \"../../support/pskc/AlgorithmParameter\";\nimport { CryptoModuleInfo } from \"../../support/pskc/CryptoModuleInfo\";\nimport { Data } from \"../../support/pskc/Data\";\nimport { DeviceInfo } from \"../../support/pskc/DeviceInfo\";\nimport { Key } from \"../../support/pskc/Key\";\nimport { KeyContainer } from \"../../support/pskc/KeyContainer\";\nimport { KeyPackage } from \"../../support/pskc/KeyPackage\";\nimport { Policy } from \"../../support/pskc/Policy\";\nimport { Token } from \"../../support/pskc/Token\";\n\n\nexport class KeyContainerUtils {\n    constructor(){\n        throw new Error(\"Not Allowed.\")\n    }\n    public static mergeEnrollmentString(token: Token, enrollmentString: string): Token {\n        enrollmentString.split(\";\").forEach(keyValue => {\n            var keyValueSplit: string[] = keyValue.split(\"=\");\n            switch (keyValueSplit[0]) {\n                case \"tokenId\":\n                    token.tokenId = keyValueSplit[1]!;\n                    break;\n                case \"serial\":\n                    token.serialNo = keyValueSplit[1]!;\n                    break;\n                case \"url\":\n                    token.url = keyValueSplit[1]!;\n                    break;\n            }\n        })\n        return token;\n    }\n    public static merge(first: KeyContainer, second: KeyContainer): KeyContainer {\n        if (second.id != null) {\n            first.id = second.id;\n        }\n        if (second.version != null) {\n            first.version = second.version;\n        }\n        if (first.keyPackages.length == 1 && first.keyPackages.length == 1) {\n            var firstKeyPackage: KeyPackage = first.keyPackages[0]!;\n            var secondKeyPackage: KeyPackage = second.keyPackages[0]!;\n\n            first.keyPackages = [];\n            first.add(this.mergeKP(firstKeyPackage, secondKeyPackage));\n        }\n        return first;\n\n    }\n    public static mergeKP(first: KeyPackage, second: KeyPackage) {\n        if (first.deviceInfo != null && second.deviceInfo != null) {\n            first.deviceInfo = this.mergeDI(first.deviceInfo, second.deviceInfo);  \n        }\n        if(first.cryptoModuleInfo != null && second.cryptoModuleInfo != null){\n            first.cryptoModuleInfo = this.mergeCMI(first.cryptoModuleInfo,second.cryptoModuleInfo);\n        }\n        if(first.key != null && second.key != null){\n            first.key = this.mergeKey(first.key,second.key);\n        }\n        if(first.token != null && second.token != null){\n            first.token = this.mergeToken(first.token,second.token);\n        }\n        return first;\n    }\n\n\n    public static mergeDI(first: DeviceInfo, second: DeviceInfo): DeviceInfo {\n        if (first.manufacturer == null) {\n            first.manufacturer = second.manufacturer;\n        }\n        if (first.serialNo == null) {\n            first.serialNo = second.serialNo;\n        }\n        if (first.model == null) {\n            first.model = second.model;\n        }\n        if (first.issueNumber == null) {\n            first.issueNumber = second.issueNumber;\n        }\n        if (first.deviceBinding == null) {\n            first.deviceBinding = second.deviceBinding;\n        }\n        if (second.startDate != null) {\n            first.startDate = second.startDate\n        }\n        if (second.expiryDate != null) {\n            first.expiryDate = second.expiryDate;\n        }\n        if (second.userId != null) {\n            first.userId = second.userId;\n        }\n        return first;\n    }\n\n    public static mergeCMI(first: CryptoModuleInfo, second: CryptoModuleInfo) {\n        if (second.id != null) {\n            first.id = second.id;\n        }\n        return first;\n    }\n\n    public static mergeKey(first: Key, second: Key): Key {\n        first.algorithmParameter = new AlgorithmParameter();\n        if (second.id != null) {\n            first.id = second.id;\n        }\n        if (second.algorithm != null) {\n            first.algorithm = second.algorithm;\n        }\n        if (second.issuer != null) {\n            first.issuer = second.issuer;\n        }\n        if (second.profileId != null) {\n            first.profileId = second.profileId;\n        }\n        if (second.referenceId != null) {\n            first.referenceId = second.referenceId;\n        }\n        if (second.friendlyName != null) {\n            first.friendlyName = second.friendlyName;\n        }\n        if (second.algorithmParameter != null) {\n            first.algorithmParameter = this.mergeAP(first.algorithmParameter,second.algorithmParameter)\n        }\n        if (second.data != null) {\n            first.data = this.mergeData(first.data,second.data)\n        }\n        if (second.userID != null) {\n            first.userID = second.userID;\n        }\n        if (second.policy != null && second.policy != null) {\n            first.policy = this.mergePolicy(first.policy, second.policy);\n        }\n        return first;\n    }\n\n    public static mergeAP(first: AlgorithmParameter, second: AlgorithmParameter): AlgorithmParameter {\n        if (second.suite != null) {\n            first.suite = second.suite;\n        }\n        if (second.challengeFormat != null) {\n            first.challengeFormat = second.challengeFormat;\n        }\n        if (second.responseFormat != null) {\n            first.responseFormat = second.responseFormat;\n        }\n        \n        return first;\n    }\n\n    private static mergeData(first: Data, second: Data): Data {\n        first = new Data();\n        if (second.secret != null) {\n            first.secret = second.secret;\n        }\n        if (second.counter != null) {\n            first.counter = second.counter;\n        }\n        if (second.time != null) {\n            first.time = second.time\n        }\n        if (second.timeInterval != null) {\n            first.timeInterval = second.timeInterval;\n        }\n        if (second.timeDrift != null) {\n            first.timeDrift = second.timeDrift;\n        }\n        return first;\n    }\n\n    private static mergePolicy(first: Policy, second: Policy): Policy {\n        first = new Policy();\n        if (second.startDate != null) {\n            first.startDate = second.startDate;\n        }\n        if (second.expiryDate != null) {\n            first.expiryDate = second.expiryDate;\n        }\n        if (second.noOfTransactions != null) {\n            first.noOfTransactions = second.noOfTransactions;\n        }\n        if (second.keyUsage != null) {\n            first.keyUsage = second.keyUsage;\n        }\n        if (second.pinPolicy != null) {\n            first.pinPolicy = second.pinPolicy;\n        }\n        return first;\n    }\n\n    public static mergeToken(first: Token, second: Token): Token {\n        if (second.pin != null) {\n            first.serialNo = second.serialNo;\n        }\n        if (second.tokenStatus != null) {\n            first.tokenStatus = second.tokenStatus;\n        }\n        return first;\n    }\n}","import { IKeyContainerRepository } from \"../../persistence/repositories/IKeyContainerRepository\";\nimport { KeyContainer } from \"../../support/pskc/KeyContainer\";\nimport { ActivationCallback } from \"../callbacks/ActivationCallback\";\nimport { Result } from \"../../support/domain/Result\";\nimport { CreateRequest } from \"./Request\";\nimport { HTTP } from \"@ionic-native/http/ngx\";\nimport { KeyContainerReader } from \"../../xml/readers/KeyContainerReader\";\nimport { KeyContainerUtils } from \"../../xml/utils/KeyContainerUtils\";\nimport { TokenStatus } from \"../../support/pskc/enums/TokenStatus\";\n\nexport class AsyncClientTask {\n    private activationCallback!: ActivationCallback;\n    private iKeyContainerRepository!: IKeyContainerRepository;\n    private keyContainer!: KeyContainer;\n    private http: HTTP = new HTTP();\n\n    constructor(activationCallback: ActivationCallback,\n        iKeyContainerRepository: IKeyContainerRepository,\n        keyContainer: KeyContainer) {\n        this.activationCallback = activationCallback;\n        this.iKeyContainerRepository = iKeyContainerRepository;\n        this.keyContainer = keyContainer\n\n    }\n\n    async execute(request: CreateRequest) {\n        await this.doInBackground(request);\n    }\n\n    async doInBackground(requests: CreateRequest){\n        var result: Result = Result.SUCCESS;\n        var conn: HTTP = this.http;\n        var request: CreateRequest = requests;\n        conn.setDataSerializer('json');\n        var head = await CreateRequest.init(request.headers)\n\n        var headers = {\n            'Accept': head.get(\"Accept\"),\n            'Content-Type': head.get(\"Content-Type\"),\n            'User-Agent': head.get(\"User-Agent\")\n        }\n        await conn.post(request.url, request.body, headers).then(async (response) => {\n            \n            var keyContainer = new KeyContainerReader(response.data).toKeyContainer();\n            \n            const mergeKeyContainer: KeyContainer = KeyContainerUtils.merge(this.keyContainer, keyContainer);\n            \n            mergeKeyContainer.keyPackages[0].token!.url = null;\n            mergeKeyContainer.keyPackages[0].token!.tokenId = null;\n            mergeKeyContainer.keyPackages[0].token!.tokenStatus = TokenStatus.WAITING_PIN;\n            mergeKeyContainer.keyPackages[0].deviceInfo!.serialNo = null;\n            mergeKeyContainer.keyPackages[0].deviceInfo!.deviceBinding = null;\n            mergeKeyContainer.keyPackages[0].deviceInfo!.issueNumber = null;\n            this.keyContainer = await this.iKeyContainerRepository.update(mergeKeyContainer.keyPackages[0].key!.friendlyName, mergeKeyContainer);\n\n            result = Result.SUCCESS;\n        }).catch((response) => {\n            if (response.status != 200) {\n\n                if (response.error.includes(\"Invalid Token Status 'UNASSIGNED'\")) {\n                    result = Result.INVALID_TOKEN_IS_UNASSIGNED;\n                } else if (response.error.includes(\"Invalid Token Status 'WAITING'\")) {\n                    result = Result.INVALID_TOKEN_IS_WAITING;\n                } else if (response.error.includes(\"Invalid Token Status 'ASSIGNED'\")) {\n                    result = Result.INVALID_TOKEN_IS_ASSIGNED;\n                } else if (response.error.includes(\"Invalid Token Status 'ACTIVE'\")) {\n                    result = Result.INVALID_TOKEN_ALREADY_ACTIVATED;\n                } else if (response.error.includes(\"Invalid Token Status 'REVOKED'\")) {\n                    result = Result.INVALID_TOKEN_IS_REVOKED;\n                } else if (response.error.includes(\"Invalid Token Status 'BLOCKED'\")) {\n                    result = Result.INVALID_TOKEN_IS_BLOCKED;\n                } else if (response.error.includes(\"corrupt\") || response.error.contains(\"Invalid Token Serial\")) {\n                    result = Result.TOKEN_INFORMATION_CORRUPT;\n                } else if (response.error.includes(\"Not match body token_serial 'id' with path 'token_id\")) {\n                    result = Result.NO_MATCH_BODY_TOKEN_SERIAL;\n                } else {\n                    result = Result.UNKNOWN_ERROR;\n                }\n                console.log(\"on error\", response.error)\n            }\n        })\n        if (result == Result.SUCCESS) {\n            await this.activationCallback.success();\n        } else {\n            await this.activationCallback.failed(result);\n        }\n    }\n\n}\n","export class EnrollmentStringException{\n    private message!: string;\n    private cause: any;\n    constructor(message: string, cause?: any) {\n      this.message = message;\n      if (cause) this.cause = cause; \n    }\n}","import { Key } from \"../../../support/pskc/Key\";\nimport { decode } from 'js-base64';\nimport { AlgorithmUtils } from \"../../AlgorithmUtils\";\n\nexport class OneTimePassword {\n\n  constructor() {\n    throw new Error(\"Illegal\")\n  }\n\n  private static calcCheckSum(num: number, digits: number): number {\n    var doubleDigit: boolean = true;\n    var total: number = 0;\n    while (0 < digits--) {\n      var digit = Math.round(Number(num % 10));\n      num /= 10;\n      if (doubleDigit) {\n        digit = AlgorithmUtils.DOUBLE_DIGITS[digit];\n      }\n      total += digit;\n      doubleDigit = !doubleDigit;\n    }\n    var result = total % 10;\n    if (result > 0) {\n      result = 10 - result;\n    }\n    return result;\n  }\n\n  static generateOTP(key: Key, truncationOffset: number, timeCorrection: number): string {\n    let result: string;\n    let length = key.algorithmParameter.responseFormat?.length!!\n    let digits: number = key.algorithmParameter.responseFormat?.checkDigit ? (length + 1) : (length);\n    let movingFactor = BigInt(this.movingFactor(Number(key.data.timeInterval?.plainValue), timeCorrection));\n    let text = new Uint8Array(8);\n\n    for (let i = text.length - 1; i >= 0; i--) {\n      text[i] = Number(movingFactor & BigInt(0xff));\n      movingFactor = movingFactor >> BigInt(8);\n    }\n\n    const secret: string = decode(key.data.secret?.plainValue!);\n    var bArray = AlgorithmUtils.hexStr2Bytes(secret);\n    // compute hmac hash\n    var hash = AlgorithmUtils.hmac_sha1(key.algorithmParameter.suite!, new Uint8Array(bArray), new Uint8Array(text));\n    // put selected bytes into result int\n    var offset = hash![hash!.length - 1] & 0xf;\n    if ((0 <= truncationOffset) &&\n      (truncationOffset < (hash!.length - 4))) {\n      offset = truncationOffset;\n    }\n\n\n    var binary: number = (\n      (hash![offset] & 0x7f) << 24) |\n      ((hash![offset + 1] & 0xff) << 16) |\n      ((hash![offset + 2] & 0xff) << 8) |\n      (hash![offset + 3] & 0xff\n      );\n    var otp = binary % AlgorithmUtils.calcDigitsPower(key.algorithmParameter.responseFormat?.length!)\n    if (key.algorithmParameter.responseFormat?.checkDigit) {\n      otp = (otp * 10) + this.calcCheckSum(otp, key.algorithmParameter.responseFormat.length)\n    }\n    result = String(otp)\n    while (result.length < digits) {\n      result += \"0\"\n    }\n    return result\n  }\n\n  public static getTimeInMillis(): number {\n    return new Date().getTime();\n    // return 1674678050558;\n  }\n\n  public static movingFactor(time: number, timeDifference: number): number {\n    let timeInMillis: number = this.getTimeInMillis() + timeDifference;\n    return (Math.trunc(timeInMillis / time)) * time;\n  }\n\n}\n\n","import { KeyContainerRepository } from \"../persistence/repositories/impl/KeyContainerRepository\";\nimport { Result } from \"../support/domain/Result\";\nimport type { DeviceInfo } from \"../support/pskc/DeviceInfo\";\nimport { TokenStatus } from \"../support/pskc/enums/TokenStatus\";\nimport type { KeyContainer } from \"../support/pskc/KeyContainer\";\nimport type { KeyPackage } from \"../support/pskc/KeyPackage\";\nimport type { Token } from \"../support/pskc/Token\";\nimport { KeyContainerBuilder } from \"../xml/builders/KeyContainerBuilder\";\nimport { KeyContainerException } from \"./exceptions/KeyContainerException\";\nimport { LunaUtils } from \"../persistence/utils/LunaUtils\";\nimport { HashUtils } from \"../persistence/utils/HashUtils\";\nimport type { Key } from \"../support/pskc/Key\";\nimport type { CryptoModuleInfo } from \"../support/pskc/CryptoModuleInfo\";\nimport type { Data } from \"../support/pskc/Data\";\nimport type { Policy } from \"../support/pskc/Policy\";\nimport type { PinPolicy } from \"../support/pskc/PinPolicy\";\nimport { KeyUsage } from \"../support/pskc/enums/KeyUsage\";\nimport { IKeyContainerRepository } from \"../persistence/repositories/IKeyContainerRepository\";\nimport { CipherAesUtils } from \"../support/utils/CipherAesUtils\";\nimport { Network } from '@capacitor/network';\nimport { ActivationCallback } from \"../http/callbacks/ActivationCallback\";\nimport { AsyncClientTask } from \"../http/client/AsyncClientTask\";\nimport { CreateRequest } from \"../http/client/Request\";\nimport { EnrollmentStringException } from \"../support/exceptions/EnrollmentStringException\";\nimport { KeyContainerUtils } from \"../xml/utils/KeyContainerUtils\";\nimport { decode } from 'js-base64';\nimport { OCRA } from \"../support/algorithm/ocra/OCRA\";\nimport { OneTimePassword } from \"../support/algorithm/hotp/OneTimePassword\";\n\n\nexport class KeyContainerManager {\n    private static keyContainerManager: KeyContainerManager;\n    private iKeyContainerRepository!: IKeyContainerRepository;\n    private keyContainer!: KeyContainer | null;\n\n    \n\n    public static getInstance(): KeyContainerManager {\n        if (this.keyContainerManager == null) {\n            this.keyContainerManager = new KeyContainerManager();\n        }\n        return this.keyContainerManager\n    }\n    public async create(friendlyName: string): Promise<Result> {\n        var result = Result.SUCCESS;\n        try {\n            var keyContainer= await new KeyContainerBuilder(friendlyName).build()\n            await this.getIKeyContainerRepository().save(keyContainer);\n            return result;\n        } catch (error) {\n            console.log(error);\n            result = Result.SDK_NOT_INIT\n        }\n        return result;\n    }\n    public async exists(friendlyName: string): Promise<boolean> {\n        try {\n            return await this.getIKeyContainerRepository().find(friendlyName) != null;\n        } catch (error) {\n            console.log(error)\n        }\n        return false;\n    }\n    public async select(friendlyName: string): Promise<Result> {\n        var result = Result.SUCCESS;\n        try {\n            this.keyContainer = await this.getIKeyContainerRepository().find(friendlyName);\n            console.log(\"Expiry Date    %s\", this.getDeviceInfo().expiryDate)\n            console.log(\"Device Binding %s\", this.getDeviceInfo().deviceBinding)\n            console.log(\"Issue Number   %s\", this.getDeviceInfo().issueNumber)\n            console.log(\"Manufacturer   %s\", this.getDeviceInfo().manufacturer)\n            console.log(\"Model          %s\", this.getDeviceInfo().model)\n            console.log(\"Serial Number  %s\", this.getDeviceInfo().serialNo)\n            console.log(\"User ID        %s\", this.getDeviceInfo().userId)\n            console.log(\"Start Date     %s\", this.getDeviceInfo().startDate)\n        } catch (error) {\n            result = Result.TOKEN_NOT_FOUND;\n        }\n\n        return result;\n\n    }\n\n    public async delete(friendlyName: string): Promise<Result> {\n        var result = Result.SUCCESS;\n        try {\n            if (this.keyContainer != null) {\n                if (TokenStatus.READY == this.getStatus()) {\n                    if (this.isAuth()) {\n                        await this.getIKeyContainerRepository().delete(friendlyName);\n                        this.keyContainer = null;\n                    } else {\n                        result = Result.NOT_AUTH\n                    }\n\n                } else {\n                    await this.getIKeyContainerRepository().delete(friendlyName);\n                    this.keyContainer = null;\n                }\n            } else if (await this.exists(friendlyName)) {\n                await this.select(friendlyName);\n                return await this.delete(friendlyName)\n            } else {\n                result = Result.TOKEN_NOT_FOUND;\n            }\n        } catch (error) {\n            result = Result.TOKEN_NOT_SELECTED;\n        }\n        return result;\n    }\n    public async list():Promise<string[]>{\n        var list:string[]= new Array();\n        var keyContainers = await this.getIKeyContainerRepository().findAll();\n        keyContainers.forEach((keyContainer:KeyContainer)=>{\n            list.push(keyContainer.keyPackages[0].key?.friendlyName!)\n        });\n        return list;\n    }\n    public async enrollment(enrollmentStringBase64: string, actCode: string): Promise<Result> {\n        \n        var result: Result = Result.SUCCESS;\n        try {\n            if (TokenStatus.CREATED == this.getToken().tokenStatus) {\n                var enrollmentEncryptHex: string = \"\";\n                try {\n                    var enrollmentEncryptHex: string = decode(enrollmentStringBase64).toString();\n\n                } catch (error) {\n                    throw new EnrollmentStringException(\"Invalid enrollment String\");\n                }\n                var enrollmentEncryptByte = LunaUtils.hexStringToByteArray(enrollmentEncryptHex);\n                var enrollmentString = CipherAesUtils.decryptData(enrollmentEncryptByte, actCode);\n                \n                const token: Token = KeyContainerUtils.mergeEnrollmentString(this.getToken(), enrollmentString!);\n                this.getToken().url = token.url;\n                this.getToken().serialNo = token.serialNo;\n                this.getToken().tokenId = token.tokenId;\n                this.getToken().tokenStatus = TokenStatus.ENROLLMENT;\n\n                this.keyContainer = await this.getIKeyContainerRepository().update(this.getName()!, this.getKeyContainer())\n\n            }\n            else {\n                result = Result.INVALID_TOKEN_STATUS;\n            }\n        } catch (error) {\n            result = Result.INVALID_ENROLLMENT_STRING;\n        }\n        return result;\n    }\n    public isOnline = async () => {\n        const status = await Network.getStatus();\n        Network.addListener('networkStatusChange', status => {\n            console.log('Network status changed', status);\n          });\n        return status.connected;\n    };\n\n    public async activate(activationCallback: ActivationCallback) {\n        var result: Result;\n        const asyncClientTask: AsyncClientTask = new AsyncClientTask(activationCallback, this.getIKeyContainerRepository(), this.getKeyContainer());\n        try {\n            if (await this.isOnline()) {\n                await asyncClientTask.execute(new CreateRequest(this.getToken(), this.getDeviceInfo()))\n            }\n            result = Result.NO_INTERNET_ACCESS;\n\n        } catch (error) {\n            console.log(error)\n            result = Result.TOKEN_NOT_SELECTED;\n        }\n    }\n\n    public async setPin(pin: string): Promise<Result> {\n        var result: Result = Result.SUCCESS;\n        try {\n            if (TokenStatus.WAITING_PIN === (this.getToken().tokenStatus)) {\n                this.getToken().tokenStatus = TokenStatus.READY;\n                this.getToken().pin = HashUtils.stringSha256(pin);\n                this.getToken().attempts = 0;\n\n                this.keyContainer = await this.getIKeyContainerRepository().update(this.getName()!, this.getKeyContainer())\n            } else {\n                result = Result.INVALID_TOKEN_STATUS;\n            }\n        } catch (error) {\n            console.log(error);\n            result = Result.TOKEN_NOT_SELECTED;\n        }\n        return result;\n    }\n\n    private getIKeyContainerRepository(): IKeyContainerRepository {\n        if (this.iKeyContainerRepository == null)\n            this.iKeyContainerRepository = new KeyContainerRepository();\n\n        return this.iKeyContainerRepository;\n    }\n\n    private getKeyContainer(): KeyContainer {\n        if (this.keyContainer == null) {\n            throw new KeyContainerException(\"Not selected Key Container\");\n        }\n        return this.keyContainer;\n    }\n\n    private getKeyPackage(): KeyPackage {\n        if (this.getKeyContainer().keyPackages[0] == null) {\n            throw new KeyContainerException(\"KeyPackage is null\");\n        }\n        return this.getKeyContainer().keyPackages[0]!;\n    }\n\n    private getDeviceInfo(): DeviceInfo {\n        if (this.getKeyPackage().deviceInfo == null) {\n            throw new KeyContainerException(\"DeviceInfo is null\");\n        }\n        return this.getKeyPackage().deviceInfo!;\n    }\n\n    private getCryptoModuleInfo(): CryptoModuleInfo {\n        if (this.getKeyPackage().cryptoModuleInfo == null) {\n            throw new KeyContainerException(\"CryptoModuleInfo is null\");\n        }\n        return this.getKeyPackage().cryptoModuleInfo!;\n    }\n\n    private getKey(): Key {\n        if (this.getKeyPackage().key == null) {\n            throw new KeyContainerException(\"Key is null\");\n        }\n        return this.getKeyPackage().key!;\n    }\n\n    private getData(): Data {\n        if (this.getKey().data == null) {\n            throw new KeyContainerException(\"Data is null\");\n        }\n        return this.getKey().data;\n    }\n\n    private getPolicy(): Policy {\n        if (this.getKey().policy == null) {\n            throw new KeyContainerException(\"Policy is null\");\n        }\n        return this.getKey().policy;\n    }\n\n    private getPinPolicy(): PinPolicy {\n        if (this.getPolicy().pinPolicy == null) {\n            throw new KeyContainerException(\"PINPolicy is null\");\n        }\n        return this.getPolicy().pinPolicy!;\n    }\n    private getToken(): Token {\n        if (this.getKeyPackage().token == null) {\n            throw new KeyContainerException(\"Token is null\");\n        }\n        return this.getKeyPackage().token!;\n    }\n\n    public getName(): string | null {\n        try {\n            return this.getKey().friendlyName;\n        } catch (error) {\n            console.log(error)\n        }\n        return null;\n    }\n\n    public getKeyUsage(): KeyUsage | null {\n        try {\n            return this.getPolicy().keyUsage;\n        } catch (error) {\n            console.log(error)\n        }\n        return null;\n    }\n\n\n    public getStatus(): TokenStatus | null {\n        try {\n            return this.getToken().tokenStatus;\n        } catch (error) {\n            console.log(error)\n        }\n        return null;\n    }\n\n    public getSerial(): string | null {\n        try {\n            return this.getToken().serialNo\n        } catch (error) {\n\n        }\n        return null;\n    }\n\n    public getExpiresAt(): Date | null {\n        try {\n            return this.getDeviceInfo().expiryDate;\n        } catch ( error ) {\n            console.log(error)\n        }\n        return null;\n    }\n\n    public getTimeInterval(): bigint {\n        if (this.getStatus() == TokenStatus.READY) {\n            if (this.getKeyUsage() == KeyUsage.OTP) {\n                try {\n                    return BigInt(this.getData().timeInterval!.plainValue!);\n                } catch (error) {\n                    console.log(error)\n                }\n            }\n        }\n        return BigInt(-1);\n    }\n\n    public getAttemps(): number {\n        try {\n            if (this.getToken().tokenStatus == TokenStatus.READY) {\n                return this.getToken().attempts\n            }\n        } catch (error) {\n            console.log(error)\n        }\n        return -1;\n    }\n\n    public getMaxAttemps(): number {\n        try {\n            if (this.getToken().tokenStatus == TokenStatus.READY) {\n                return this.getPinPolicy().maxFailedAttempts;\n            }\n        } catch (error) {\n            console.log(error)\n        }\n        return -1;\n    }\n\n    public timeout(): bigint {\n        if (this.getStatus() == TokenStatus.READY) {\n            if (this.getKeyUsage() == KeyUsage.OTP) {\n                if (this.getTimeInterval() > 0) {\n                    return BigInt(OneTimePassword.getTimeInMillis()) % this.getTimeInterval();\n                    //return BigInt(-1);\n                }\n            }\n        }\n        return BigInt(-1);\n    }\n\n    public async auth(pin: string): Promise<Result> {\n        var result: Result = Result.SUCCESS;\n        if (TokenStatus.READY === this.getStatus() && !this.isAuth()) {\n            if (this.getAttemps() < this.getMaxAttemps()) {\n                if (this.getToken().pin === (HashUtils.stringSha256(pin))) {\n                    this.getToken().attempts = 0;\n                    this.getToken().isAuth = true;\n                } else {\n                    this.getToken().attempts = this.getAttemps() + 1;\n                    this.getToken().isAuth = false;\n                    result = Result.BAD_PIN;\n                }\n            } else {\n                this.getData().secret = undefined;\n                this.getToken().pin = null;\n                this.getToken().tokenStatus = TokenStatus.BLOCKED;\n                result = Result.INVALID_TOKEN_STATUS;\n            }\n            this.keyContainer = await this.getIKeyContainerRepository().update(this.getName()!, this.getKeyContainer());\n        }\n\n        return result;\n    }\n\n    public isAuth(): boolean {\n        var result = false;\n        if (TokenStatus.READY == this.getStatus()) {\n            result = this.getToken().isAuth\n        }\n        return result;\n    }\n    public generate(challenge: string): string | null {\n        if (TokenStatus.READY === this.getStatus()) {\n            if (this.isAuth()) {\n                var key: Key = this.getKey();\n                return this.getKeyUsage()== KeyUsage.CR?\n                OCRA.generateOCRA(key, challenge,\"\",\"\",\"\"):\n                OneTimePassword.generateOTP(key,0,0)\n            }\n        }\n        return null;\n    }\n    public async changePin(oldPin: string, newPin: string): Promise<Result> {\n        var result: Result = await this.auth(oldPin);\n        if (result === Result.SUCCESS) {\n            this.getToken().pin = HashUtils.stringSha256(newPin);\n            this.getToken().attempts = 0;\n            this.keyContainer = await this.getIKeyContainerRepository().update(this.getName()!, this.getKeyContainer())\n        }\n        return result;\n\n        \n    }\n    \n\n}\n\n\n","\nimport { ActivationCallback } from \"./http/callbacks/ActivationCallback\";\nimport { KeyContainerManager } from \"./managers/KeyContainerManager\";\nimport { Result } from \"./support/domain/Result\";\nimport { TokenStatus } from \"./support/pskc/enums/TokenStatus\";\n\nexport class SDK {\n    constructor() {\n        throw new Error(\"Not allowed.\");\n    }\n    private static getInstanceManager(): KeyContainerManager {\n        return KeyContainerManager.getInstance();\n    }\n\n    public static async createToken(name: string): Promise<Result> {\n        return await this.getInstanceManager().create(name);\n    }\n\n    public static async deleteToken(name: string) {\n        return await this.getInstanceManager().delete(name);\n    }\n    public static async existsToken(name: string): Promise<boolean> {\n        return await this.getInstanceManager().exists(name);\n    }\n    public static async selectToken(name: string): Promise<Result> {\n        return await this.getInstanceManager().select(name);\n    }\n    public static async listTokens():Promise<string[]> {\n        return await this.getInstanceManager().list()\n    }\n    public static async enrollmentToken(enrollmentString: string, actCode: string): Promise<Result> {\n        return await this.getInstanceManager().enrollment(enrollmentString, actCode);\n    }\n    public static async activate(activationCallback: ActivationCallback) {\n        await this.getInstanceManager().activate(activationCallback);\n    }\n    public static async setPin(pin: string): Promise<Result> {\n        return await this.getInstanceManager().setPin(pin);\n    }\n    public static async auth(pin: string): Promise<Result> {\n        return await this.getInstanceManager().auth(pin);\n    }\n    public static isAuth(): boolean {\n        return this.getInstanceManager().isAuth();\n    }\n    public static async changePin(oldPin: string, newPin: string): Promise<Result> {\n        return await this.getInstanceManager().changePin(oldPin, newPin);\n    }\n    public static generateOTP(challenge: string): string | null {\n        return this.getInstanceManager().generate(challenge);\n    }\n    public static getTokenName(): string | null {\n        return this.getInstanceManager().getName();\n    }\n    public static getStatus(): TokenStatus | null {\n        return this.getInstanceManager().getStatus();\n    }\n    public static getType(){\n        return this.getInstanceManager().getKeyUsage();\n    }\n    public static getSerial(): string | null {\n        return this.getInstanceManager().getSerial();\n    }\n    public static getExpiresAt(): Date | null {\n        return this.getInstanceManager().getExpiresAt();\n    }\n    public static getTimeInterval(): bigint {\n        return this.getInstanceManager().getTimeInterval();\n    }\n    public static getAttempts(): number {\n        return this.getInstanceManager().getAttemps();\n    }\n    public static getMaxAttempts(): number {\n        return this.getInstanceManager().getMaxAttemps();\n    }\n    public static getTimeout(): bigint {\n        return this.getInstanceManager().timeout();\n    }\n}","import { Injectable } from '@angular/core';\nimport { Key } from './support/pskc/Key';\nimport { Result } from './support/domain/Result';\nimport { KeyUsage } from './support/pskc/enums/KeyUsage';\nimport { ResponseFormat } from './support/pskc/ResponseFormat';\nimport { ChallengeFormat } from './support/pskc/ChallengeFormat';\nimport { AlgorithmParameter } from './support/pskc/AlgorithmParameter';\nimport { DataElement } from './support/pskc/DataElement';\nimport { Data } from './support/pskc/Data';\nimport { PinPolicy } from './support/pskc/PinPolicy';\nimport { Policy } from './support/pskc/Policy';\nimport { KeyPackage } from './support/pskc/KeyPackage'\nimport { DeviceInfo } from './support/pskc/DeviceInfo';\nimport { CryptoModuleInfo } from './support/pskc/CryptoModuleInfo';\nimport { OCRA } from './support/algorithm/ocra/OCRA';\nimport { decode } from 'js-base64';\nimport { SDK } from './SDK';\nimport { PSKCFileUtils } from './persistence/utils/PSKCFileUtils';\nimport { OneTimePassword } from './support/algorithm/hotp/OneTimePassword';\n@Injectable({\n  providedIn: 'root'\n})\nexport class TesseractsdkLibService {\n  static ENROLLMENT_STRING: string = \"NTNiM2JlYTljYmUxMzZkNWI0ZTk0N2EyMmM2NTUyNjIwNWFjM2E3ZTY5MWY2ZGY0OGNlZGI2ZDU3ZTQ4MDYwM2I5YjdjYjFjODFjM2M4ZWFiZmFiMmE5MjUxMTlhN2Q4NDY1ZGI0MTEyNjUwOTBmMTk5YmIwNmRiNTk3YWEyZjM1OTc2MWZmZDMzYTI0NjU2ZDJkNWZhZTUwYjU4NDExZjAzYjExYTUxYTUzNTJjNzlhMmI2MmM1MjEzNmNjZmJlYTJhOTE3OTMxNDZmMzVkZTAwMjllMTAxOTU1MDRiNmQ4MzFiNDFkZGE5NGQwN2I5ZWIxMmM0YmM0ZWMxY2Y2NjM2YTYyODJlODA5NGRjMTY1NGFkZDI1ODFkZmRkZTYyYjkxNmVmMDUzZDEzZjhlNDlhNGJkMjc1NTJiYzNlYjNjNmJkY2U4OGU2YTBjZGYyYzEzMDYwNjljNzg3ODI4MjcxYjhlMzNjYjg5MTUyMGM1NWY3NDkzNzIxNzg1YTAzODAzMDJlMWVjMDRlZGM0OGFkM2I5ZjU3ODhhMGNkOGI0ZGJjNTgxODJhN2UzMDJmNWUwNmVlYmExNTViMTBmYTFmYjA1YWM1OWM1ZTI0ZWE=\";\n\n  static ACT_CODE: string = \"34196290\";\n\n  static QUESTION: string = \"878983\";\n  constructor() { }\n\n  async test() {\n    await SDK.selectToken(\"TestOTP\")\n\n    if (!SDK.isAuth()) {\n      var result = await SDK.auth(\"1234\")\n      if (result != Result.SUCCESS) {\n        console.log(\"error al autenticar\")\n      } else {\n        let timerId = setInterval(() => {\n          var movingFactor = OneTimePassword.movingFactor(30000, 0);\n          var otp = SDK.generateOTP(\"123456\")\n          console.log(\"OTP\", otp, \"MovingFactor\", movingFactor)\n        }, 1000);\n\n        setTimeout(() => { clearInterval(timerId); alert('stop'); }, 120000);\n      }\n    }\n    /*var result: Result = Result.SUCCESS;\n    await SDK.selectToken(\"TestOTP\")\n    if (!SDK.isAuth()) {\n      var result = await SDK.auth(\"1234\")\n      if (result != Result.SUCCESS) {\n        console.log(\"error al autenticar\")\n      } else {\n\n        if (await SDK.existsToken(\"TestOTP\")) {\n          console.log(\"on Delete\")\n          result = await SDK.deleteToken(\"TestOTP\");\n\n        }\n\n        if (result != Result.SUCCESS) {\n          console.log(`Delete Token -> ${result}`);\n          return;\n        }\n        result = await SDK.createToken(\"TestOTP\");\n\n        if (result != Result.SUCCESS) {\n          console.log(`Create Token -> ${result}`);\n          return;\n        }\n\n        result = await SDK.selectToken(\"TestOTP\");\n\n        console.log(`Select Token ${\"TestOTP\"} ${result}`);\n        if (result === (Result.SUCCESS)) {\n          console.log(`Token ${\"Name\"} -> ${SDK.getTokenName()}`);\n          console.log(`Token ${\"Serial\"} ->${SDK.getSerial() == null ? \"Empty\" : SDK.getSerial()}`);\n          console.log(`Token ${\"Type\"} -> ${SDK.getType() == null ? \"Empty\" : SDK.getType()}`);\n          console.log(`Token ${\"Status\"} -> ${SDK.getStatus() == null ? \"Empty\" : SDK.getStatus()}`);\n          console.log(`Token ${\"Attempts\"} -> ${SDK.getAttempts()}`);\n          console.log(`Token ${\"Max Attempts\"} -> ${SDK.getMaxAttempts()}`);\n          console.log(`Token ${\"Expires At\"} -> ${SDK.getExpiresAt() == null ? \"Empty\" : SDK.getExpiresAt()}`);\n          console.log(`Token ${\"Time Interval\"} -> ${SDK.getTimeInterval()}`);\n          console.log(`Token ${\"Timeout\"} -> ${SDK.getTimeout()}`);\n          //console.log(SDK.generateOTP(\"123456\"))\n\n          result = await SDK.enrollmentToken(HomePage.ENROLLMENT_STRING, HomePage.ACT_CODE);\n\n          console.log(`Token ${\"Name\"} -> ${SDK.getTokenName()}`);\n          console.log(`Token ${\"Serial\"} ->${SDK.getSerial() == null ? \"Empty\" : SDK.getSerial()}`);\n          console.log(`Token ${\"Type\"} -> ${SDK.getType() == null ? \"Empty\" : SDK.getType()}`);\n          console.log(`Token ${\"Status\"} -> ${SDK.getStatus() == null ? \"Empty\" : SDK.getStatus()}`);\n          console.log(`Token ${\"Attempts\"} -> ${SDK.getAttempts()}`);\n          console.log(`Token ${\"Max Attempts\"} -> ${SDK.getMaxAttempts()}`);\n          console.log(`Token ${\"Expires At\"} -> ${SDK.getExpiresAt() == null ? \"Empty\" : SDK.getExpiresAt()}`);\n          console.log(`Token ${\"Time Interval\"} -> ${SDK.getTimeInterval()}`);\n          console.log(`Token ${\"Timeout\"} -> ${SDK.getTimeout()}`);\n\n\n          if (result != Result.SUCCESS) {\n            console.log(`Enrollment String -> ${result}`,);\n            return;\n          }\n\n          if (SDK.getStatus() == TokenStatus.ENROLLMENT) {\n            let callback: ActivationCallback = {\n              success: async () => {\n                console.log(`Token ${\"Status\"} -> ${SDK.getStatus() == null ? \"Empty\" : SDK.getStatus()}`);\n                var status = SDK.getStatus()\n\n                if (status == TokenStatus.WAITING_PIN) {\n                  console.log(\"on set Pin\")\n                  if (await SDK.setPin(\"1234\") != Result.SUCCESS) {\n                    console.log(`Token ${\"Status\"} -> ${SDK.getStatus() == null ? \"Empty\" : SDK.getStatus()}`);\n                  }\n                  else {\n                    console.log(\"after set pin\")\n                    await SDK.selectToken(\"TestOTP\")\n\n                    if (!SDK.isAuth()) {\n                      var result = await SDK.auth(\"1234\")\n                      if (result != Result.SUCCESS) {\n                        console.log(\"error al autenticar\")\n                      } else {\n                        console.log(\"OTP\", SDK.generateOTP(\"123456\"))\n                      }\n                    }\n\n                  }\n                }\n              },\n              failed: (result) => {\n                console.log(\"on failed\", result);\n              },\n            }\n\n            await SDK.activate(callback)*/\n    /*await SDK.selectToken(\"TestToken\")\n \n    if (!SDK.isAuth()) {\n      var result = await SDK.auth(\"1234\")\n      if (result != Result.SUCCESS) {\n        console.log(\"error al autenticar\")\n      } else {\n        console.log(\"OTP\",SDK.generateOTP(\"123456\"))\n      }\n    }*/\n\n    // }\n    //this.testAlgorithms();\n\n    //  }\n    // }\n    //  }\n  }\n  public static generateKeyCR(): Key {\n    const challengeFormat: ChallengeFormat = new ChallengeFormat();\n    const responseFormat: ResponseFormat = new ResponseFormat();\n\n    const algorithmParameter: AlgorithmParameter = new AlgorithmParameter();\n    algorithmParameter.suite = \"OCRA-1:HOTP-SHA1-6:QN06\";\n    algorithmParameter.challengeFormat = challengeFormat;\n    algorithmParameter.responseFormat = responseFormat;\n\n    const secret: DataElement = new DataElement(null);\n    secret.plainValue = \"NjkzM2YxYjg0MGRjYWUwNjJhNzJhZjgzNzJmNjZjNWVkMTdlZjk2Nw==\";\n\n    const counter: DataElement = new DataElement(null);\n    counter.plainValue = \"0\";\n\n    const time: DataElement = new DataElement(null);\n    time.plainValue = \"0\";\n\n    const timeInterval: DataElement = new DataElement(null);\n    timeInterval.plainValue = \"120000\";\n\n    const data: Data = new Data();\n    data.secret = secret;\n    data.counter = counter;\n    data.time = time;\n    data.timeInterval = timeInterval;\n\n    const pinPolicy: PinPolicy = new PinPolicy();\n    pinPolicy.pinKeyId = \"156\";\n\n    const policy: Policy = new Policy();\n    policy.startDate = new Date(1522877368000);\n    policy.expiryDate = new Date(1554184800000);\n    policy.keyUsage = KeyUsage.CR;\n    policy.noOfTransactions = 0;\n    policy.pinPolicy = pinPolicy;\n\n    const key: Key = new Key();\n    key.id = \"156\";\n    key.issuer = \"Opciones en Seguridad Informática S.A.P.I. de C.V.\";\n    key.algorithmParameter = algorithmParameter;\n    key.data = data;\n    key.policy = policy;\n\n    return key;\n  }\n\n  /**\n   *\n   * @return\n   */\n  public static generateKeyOTP(): Key {\n    const responseFormat: ResponseFormat = new ResponseFormat();\n\n    const algorithmParameter: AlgorithmParameter = new AlgorithmParameter();\n    algorithmParameter.suite = \"HMAC-SHA1\";\n    algorithmParameter.responseFormat = responseFormat;\n\n    const secret: DataElement = new DataElement(null);\n    secret.plainValue = \"YWY4MDAxZTYyYjdkZWRiMjVjZGYwMWUzODkwNmMyYTk2YTQ3MGEzNA==\";\n\n    const counter: DataElement = new DataElement(null);\n    counter.plainValue = \"0\";\n\n    const time: DataElement = new DataElement(null);\n    time.plainValue = \"0\";\n\n    const timeInterval: DataElement = new DataElement(null);\n    timeInterval.plainValue = \"10000\";\n\n    const data: Data = new Data();\n    data.secret = secret;\n    data.counter = counter;\n    data.time = time;\n    data.timeInterval = timeInterval;\n\n    const pinPolicy: PinPolicy = new PinPolicy();\n    pinPolicy.pinKeyId = \"157\";\n\n    const policy: Policy = new Policy();\n    policy.startDate = new Date(1522877990000);\n    policy.expiryDate = new Date(1554184800000);\n    policy.keyUsage = KeyUsage.OTP;\n    policy.noOfTransactions = 0;\n    policy.pinPolicy = pinPolicy;\n\n    const key: Key = new Key();\n    key.id = \"157\";\n    key.issuer = \"Opciones en Seguridad Informática S.A.P.I. de C.V.\";\n    key.algorithmParameter = algorithmParameter;\n    key.data = data;\n    key.policy = policy;\n\n    return key;\n  }\n\n\n  /**\n   *\n   */\n  public testAlgorithms() {\n    var keyCR: Key = TesseractsdkLibService.generateKeyCR();\n\n    const keyPackageCR: KeyPackage = new KeyPackage();\n    keyPackageCR.deviceInfo = new DeviceInfo();\n    keyPackageCR.cryptoModuleInfo = new CryptoModuleInfo();\n    keyPackageCR.key = keyCR;\n\n    var ocra: string = OCRA.generateOCRA(keyCR, TesseractsdkLibService.QUESTION, \"\", \"\", \"\");\n\n    const seedCR = new String(decode(keyCR.data.secret?.plainValue!));\n\n    console.log(`CHALLENGE RESPONSE`);\n    console.log(\"OCRA SUITE\", \"SEED\", \"QUESTION\", \"OCRA\");\n    console.log(keyCR.algorithmParameter.suite, seedCR, TesseractsdkLibService.QUESTION, ocra);\n    const keyOTP: Key = TesseractsdkLibService.generateKeyOTP();\n\n    const keyPackageOTP: KeyPackage = new KeyPackage();\n    keyPackageOTP.deviceInfo = new DeviceInfo();\n    keyPackageOTP.cryptoModuleInfo = new CryptoModuleInfo();\n    keyPackageOTP.key = keyOTP;\n\n    // repository.save(keyPackageOTP);\n\n    const seedOTP = new String(decode(keyCR.data.secret?.plainValue!));\n\n    console.log(`FOR EVENT`);\n    console.log(\"OCRA SUITE\", \"SEED\", \"QUESTION\", \"OTP\");\n\n  }\n\n}\n","import { Component } from '@angular/core';\n\n@Component({\n  selector: 'dev-tesseractsdk-lib',\n  template: `\n    <p>\n      tesseractsdk-lib works!\n    </p>\n  `,\n  styles: [\n  ]\n})\nexport class TesseractsdkLibComponent {\n\n}\n","import { NgModule } from '@angular/core';\nimport { TesseractsdkLibComponent } from './tesseract-sdk-st-lib.component';\nimport { File } from '@ionic-native/file/ngx';\n\n\n@NgModule({\n  declarations: [\n    TesseractsdkLibComponent\n  ],\n  imports: [\n  ],\n  exports: [\n    TesseractsdkLibComponent\n  ],\n  providers:[\n    File\n  ]\n})\nexport class TesseractsdkLibModule { }\n","export enum TokenType\n{\n    UNKNOWN =\"UNKNOWN\",  \n    CHALLENGE_RESPONSE=\"CHALLENGE_RESPONSE\",\n    FOR_EVENT=\"FOR_EVENT\"\n}","/*\n * Public API Surface of tesseractsdk-lib\n */\n\nexport * from './lib/tesseract-sdk-st-lib.service';\nexport * from './lib/tesseract-sdk-st-lib.component';\nexport * from './lib/tesseract-sdk-st-lib.module';\nexport * from './lib/SDK';\nexport { Key } from './lib/support/pskc/Key';\nexport { Result } from './lib/support/domain/Result';\nexport { KeyUsage } from './lib/support/pskc/enums/KeyUsage';\nexport { ResponseFormat } from './lib/support/pskc/ResponseFormat';\nexport { ChallengeFormat } from './lib/support/pskc/ChallengeFormat';\nexport { AlgorithmParameter } from './lib/support/pskc/AlgorithmParameter';\nexport { DataElement } from './lib/support/pskc/DataElement';\nexport { Data } from './lib/support/pskc/Data';\nexport { PinPolicy } from './lib/support/pskc/PinPolicy';\nexport { Policy } from './lib/support/pskc/Policy';\nexport { KeyPackage } from './lib/support/pskc/KeyPackage'\nexport { DeviceInfo } from './lib/support/pskc/DeviceInfo';\nexport { CryptoModuleInfo } from './lib/support/pskc/CryptoModuleInfo';\nexport { OCRA } from './lib/support/algorithm/ocra/OCRA';\nexport { TokenStatus } from './lib/support/pskc/enums/TokenStatus';\nexport { TokenType } from './lib/support/pskc/enums/TokenType';\nexport { Encoding } from './lib/support/pskc/enums/Encoding';\nexport { ActivationCallback} from './lib/http/callbacks/ActivationCallback';","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["convert_word_array_to_uint8Array","Encoding"],"mappings":"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"}