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)