Files
bare-operating-system/packages/bare-os-booter/scripts/verify-hyperswarm-noise-wire-pk.mjs
T
2026-04-21 20:43:06 -04:00

65 lines
1.5 KiB
JavaScript

/**
* Proves chat `senderPk` must be the **Noise** `socket.publicKey` (32 B), not
* `swarm.keyPair.publicKey` — the peer's `remotePublicKey` matches the other
* side's `publicKey` on the same connection, not the DHT key pair.
*/
import Hyperswarm from 'hyperswarm'
import b4a from 'b4a'
import { topicKey } from 'bare-os-protocol/constants.js'
const topic = topicKey()
const a = new Hyperswarm()
const b = new Hyperswarm()
const aKey = a.keyPair.publicKey
const bKey = b.keyPair.publicKey
let aSock = null
let bSock = null
a.on('connection', (s) => {
aSock = s
check()
})
b.on('connection', (s) => {
bSock = s
check()
})
function check() {
if (!aSock || !bSock) return
const remoteB = b4a.equals(aSock.remotePublicKey, bKey)
const remoteA = b4a.equals(bSock.remotePublicKey, aKey)
console.log(
'DHT keyPair.pub === peer remotePk ?',
' A.remote vs B.dht:',
remoteB,
' B.remote vs A.dht:',
remoteA
)
console.log(
'Noise wire identity (correct for chat senderPk):'
)
console.log(
' B.remotePk === A.socket.publicKey',
b4a.equals(bSock.remotePublicKey, aSock.publicKey)
)
console.log(
' A.remotePk === B.socket.publicKey',
b4a.equals(aSock.remotePublicKey, bSock.publicKey)
)
}
b.join(topic)
await new Promise((r) => setTimeout(r, 400))
a.join(topic)
await new Promise((r) => setTimeout(r, 12000))
if (!aSock || !bSock) {
console.error('FAIL: missing connection within timeout (NAT/firewall?)')
process.exitCode = 1
}
await a.destroy()
await b.destroy()