mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-03-15 21:20:52 +00:00
This PR simply detects missing web crypto and throws an error with an appropriate message. This is a stepping stone that will help users understand the problem until we have time to do a refactor of this module and of all the modules that use it to enable optionally passing your own crypto implementation. refs https://github.com/libp2p/js-libp2p-crypto/pull/149 refs https://github.com/libp2p/js-libp2p-crypto/pull/150 refs https://github.com/libp2p/js-libp2p-crypto/issues/105 refs https://github.com/ipfs/js-ipfs/issues/2153 refs https://github.com/ipfs/js-ipfs/issues/2017 License: MIT Signed-off-by: Alan Shaw <alan@tableflip.io>
62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
/* eslint-env mocha */
|
|
'use strict'
|
|
|
|
const chai = require('chai')
|
|
const dirtyChai = require('dirty-chai')
|
|
const expect = chai.expect
|
|
chai.use(dirtyChai)
|
|
const crypto = require('../')
|
|
const webcrypto = require('../src/webcrypto')
|
|
|
|
async function expectMissingWebCrypto (fn) {
|
|
try {
|
|
await fn()
|
|
} catch (err) {
|
|
expect(err.code).to.equal('ERR_MISSING_WEB_CRYPTO')
|
|
return
|
|
}
|
|
throw new Error('Expected missing web crypto error')
|
|
}
|
|
|
|
describe('Missing web crypto', () => {
|
|
let webcryptoGet
|
|
let rsaPrivateKey
|
|
|
|
before(async () => {
|
|
rsaPrivateKey = await crypto.keys.generateKeyPair('RSA', 512)
|
|
})
|
|
|
|
before(() => {
|
|
webcryptoGet = webcrypto.get
|
|
webcrypto.get = () => webcryptoGet({})
|
|
})
|
|
|
|
after(() => {
|
|
webcrypto.get = webcryptoGet
|
|
})
|
|
|
|
it('should error for hmac create when web crypto is missing', () => {
|
|
return expectMissingWebCrypto(() => crypto.hmac.create('SHA256', Buffer.from('secret')))
|
|
})
|
|
|
|
it('should error for generate ephemeral key pair when web crypto is missing', () => {
|
|
return expectMissingWebCrypto(() => crypto.keys.generateEphemeralKeyPair('P-256'))
|
|
})
|
|
|
|
it('should error for generate rsa key pair when web crypto is missing', () => {
|
|
return expectMissingWebCrypto(() => crypto.keys.generateKeyPair('rsa', 256))
|
|
})
|
|
|
|
it('should error for unmarshal RSA private key when web crypto is missing', () => {
|
|
return expectMissingWebCrypto(() => crypto.keys.unmarshalPrivateKey(crypto.keys.marshalPrivateKey(rsaPrivateKey)))
|
|
})
|
|
|
|
it('should error for sign RSA private key when web crypto is missing', () => {
|
|
return expectMissingWebCrypto(() => rsaPrivateKey.sign(Buffer.from('test')))
|
|
})
|
|
|
|
it('should error for verify RSA public key when web crypto is missing', () => {
|
|
return expectMissingWebCrypto(() => rsaPrivateKey.public.verify(Buffer.from('test'), Buffer.from('test')))
|
|
})
|
|
})
|