mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-03-15 15:10:59 +00:00
76 lines
1.9 KiB
JavaScript
76 lines
1.9 KiB
JavaScript
/* eslint max-nested-callbacks: ["error", 8] */
|
|
/* eslint-env mocha */
|
|
'use strict'
|
|
|
|
const expect = require('chai').expect
|
|
const parallel = require('async/parallel')
|
|
|
|
const fixtures = require('./fixtures/go-elliptic-key')
|
|
const crypto = require('../src')
|
|
|
|
const curves = ['P-256', 'P-384'] // 'P-521' fails in tests :( no clue why
|
|
const lengths = {
|
|
'P-256': 65,
|
|
'P-384': 97,
|
|
'P-521': 133
|
|
}
|
|
const secretLengths = {
|
|
'P-256': 32,
|
|
'P-384': 48,
|
|
'P-521': 66
|
|
}
|
|
|
|
describe('generateEphemeralKeyPair', () => {
|
|
curves.forEach((curve) => {
|
|
it(`generate and shared key ${curve}`, (done) => {
|
|
parallel([
|
|
(cb) => crypto.generateEphemeralKeyPair(curve, cb),
|
|
(cb) => crypto.generateEphemeralKeyPair(curve, cb)
|
|
], (err, keys) => {
|
|
expect(err).to.not.exist
|
|
expect(keys[0].key).to.have.length(lengths[curve])
|
|
expect(keys[1].key).to.have.length(lengths[curve])
|
|
|
|
keys[0].genSharedKey(keys[1].key, (err, shared) => {
|
|
expect(err).to.not.exist
|
|
expect(shared).to.have.length(secretLengths[curve])
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
})
|
|
|
|
describe('go interop', () => {
|
|
it('generates a shared secret', (done) => {
|
|
const curve = fixtures.curve
|
|
|
|
parallel([
|
|
(cb) => crypto.generateEphemeralKeyPair(curve, cb),
|
|
(cb) => crypto.generateEphemeralKeyPair(curve, cb)
|
|
], (err, res) => {
|
|
expect(err).to.not.exist
|
|
const alice = res[0]
|
|
const bob = res[1]
|
|
bob.key = fixtures.bob.public
|
|
|
|
parallel([
|
|
(cb) => alice.genSharedKey(bob.key, cb),
|
|
(cb) => bob.genSharedKey(alice.key, fixtures.bob, cb)
|
|
], (err, secrets) => {
|
|
expect(err).to.not.exist
|
|
|
|
expect(
|
|
secrets[0]
|
|
).to.be.eql(
|
|
secrets[1]
|
|
)
|
|
|
|
expect(secrets[0]).to.have.length(32)
|
|
|
|
done()
|
|
})
|
|
})
|
|
})
|
|
})
|
|
})
|