在STUN服务器上实现XOR-MAPPED-ADDRESS属性

时间:2015-06-18 00:00:30

标签: node.js ip-address p2p xor stun

来自RFC 5389 Section 15.2

  

如果是IP      地址族是IPv4,X-Address是通过获取映射的IP来计算的      以主机字节顺序寻址,与魔术cookie进行异或,并且      将结果转换为网络字节顺序。如果是IP地址      family是IPv6,X-Address是通过获取映射的IP地址来计算的      在主机字节顺序中,与魔术的串联进行异或      cookie和96位事务ID,并将结果转换为      网络字节顺序。

我正在Node.JS中编写一个STUN服务器,我试图了解如何对128位值进行异或。我觉得好像它会涉及使用Buffer模块中的这些函数之一,尽管它说它只支持最多48位。关于如何为IPv6地址实现128位XOR运算符的任何建议?

1 个答案:

答案 0 :(得分:2)

这是我的CryptoPals代码中的XOR运算符:

var xor = function (b0, b1) {
  if (Buffer.isBuffer(b0)) {
    b0 = new Buffer(b0);
  }
  if (Buffer.isBuffer(b1)) {
    b1 = new Buffer(b1);
  }

  if (b0.length !== b1.length) {
    console.log(b0.length, b1.length);
    throw new Error('Tried to xor two buffers of differing length');
  }

  var arr = [];

  for (var i = 0; i < b0.length; i++) {
    arr.push(b0[i] ^ b1[i]);
  }

  return new Buffer(arr);
};