{"version":3,"file":"iso10126.mjs","sources":["../src/iso10126.ts"],"sourcesContent":["import {\n  assertBlockSize as assertCoreBlockSize,\n  assertPaddedInput as assertCorePaddedInput,\n  getBlockPaddingLength,\n  type PaddingComponent,\n  type PresetComponent,\n} from '@jscrypto/core';\n\nexport const iso10126: PaddingComponent<'Iso10126'> = {\n  kind: 'padding',\n  name: 'Iso10126',\n\n  pad(input, blockSize) {\n    assertBlockSize(blockSize);\n    const paddingLength = getPaddingLength(input.length, blockSize);\n    const output = new Uint8Array(input.length + paddingLength);\n    output.set(input);\n    fillRandom(output.subarray(input.length, output.length - 1));\n    output[output.length - 1] = paddingLength;\n    return output;\n  },\n\n  unpad(input, blockSize) {\n    assertPaddedInput(input, blockSize);\n    const paddingLength = input[input.length - 1];\n    if (paddingLength === 0 || paddingLength > blockSize || paddingLength > input.length) {\n      throw new Error('Invalid ISO 10126 padding.');\n    }\n    return input.slice(0, input.length - paddingLength);\n  },\n};\n\nexport const iso10126Preset: PresetComponent<'iso10126'> = {\n  kind: 'preset',\n  name: 'iso10126',\n  components() {\n    return [iso10126];\n  },\n};\n\nfunction assertBlockSize(blockSize: number): void {\n  assertCoreBlockSize(blockSize, { max: 255 });\n}\n\nfunction assertPaddedInput(input: Uint8Array, blockSize: number): void {\n  assertCorePaddedInput(input, blockSize, 'ISO 10126', { max: 255 });\n}\n\nfunction getPaddingLength(inputLength: number, blockSize: number): number {\n  return getBlockPaddingLength(inputLength, blockSize);\n}\n\nfunction fillRandom(bytes: Uint8Array): void {\n  if (bytes.length === 0) {\n    return;\n  }\n\n  const crypto = globalThis as typeof globalThis & {\n    crypto?: {\n      getRandomValues<T extends Uint8Array>(array: T): T;\n    };\n  };\n  crypto.crypto?.getRandomValues(bytes);\n  if (bytes.some((byte) => byte !== 0)) {\n    return;\n  }\n\n  for (let i = 0; i < bytes.length; i++) {\n    bytes[i] = Math.floor(Math.random() * 256);\n  }\n}\n"],"names":["assertCoreBlockSize","assertCorePaddedInput"],"mappings":";;;;;;;AAQO,MAAM,QAAQ,GAAiC;AACpD,IAAA,IAAI,EAAE,SAAS;AACf,IAAA,IAAI,EAAE,UAAU;IAEhB,GAAG,CAAC,KAAK,EAAE,SAAS,EAAA;QAClB,eAAe,CAAC,SAAS,CAAC;QAC1B,MAAM,aAAa,GAAG,gBAAgB,CAAC,KAAK,CAAC,MAAM,EAAE,SAAS,CAAC;QAC/D,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC;AAC3D,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC;AACjB,QAAA,UAAU,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5D,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,aAAa;AACzC,QAAA,OAAO,MAAM;IACf,CAAC;IAED,KAAK,CAAC,KAAK,EAAE,SAAS,EAAA;AACpB,QAAA,iBAAiB,CAAC,KAAK,EAAE,SAAS,CAAC;QACnC,MAAM,aAAa,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7C,QAAA,IAAI,aAAa,KAAK,CAAC,IAAI,aAAa,GAAG,SAAS,IAAI,aAAa,GAAG,KAAK,CAAC,MAAM,EAAE;AACpF,YAAA,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC;QAC/C;AACA,QAAA,OAAO,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,MAAM,GAAG,aAAa,CAAC;IACrD,CAAC;;AAGI,MAAM,cAAc,GAAgC;AACzD,IAAA,IAAI,EAAE,QAAQ;AACd,IAAA,IAAI,EAAE,UAAU;IAChB,UAAU,GAAA;QACR,OAAO,CAAC,QAAQ,CAAC;IACnB,CAAC;;AAGH,SAAS,eAAe,CAAC,SAAiB,EAAA;IACxCA,iBAAmB,CAAC,SAAS,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AAC9C;AAEA,SAAS,iBAAiB,CAAC,KAAiB,EAAE,SAAiB,EAAA;AAC7D,IAAAC,mBAAqB,CAAC,KAAK,EAAE,SAAS,EAAE,WAAW,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACpE;AAEA,SAAS,gBAAgB,CAAC,WAAmB,EAAE,SAAiB,EAAA;AAC9D,IAAA,OAAO,qBAAqB,CAAC,WAAW,EAAE,SAAS,CAAC;AACtD;AAEA,SAAS,UAAU,CAAC,KAAiB,EAAA;AACnC,IAAA,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE;QACtB;IACF;IAEA,MAAM,MAAM,GAAG,UAId;AACD,IAAA,MAAM,CAAC,MAAM,EAAE,eAAe,CAAC,KAAK,CAAC;AACrC,IAAA,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE;QACpC;IACF;AAEA,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACrC,QAAA,KAAK,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,GAAG,CAAC;IAC5C;AACF;;;;"}