mirror of
https://github.com/meshcore-dev/meshcore.js.git
synced 2026-04-20 22:13:49 +00:00
add advert parser and verifier
This commit is contained in:
parent
f48d55f681
commit
b0e9a3d634
3 changed files with 77 additions and 2 deletions
30
package-lock.json
generated
30
package-lock.json
generated
|
|
@ -7,7 +7,35 @@
|
|||
"": {
|
||||
"name": "@liamcottle/meshcore.js",
|
||||
"version": "1.0.9",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@noble/curves": "^1.8.1"
|
||||
}
|
||||
},
|
||||
"node_modules/@noble/curves": {
|
||||
"version": "1.8.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.8.1.tgz",
|
||||
"integrity": "sha512-warwspo+UYUPep0Q+vtdVB4Ugn8GGQj8iyB3gnRWsztmUHTI3S1nhdiWNsPUGL0vud7JlRRk1XEu7Lq1KGTnMQ==",
|
||||
"dependencies": {
|
||||
"@noble/hashes": "1.7.1"
|
||||
},
|
||||
"engines": {
|
||||
"node": "^14.21.3 || >=16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
},
|
||||
"node_modules/@noble/hashes": {
|
||||
"version": "1.7.1",
|
||||
"resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.7.1.tgz",
|
||||
"integrity": "sha512-B8XBPsn4vT/KJAGqDzbwztd+6Yte3P4V7iafm24bxgDe/mlRuK6xmWPuCNrKt2vDafZ8MfJLlchDG/vYafQEjQ==",
|
||||
"engines": {
|
||||
"node": "^14.21.3 || >=16"
|
||||
},
|
||||
"funding": {
|
||||
"url": "https://paulmillr.com/funding/"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -8,5 +8,8 @@
|
|||
"test": "echo \"Error: no test specified\" && exit 1"
|
||||
},
|
||||
"author": "Liam Cottle <liam@liamcottle.com>",
|
||||
"license": "MIT"
|
||||
"license": "MIT",
|
||||
"dependencies": {
|
||||
"@noble/curves": "^1.8.1"
|
||||
}
|
||||
}
|
||||
|
|
|
|||
44
src/advert.js
Normal file
44
src/advert.js
Normal file
|
|
@ -0,0 +1,44 @@
|
|||
import { ed25519 } from "@noble/curves/ed25519";
|
||||
import BufferReader from "./buffer_reader.js";
|
||||
import Packet from "./packet.js";
|
||||
|
||||
class Advert {
|
||||
|
||||
constructor(publicKey, timestamp, signature, appData) {
|
||||
this.publicKey = publicKey;
|
||||
this.timestamp = timestamp;
|
||||
this.signature = signature;
|
||||
this.appData = appData;
|
||||
}
|
||||
|
||||
getTimestamp() {
|
||||
return (new BufferReader(this.timestamp)).readUInt32LE();
|
||||
}
|
||||
|
||||
isVerified() {
|
||||
return ed25519.verify(this.signature, Buffer.concat([
|
||||
this.publicKey,
|
||||
this.timestamp,
|
||||
this.appData,
|
||||
]), this.publicKey);
|
||||
}
|
||||
|
||||
static fromPacketBytes(bytes) {
|
||||
|
||||
// parse packet from bytes
|
||||
const packet = Packet.fromBytes(bytes);
|
||||
|
||||
// read packet payload
|
||||
const bufferedReader = new BufferReader(packet.payload);
|
||||
const publicKey = bufferedReader.readBytes(32);
|
||||
const timestamp = bufferedReader.readBytes(4); // read as bytes for signature
|
||||
const signature = bufferedReader.readBytes(64);
|
||||
const appData = bufferedReader.readRemainingBytes();
|
||||
|
||||
return new Advert(publicKey, timestamp, signature, appData);
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
export default Advert;
|
||||
Loading…
Add table
Add a link
Reference in a new issue