js-libp2p-crypto/test/ephemeral-keys.spec.js
Friedel Ziegelmayer 08c5df5e79 feat: use webcrypto in favor of node-forge
BREAKING CHANGE: generateKeyPair is now async
2016-11-01 12:47:58 +01:00

96 lines
2.5 KiB
JavaScript

/* eslint max-nested-callbacks: ["error", 8] */
/* eslint-env mocha */
'use strict'
const expect = require('chai').expect
const crypto = require('../src')
const fixtures = require('./fixtures/go-elliptic-key')
const curves = ['P-256', 'P-384', 'P-521']
// const lengths = {
// 'P-256': 32,
// 'P-384': 48,
// 'P-521': 65
// }
describe('generateEphemeralKeyPair', () => {
curves.forEach((curve) => {
it(`generate and shared key ${curve}`, (done) => {
crypto.generateEphemeralKeyPair(curve, (err, ours) => {
if (err) {
return done(err)
}
crypto.generateEphemeralKeyPair(curve, (err, theirs) => {
if (err) {
return done(err)
}
ours.genSharedKey(theirs.key, (err, shared) => {
if (err) {
return done(err)
}
expect(shared).to.exist
// expect(shared).to.have.length(lengths[curve])
expect(ours.key).to.exist
done()
})
})
})
})
})
describe.skip('go interop', () => {
it('generates a shared secret', (done) => {
const curve = fixtures.curve
console.log('start', curve)
// crypto.webcrypto.subtle.importKey(
// 'pkcs8',
// Uint8Array.from(fixtures.bob.private),
// {
// name: 'ECDH',
// namedCurve: curve
// },
// false,
// ['deriveBits']
// ).then((bobPrivate) => {
// console.log('imported bobs key')
// checkKeys(bobPrivate)
// }).catch((err) => {
// done(err)
// })
checkKeys()
function checkKeys (bobPrivate) {
crypto.generateEphemeralKeyPair(curve, (err, alice) => {
if (err) {
return done(err)
}
console.log('genreated ephem pair')
const bob = {
key: fixtures.bob.public,
// this is using bobs private key from go ipfs
// instead of alices
genSharedKey: (key, cb) => alice.genSharedKey(key, bobPrivate, cb)
}
alice.genSharedKey(bob.key, (err, s1) => {
if (err) {
return done(err)
}
console.log('genshared alice')
bob.genSharedKey(alice.key, (err, s2) => {
if (err) {
return done(err)
}
console.log('genshared bob')
expect(s1.equals(s2)).to.be.eql(true)
done()
})
})
})
}
})
})
})