mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-06-23 03:01:35 +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
|
||
|
}
|