]> git.codecow.com Git - libnemo.git/commitdiff
Extract account validation to its own file.
authorChris Duncan <chris@zoso.dev>
Fri, 22 Aug 2025 06:27:35 +0000 (23:27 -0700)
committerChris Duncan <chris@zoso.dev>
Fri, 22 Aug 2025 06:27:35 +0000 (23:27 -0700)
src/lib/account/index.ts
src/lib/account/validate.ts [new file with mode: 0644]

index 889206bf1041d920527436d2bf7ad7384662c7cc..5954e0240cc6d0fdc265c23d9d3fe7a4a668db56 100644 (file)
@@ -8,6 +8,7 @@ import { base32, bytes, hex } from '../convert'
 import { Blake2b, NanoNaCl } from '../crypto'\r
 import { Rpc } from '../rpc'\r
 import { _refresh } from './refresh'\r
+import { _validate } from './validate'\r
 \r
 /**\r
 * Represents a single Nano address and the associated public key. To include the\r
@@ -233,28 +234,8 @@ export class Account {
        * @param {string} address - Nano address to validate\r
        * @throws Error if address is undefined, not a string, or an invalid format\r
        */\r
-       static validate (address: unknown): asserts address is string {\r
-               if (address === undefined) {\r
-                       throw new ReferenceError('Address is undefined.')\r
-               }\r
-               if (typeof address !== 'string') {\r
-                       throw new TypeError('Address must be a string.')\r
-               }\r
-               const pattern = new RegExp(`^(${PREFIX}|${PREFIX_LEGACY})[13]{1}[${ALPHABET}]{59}$`)\r
-               if (!pattern.test(address)) {\r
-                       throw new RangeError('Invalid address format')\r
-               }\r
-\r
-               const expectedChecksum = address.slice(-8)\r
-               const keyBase32 = address.slice(address.indexOf('_') + 1, -8)\r
-               const keyBuf = base32.toBytes(keyBase32)\r
-               const actualChecksumBuf = new Blake2b(5).update(keyBuf).digest()\r
-               actualChecksumBuf.reverse()\r
-               const actualChecksum = bytes.toBase32(actualChecksumBuf)\r
-\r
-               if (expectedChecksum !== actualChecksum) {\r
-                       throw new Error('Incorrect address checksum')\r
-               }\r
+       static validate (address: string): asserts address is string {\r
+               return _validate(address)\r
        }\r
 \r
        /**\r
diff --git a/src/lib/account/validate.ts b/src/lib/account/validate.ts
new file mode 100644 (file)
index 0000000..0f00695
--- /dev/null
@@ -0,0 +1,30 @@
+//! SPDX-FileCopyrightText: 2025 Chris Duncan <chris@zoso.dev>
+//! SPDX-License-Identifier: GPL-3.0-or-later
+
+import { ALPHABET, PREFIX, PREFIX_LEGACY } from "../constants"
+import { base32, bytes } from "../convert"
+import { Blake2b } from "../crypto"
+
+export function _validate (address: unknown): asserts address is string {
+       if (address === undefined) {
+               throw new ReferenceError('Address is undefined.')
+       }
+       if (typeof address !== 'string') {
+               throw new TypeError('Address must be a string.')
+       }
+       const pattern = new RegExp(`^(${PREFIX}|${PREFIX_LEGACY})[13]{1}[${ALPHABET}]{59}$`)
+       if (!pattern.test(address)) {
+               throw new RangeError('Invalid address format')
+       }
+
+       const expectedChecksum = address.slice(-8)
+       const keyBase32 = address.slice(address.indexOf('_') + 1, -8)
+       const keyBuf = base32.toBytes(keyBase32)
+       const actualChecksumBuf = new Blake2b(5).update(keyBuf).digest()
+       actualChecksumBuf.reverse()
+       const actualChecksum = bytes.toBase32(actualChecksumBuf)
+
+       if (expectedChecksum !== actualChecksum) {
+               throw new Error('Incorrect address checksum')
+       }
+}