]> git.codecow.com Git - nano25519.git/commitdiff
Add negative tests for validation of bad byte inputs.
authorChris Duncan <chris@zoso.dev>
Mon, 6 Jul 2026 07:31:42 +0000 (00:31 -0700)
committerChris Duncan <chris@zoso.dev>
Mon, 6 Jul 2026 07:31:42 +0000 (00:31 -0700)
test.mjs

index 3b0290ae97e25111fdf81b2e77c94255cd2602eb..cb5bb24d37eb52f8948f550320088ad771d8fc20 100644 (file)
--- 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)