From: Chris Duncan Date: Fri, 22 Aug 2025 06:27:35 +0000 (-0700) Subject: Extract account validation to its own file. X-Git-Tag: v0.10.5~41^2~10 X-Git-Url: https://git.codecow.com/?a=commitdiff_plain;h=f99f8bfe826972c6e659f25c88bc639d5bcef1e5;p=libnemo.git Extract account validation to its own file. --- diff --git a/src/lib/account/index.ts b/src/lib/account/index.ts index 889206b..5954e02 100644 --- a/src/lib/account/index.ts +++ b/src/lib/account/index.ts @@ -8,6 +8,7 @@ import { base32, bytes, hex } from '../convert' import { Blake2b, NanoNaCl } from '../crypto' import { Rpc } from '../rpc' import { _refresh } from './refresh' +import { _validate } from './validate' /** * Represents a single Nano address and the associated public key. To include the @@ -233,28 +234,8 @@ export class Account { * @param {string} address - Nano address to validate * @throws Error if address is undefined, not a string, or an invalid format */ - static 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') - } + static validate (address: string): asserts address is string { + return _validate(address) } /** diff --git a/src/lib/account/validate.ts b/src/lib/account/validate.ts new file mode 100644 index 0000000..0f00695 --- /dev/null +++ b/src/lib/account/validate.ts @@ -0,0 +1,30 @@ +//! SPDX-FileCopyrightText: 2025 Chris Duncan +//! 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') + } +}