From: Chris Duncan Date: Mon, 6 Jul 2026 07:31:42 +0000 (-0700) Subject: Add negative tests for validation of bad byte inputs. X-Git-Tag: v1.0.7~1 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=934312b4e42060f5eb985ba6a517dc9734365918;p=nano25519.git Add negative tests for validation of bad byte inputs. --- diff --git a/test.mjs b/test.mjs index 3b0290a..cb5bb24 100644 --- a/test.mjs +++ b/test.mjs @@ -80,6 +80,101 @@ check(`sign message too long (65538 '1's)`, test) passes += +test failures += +!test +// Check byte input validation +try { + result = derive(NANO_ORG_VECTOR.privateKeyBytes.slice(-1)) + result = false +} catch (err) { + if (err != null && typeof err === 'object' && 'message' in err) { + result = err.message === `private key must be at least 32 bytes` + } else { + result = false + } +} +test = result === true +check(`private key bytes too short`, test) +passes += +test +failures += +!test + +try { + result = derive(new Uint8Array([...NANO_ORG_VECTOR.privateKeyBytes, 0])) + result = false +} catch (err) { + if (err != null && typeof err === 'object' && 'message' in err) { + result = err.message === `private key must be no more than 32 bytes` + } else { + result = false + } +} +test = result === true +check(`private key bytes too long`, test) +passes += +test +failures += +!test + +try { + //@ts-expect-error + result = derive(new Uint16Array(NANO_ORG_VECTOR.privateKeyBytes)) + result = false +} catch (err) { + if (err != null && typeof err === 'object' && 'message' in err) { + result = err.message === `private key must be Uint8Array` + } else { + result = false + } +} +test = result === true +check(`private key bytes invalid type Uint16Array`, test) +passes += +test +failures += +!test + +try { + const shared = new Uint8Array(new SharedArrayBuffer(NANO_ORG_VECTOR.privateKeyBytes.byteLength)) + shared.set(NANO_ORG_VECTOR.privateKeyBytes) + //@ts-expect-error + result = derive(shared) + result = false +} catch (err) { + if (err != null && typeof err === 'object' && 'message' in err) { + result = err.message === `private key must be backed by an ArrayBuffer` + } else { + result = false + } +} +test = result === true +check(`private key bytes invalid buffer SharedArrayBuffer`, test) +passes += +test +failures += +!test + +try { + result = sign(NANO_ORG_VECTOR.blockHash + '0', NANO_ORG_VECTOR.secretKey) + result = false +} catch (err) { + if (err != null && typeof err === 'object' && 'message' in err) { + result = err.message === `Invalid hexadecimal length 65 for message ${NANO_ORG_VECTOR.blockHash + '0'}` + } else { + result = false + } +} +test = result === true +check(`sign message odd character count ${NANO_ORG_VECTOR.blockHash + '0'}`, test) +passes += +test +failures += +!test + +try { + result = sign('1'.repeat(65538), NANO_ORG_VECTOR.secretKey) + result = false +} catch (err) { + if (err != null && typeof err === 'object' && 'message' in err) { + result = err.message === `Invalid hexadecimal length 65538 for message ${'1'.repeat(65538)}` + } else { + result = false + } +} +test = result === true +check(`sign message too long (65538 '1's)`, test) +passes += +test +failures += +!test + // Check combined imports result = await Nano25519.deriveAsync(NANO_ORG_VECTOR.privateKeyBytes) console.log(`RESULT`, result)