/**
 * @license
 * Copyright 2022-2026 Matter.js Authors
 * SPDX-License-Identifier: Apache-2.0
 */
import { Branded, Crypto } from "@matter/general";
import { TlvWrapper } from "../tlv/TlvWrapper.js";
import { CaseAuthenticatedTag } from "./CaseAuthenticatedTag.js";
/**
 * A Node Identifier (Node ID) is a 64-bit number that uniquely identifies an individual Node or a
 * group of Nodes on a Fabric.
 *
 * @see {@link MatterSpecification.v10.Core} § 2.5.5
 */
export type NodeId = Branded<bigint, "NodeId">;
export declare function NodeId(v: Parameters<typeof BigInt>[0]): NodeId;
export declare namespace NodeId {
    /**
     * The Unspecified Node ID (0x0000_0000_0000_0000) is a reserved value that never appears in messages or protocol
     * usage. It exists to mark or detect the presence of uninitialized, missing, or invalid Node IDs.
     */
    const UNSPECIFIED_NODE_ID: NodeId;
    function strOf(nodeId: NodeId): string;
    /**
     * An Operational Node ID is a 64-bit number that uniquely identifies an individual Node on a Fabric. All messages
     * must have an Operational Node ID as the source address. All unicast messages must have an Operational Node ID
     * as the destination address.
     */
    const randomOperationalNodeId: (crypto: Crypto) => NodeId;
    /**
     * Returns whether the given Node ID is an Operational Node ID.
     */
    const isOperationalNodeId: (nodeId: NodeId) => boolean;
    /** A Group Node ID is a 64-bit Node ID that contains a particular Group ID in the lower half of the Node ID. */
    const fromGroupId: (groupId: number) => NodeId;
    /**
     * A Temporary Local Node ID is a 64-bit Node ID that contains an implementation-dependent value in its lower
     * 32 bits. This allows implementations to keep track of connections or transport-layer links and similar
     * housekeeping internal usage purposes in contexts where an Operational Node ID is unavailable.
     */
    const fromTemporaryLocalNodeId: (id: number) => NodeId;
    /**
     * This subrange of Node ID is used to assign an access control subject to a group of peer nodes that share a
     * single CASE session as specified in Section 6.6.2.1.2, “Subjects identified by CASE Authenticated Tag”.
     */
    const fromCaseAuthenticatedTag: (id: CaseAuthenticatedTag) => NodeId;
    const isCaseAuthenticatedTag: (nodeId: NodeId) => boolean;
    const extractAsCaseAuthenticatedTag: (nodeId: NodeId) => CaseAuthenticatedTag;
    /**
     * This subrange of Node ID is used to assign an access control subject to a particular PAKE key as specified in
     * Section 6.6.2.1.1, “PASE and Group Subjects”. An example usage would be to create an ACL entry to provide
     * administrative access to any commissioner communicating via a PASE session established with a particular pincode.
     */
    const getFromPakeKeyIdentifier: (id: number) => NodeId;
}
/** Tlv schema for a Node Identifier. */
export declare const TlvNodeId: TlvWrapper<NodeId, number | bigint>;
//# sourceMappingURL=NodeId.d.ts.map