INNER CODE UNIT · TypeScript

nonceNcLen

paulmillr/noble-ciphers · src/_arx.ts:318

    const nonceNcLen = 16 - counterLength;
    if (nonceNcLen !== nonce.length)
      throw new Error(`arx: nonce must be ${nonceNcLen} or 16 bytes`);

    // Normalize 64-bit-nonce layouts to the 12-byte core input: ChaCha/XChaCha prefix 4 zero
    // counter bytes, while Salsa/XSalsa append them after the nonce words.
    if (nonceNcLen !== 12) {
      const nc = new Uint8Array(12);
      nc.set(nonce, counterRight ? 0 : 12 - nonce.length);
      nonce = nc;
      toClean.push(nonce);
    }
    const n32 = swap32IfBE(u32(nonce));
    // Ensure temporary key/nonce copies are wiped even if the remaining
    // runtime guard in runCipher(...) throws on counter overflow.
    try {
      runCipher(core, sigma, k32, n32, data, output, counter, rounds);
      return output as TRet<Uint8Array>;

View source record →

📰 Research Paper
Loading…
⏳ Fetching content…