mirror of
https://github.com/fluencelabs/js-libp2p-crypto
synced 2025-03-16 01:00:59 +00:00
79 lines
2.0 KiB
JavaScript
79 lines
2.0 KiB
JavaScript
'use strict'
|
|
|
|
const protobuf = require('protocol-buffers')
|
|
const fs = require('fs')
|
|
const path = require('path')
|
|
const pbm = protobuf(fs.readFileSync(path.join(__dirname, './crypto.proto')))
|
|
|
|
exports.utils = require('./utils')
|
|
const keys = exports.keys = require('./keys')
|
|
|
|
exports.keyStretcher = require('./key-stretcher')
|
|
exports.generateEphemeralKeyPair = require('./ephemeral-keys')
|
|
|
|
// Generates a keypair of the given type and bitsize
|
|
exports.generateKeyPair = (type, bits) => {
|
|
let key = keys[type.toLowerCase()]
|
|
if (!key) {
|
|
throw new Error('invalid or unsupported key type')
|
|
}
|
|
|
|
return key.generateKeyPair(bits)
|
|
}
|
|
|
|
// Converts a protobuf serialized public key into its
|
|
// representative object
|
|
exports.unmarshalPublicKey = (buf) => {
|
|
const decoded = pbm.PublicKey.decode(buf)
|
|
|
|
switch (decoded.Type) {
|
|
case pbm.KeyType.RSA:
|
|
return keys.rsa.unmarshalRsaPublicKey(decoded.Data)
|
|
default:
|
|
throw new Error('invalid or unsupported key type')
|
|
}
|
|
}
|
|
|
|
// Converts a public key object into a protobuf serialized public key
|
|
exports.marshalPublicKey = (key, type) => {
|
|
type = (type || 'rsa').toLowerCase()
|
|
|
|
// for now only rsa is supported
|
|
if (type !== 'rsa') {
|
|
throw new Error('invalid or unsupported key type')
|
|
}
|
|
|
|
return pbm.PublicKey.encode({
|
|
Type: pbm.KeyType.RSA,
|
|
Data: key.marshal()
|
|
})
|
|
}
|
|
|
|
// Converts a protobuf serialized private key into its
|
|
// representative object
|
|
exports.unmarshalPrivateKey = (buf) => {
|
|
const decoded = pbm.PrivateKey.decode(buf)
|
|
|
|
switch (decoded.Type) {
|
|
case pbm.KeyType.RSA:
|
|
return keys.rsa.unmarshalRsaPrivateKey(decoded.Data)
|
|
default:
|
|
throw new Error('invalid or unsupported key type')
|
|
}
|
|
}
|
|
|
|
// Converts a private key object into a protobuf serialized private key
|
|
exports.marshalPrivateKey = (key, type) => {
|
|
type = (type || 'rsa').toLowerCase()
|
|
|
|
// for now only rsa is supported
|
|
if (type !== 'rsa') {
|
|
throw new Error('invalid or unsupported key type')
|
|
}
|
|
|
|
return pbm.PrivateKey.encode({
|
|
Type: pbm.KeyType.RSA,
|
|
Data: key.marshal()
|
|
})
|
|
}
|