103 lines
2.3 KiB
Markdown
103 lines
2.3 KiB
Markdown
# meshcore
|
|
|
|
TypeScript library for MeshCore protocol utilities.
|
|
|
|
## Packet parsing
|
|
|
|
Using the library to decode MeshCore packets:
|
|
|
|
```ts
|
|
import { Packet } from '@hamradio/meshcore';
|
|
|
|
const raw = new Uint8Array(Buffer.from("050AA50E2CB0336DB67BBF78928A3BB9BF7A8B677C83B6EC0716F9DD10002A06", "hex"));
|
|
const packet = Packet.fromBytes(raw);
|
|
console.log(packet);
|
|
|
|
/*
|
|
_Packet {
|
|
header: 5,
|
|
transport: undefined,
|
|
pathLength: 10,
|
|
path: Uint8Array(10) [
|
|
165, 14, 44, 176,
|
|
51, 109, 182, 123,
|
|
191, 120
|
|
],
|
|
payload: Uint8Array(20) [
|
|
146, 138, 59, 185, 191, 122,
|
|
139, 103, 124, 131, 182, 236,
|
|
7, 22, 249, 221, 16, 0,
|
|
42, 6
|
|
],
|
|
routeType: 1,
|
|
payloadVersion: 0,
|
|
payloadType: 1,
|
|
pathHashCount: 10,
|
|
pathHashSize: 1,
|
|
pathHashBytes: 10,
|
|
pathHashes: [
|
|
'a5', '0e', '2c',
|
|
'b0', '33', '6d',
|
|
'b6', '7b', 'bf',
|
|
'78'
|
|
]
|
|
}
|
|
*/
|
|
```
|
|
|
|
## Packet structure parsing
|
|
|
|
The parser can also be instructed to generate a packet structure, useful for debugging or
|
|
printing packet details:
|
|
|
|
```ts
|
|
import { Packet } from '@hamradio/meshcore';
|
|
|
|
const raw = new Uint8Array(Buffer.from("050AA50E2CB0336DB67BBF78928A3BB9BF7A8B677C83B6EC0716F9DD10002A06", "hex"));
|
|
const packet = Packet.fromBytes(raw);
|
|
const { structure } = packet.decode(true);
|
|
console.log(structure);
|
|
|
|
/*
|
|
[
|
|
{
|
|
name: 'header',
|
|
data: Uint8Array(12) [
|
|
5, 10, 165, 14, 44,
|
|
176, 51, 109, 182, 123,
|
|
191, 120
|
|
],
|
|
fields: [
|
|
{ name: 'flags', type: 0, size: 1, bits: [Array] },
|
|
{ name: 'path length', type: 1, size: 1, bits: [Array] },
|
|
{ name: 'path hashes', type: 6, size: 10 }
|
|
]
|
|
},
|
|
{
|
|
name: 'response payload',
|
|
data: Uint8Array(20) [
|
|
146, 138, 59, 185, 191, 122,
|
|
139, 103, 124, 131, 182, 236,
|
|
7, 22, 249, 221, 16, 0,
|
|
42, 6
|
|
],
|
|
fields: [
|
|
{ name: 'destination hash', type: 1, size: 1, value: 146 },
|
|
{ name: 'source hash', type: 1, size: 1, value: 138 },
|
|
{ name: 'cipher MAC', type: 6, size: 2, value: [Uint8Array] },
|
|
{ name: 'cipher text', type: 6, size: 16, value: [Uint8Array] }
|
|
]
|
|
}
|
|
]
|
|
*/
|
|
```
|
|
|
|
## Identities
|
|
|
|
The package supports:
|
|
- `Identity` for public key management.
|
|
- `LocalIdentity` for private key management.
|
|
- `Contact` for managing named identities.
|
|
- `Group` for managing groups.
|
|
- `KeyManager` for managing all of the above and handling decryption.
|