]>
git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - server/helpers/peertube-crypto.js
3 const crypto
= require('crypto')
4 const bcrypt
= require('bcrypt')
5 const fs
= require('fs')
6 const openssl
= require('openssl-wrapper')
8 const constants
= require('../initializers/constants')
9 const logger
= require('./logger')
11 const peertubeCrypto
= {
14 createCertsIfNotExist
,
19 function checkSignature (publicKey
, data
, hexSignature
) {
20 const verify
= crypto
.createVerify(constants
.SIGNATURE_ALGORITHM
)
23 if (typeof data
=== 'string') {
27 dataString
= JSON
.stringify(data
)
29 logger
.error('Cannot check signature.', { error: err
})
34 verify
.update(dataString
, 'utf8')
36 const isValid
= verify
.verify(publicKey
, hexSignature
, constants
.SIGNATURE_ENCODING
)
40 function sign (data
) {
41 const sign
= crypto
.createSign(constants
.SIGNATURE_ALGORITHM
)
44 if (typeof data
=== 'string') {
48 dataString
= JSON
.stringify(data
)
50 logger
.error('Cannot sign data.', { error: err
})
55 sign
.update(dataString
, 'utf8')
58 const myKey
= fs
.readFileSync(constants
.CONFIG
.STORAGE
.CERT_DIR
+ 'peertube.key.pem')
59 const signature
= sign
.sign(myKey
, constants
.SIGNATURE_ENCODING
)
64 function comparePassword (plainPassword
, hashPassword
, callback
) {
65 bcrypt
.compare(plainPassword
, hashPassword
, function (err
, isPasswordMatch
) {
66 if (err
) return callback(err
)
68 return callback(null, isPasswordMatch
)
72 function createCertsIfNotExist (callback
) {
73 certsExist(function (exist
) {
78 createCerts(function (err
) {
84 function cryptPassword (password
, callback
) {
85 bcrypt
.genSalt(constants
.BCRYPT_SALT_SIZE
, function (err
, salt
) {
86 if (err
) return callback(err
)
88 bcrypt
.hash(password
, salt
, function (err
, hash
) {
89 return callback(err
, hash
)
94 // ---------------------------------------------------------------------------
96 module
.exports
= peertubeCrypto
98 // ---------------------------------------------------------------------------
100 function certsExist (callback
) {
101 fs
.exists(constants
.CONFIG
.STORAGE
.CERT_DIR
+ 'peertube.key.pem', function (exists
) {
102 return callback(exists
)
106 function createCerts (callback
) {
107 certsExist(function (exist
) {
108 if (exist
=== true) {
109 const string
= 'Certs already exist.'
110 logger
.warning(string
)
111 return callback(new Error(string
))
114 logger
.info('Generating a RSA key...')
117 'out': constants
.CONFIG
.STORAGE
.CERT_DIR
+ 'peertube.key.pem',
120 openssl
.exec('genrsa', options
, function (err
) {
122 logger
.error('Cannot create private key on this pod.')
125 logger
.info('RSA key generated.')
128 'in': constants
.CONFIG
.STORAGE
.CERT_DIR
+ 'peertube.key.pem',
130 'out': constants
.CONFIG
.STORAGE
.CERT_DIR
+ 'peertube.pub'
132 logger
.info('Manage public key...')
133 openssl
.exec('rsa', options
, function (err
) {
135 logger
.error('Cannot create public key on this pod.')
139 logger
.info('Public key managed.')
140 return callback(null)