65 lines
1.5 KiB
JavaScript
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()
|