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

从RFC 5389第15.2节 :

如果IP地址系列是IPv4,则通过以主机字节顺序取得映射IP地址,与魔术cookie异或,并将结果转换为networking字节顺序来计算X地址。 如果IP地址族是IPv6,则通过以主机字节顺序取得映射的IP地址来计算X地址,将其与魔术cookie和96位事务ID的串联进行异或,并将结果转换为networking字节订购。

我在Node.JS中编写了一个STUN服务器,我试图理解如何去异或128位的值。 我感觉好像它将涉及使用Buffer模块中的这些function之一,尽pipe它表示它只支持最多48位。 有关如何为IPv6地址实现128位XOR运算符的任何build议?

以下是我的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); };