BEP42 DHT security extension implementation
Last updated 6 years ago by aymeric .
MIT · Repository · Bugs · Original npm · Tarball · package.json
$ cnpm install bittorrent-nodeid 
SYNC missed versions from official npm registry.


Javascript implementation of BEP42 - DHT Security extension to calculate or check the nodeID of a peer.

BEP42 is implemented in projects uTorrent, libtorrent and bootstrap-dht.

Installation and use

This is using node-fast-crc32c from Xiaoyi and/or sse4_crc32 from Anand Suresh.

npm install bittorrent-nodeid


var generate_id=require('bittorent-nodeid');

generate_id('W.X.Y.Z',Random_byte) --> prefix abcdefgh --> nodeID: (first 20 bits of prefix) (random number) Random_byte
generate_id('',1) --> prefix 5fbfbdb2 --> nodeID: 5fbfb e7519910c34ae7026c3e64eacc13c5159 01
generate_id('',86) --> prefix 5a3ce9b0 --> nodeID: 5a3ce 91f3dc70a057e9a9fe0cc900d52b4e61e 56
generate_id('',22) --> prefix a5d4344a --> a5d43 396da271c1a4d1dc7149247f021eabc34 16

Note about the binary format

BEP42 does define the following calculation to compute the nodeID:

crc32c((ip & 0x030f3fff) | (r << 29))

Where ip is the ip address representation in network bytes order.

For ip, the calculation with a random number set to 1 will be crc32c((0x7c1f4b15 & 0x030f3fff) | (1 << 29)), so crc32c(0x200f0b15) which is computed as crc32c(new Buffer('200f0b15','hex')) or crc32c(new Buffer([0x20,0xf,0xb,0x15])) or crc32c('ABCD') where ABCD are the characters corresponding to the ascii code of each byte.

In javascript a character outside of the normal ascii range like 'Á' will be interpreted as utf8 0xc381 and crc32c.calculate('Á') will give b1cf5bcd

But most of the c++ libraries does handle this byte by byte, so 'Á' will be interpreted as 0xc1 and crc32c.calculate('Á') will give 639bf696

Related projects :

Current Tags

  • 1.0.0                                ...           latest (6 years ago)

2 Versions

  • 1.0.0                                ...           6 years ago
  • 0.1.1                                ...           6 years ago
Maintainers (1)
Today 0
This Week 0
This Month 0
Last Day 0
Last Week 0
Last Month 0
Dependencies (2)
Dev Dependencies (0)
Dependents (2)

Copyright 2014 - 2016 © |