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
* @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
--- /dev/null
+//! 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')
+ }
+}