mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-06-22 21:41:38 +00:00
53 lines
972 B
JavaScript
53 lines
972 B
JavaScript
'use strict'
|
|
|
|
const nodeify = require('nodeify')
|
|
|
|
const crypto = require('./webcrypto')()
|
|
|
|
exports.create = function (key, iv, callback) {
|
|
nodeify(crypto.subtle.importKey(
|
|
'raw',
|
|
key,
|
|
{
|
|
name: 'AES-CTR'
|
|
},
|
|
false,
|
|
['encrypt', 'decrypt']
|
|
).then((key) => {
|
|
const counter = copy(iv)
|
|
|
|
return {
|
|
encrypt (data, cb) {
|
|
nodeify(crypto.subtle.encrypt(
|
|
{
|
|
name: 'AES-CTR',
|
|
counter: counter,
|
|
length: 128
|
|
},
|
|
key,
|
|
data
|
|
).then((raw) => Buffer.from(raw)), cb)
|
|
},
|
|
|
|
decrypt (data, cb) {
|
|
nodeify(crypto.subtle.decrypt(
|
|
{
|
|
name: 'AES-CTR',
|
|
counter: counter,
|
|
length: 128
|
|
},
|
|
key,
|
|
data
|
|
).then((raw) => Buffer.from(raw)), cb)
|
|
}
|
|
}
|
|
}), callback)
|
|
}
|
|
|
|
function copy (buf) {
|
|
const fresh = new Buffer(buf.length)
|
|
buf.copy(fresh)
|
|
|
|
return fresh
|
|
}
|