@tradle/otr
Version:
Off-the-Record Messaging Protocol
29 lines (23 loc) • 1.44 kB
JavaScript
var crypto = require('crypto')
var BigInt = require('./vendor/bigint')
var bn = require('bn.js')
var Nbn = new bn('FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF', 16)
Nbn = bn.red(Nbn)
var Gbn = new bn('2', 10).toRed(Nbn)
var NbigInt = BigInt.str2bigInt('FFFFFFFFFFFFFFFFC90FDAA22168C234C4C6628B80DC1CD129024E088A67CC74020BBEA63B139B22514A08798E3404DDEF9519B3CD3A431B302B0A6DF25F14374FE1356D6D51C245E485B576625E7EC6F44C42E9A637ED6B0BFF5CB6F406B7EDEE386BFB5A899FA5AE9F24117C4B1FE649286651ECE45B3DC2007CB8A163BF0598DA48361C55D39A69163FA8FD24CF5F83655D23DCA3AD961C62F356208552BB9ED529077096966D670C354E4ABC9804F1746C08CA237327FFFFFFFFFFFFFFFF', 16)
var GbigInt = BigInt.str2bigInt('2', 10)
var randBN = new bn(crypto.randomBytes(40))
var bigIntRand = BigInt.randBigInt(320)
console.time('bigint')
var bi
for (var i = 0; i < 100; i++) {
bi = BigInt.powMod(GbigInt, bigIntRand, NbigInt)
}
console.timeEnd('bigint')
console.log(BigInt.bigInt2str(bi, 16))
console.time('bn')
for (var i = 0; i < 100; i++) {
bi = Gbn.redPow(randBN)//.mod(Nbn)
}
console.timeEnd('bn')
console.log(bi.toString(16))