Format
This commit is contained in:
parent
4b74d5e13d
commit
be14e77e01
1 changed files with 78 additions and 69 deletions
|
|
@ -1,6 +1,9 @@
|
||||||
const { Buffer } = require("buffer");
|
/**
|
||||||
const Crypto = require("crypto");
|
* @format
|
||||||
const FieldError = require("../fieldError")
|
*/
|
||||||
|
const { Buffer } = require('buffer')
|
||||||
|
const Crypto = require('crypto')
|
||||||
|
const FieldError = require('../fieldError')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @typedef {object} EncryptedMessageBuffer
|
* @typedef {object} EncryptedMessageBuffer
|
||||||
|
|
@ -21,102 +24,108 @@ const FieldError = require("../fieldError")
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const generateRandomString = (length = 16) =>
|
const generateRandomString = (length = 16) =>
|
||||||
new Promise((resolve, reject) => {
|
new Promise((resolve, reject) => {
|
||||||
Crypto.randomBytes(length, (err, buffer) => {
|
Crypto.randomBytes(length, (err, buffer) => {
|
||||||
if (err) {
|
if (err) {
|
||||||
reject(err)
|
reject(err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
const token = buffer.toString('hex')
|
const token = buffer.toString('hex')
|
||||||
resolve(token)
|
resolve(token)
|
||||||
})
|
|
||||||
})
|
})
|
||||||
|
})
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} value
|
* @param {string} value
|
||||||
*/
|
*/
|
||||||
const convertUTF8ToBuffer = (value) => Buffer.from(value, 'utf-8');
|
const convertUTF8ToBuffer = value => Buffer.from(value, 'utf-8')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {string} value
|
* @param {string} value
|
||||||
*/
|
*/
|
||||||
const convertBase64ToBuffer = (value) => Buffer.from(value, 'base64');
|
const convertBase64ToBuffer = value => Buffer.from(value, 'base64')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Buffer} buffer
|
* @param {Buffer} buffer
|
||||||
*/
|
*/
|
||||||
const convertBufferToBase64 = (buffer) => buffer.toString("base64");
|
const convertBufferToBase64 = buffer => buffer.toString('base64')
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {Buffer | string} key
|
* @param {Buffer | string} key
|
||||||
*/
|
*/
|
||||||
const processKey = (key) => {
|
const processKey = key => {
|
||||||
if (Buffer.isBuffer(key)) {
|
if (Buffer.isBuffer(key)) {
|
||||||
return key;
|
return key
|
||||||
}
|
}
|
||||||
const convertedKey = convertBase64ToBuffer(key);
|
const convertedKey = convertBase64ToBuffer(key)
|
||||||
return convertedKey;
|
return convertedKey
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {EncryptedMessageBuffer | EncryptedMessageResponse} encryptedMessage
|
* @param {EncryptedMessageBuffer | EncryptedMessageResponse} encryptedMessage
|
||||||
* @returns {EncryptedMessageResponse}
|
* @returns {EncryptedMessageResponse}
|
||||||
*/
|
*/
|
||||||
const convertToEncryptedMessageResponse = (encryptedMessage) => {
|
const convertToEncryptedMessageResponse = encryptedMessage => {
|
||||||
if (Buffer.isBuffer(encryptedMessage.ciphertext) &&
|
if (
|
||||||
Buffer.isBuffer(encryptedMessage.iv) &&
|
Buffer.isBuffer(encryptedMessage.ciphertext) &&
|
||||||
Buffer.isBuffer(encryptedMessage.mac) &&
|
Buffer.isBuffer(encryptedMessage.iv) &&
|
||||||
Buffer.isBuffer(encryptedMessage.ephemPublicKey)) {
|
Buffer.isBuffer(encryptedMessage.mac) &&
|
||||||
return {
|
Buffer.isBuffer(encryptedMessage.ephemPublicKey)
|
||||||
ciphertext: convertBufferToBase64(encryptedMessage.ciphertext),
|
) {
|
||||||
iv: convertBufferToBase64(encryptedMessage.iv),
|
return {
|
||||||
mac: convertBufferToBase64(encryptedMessage.mac),
|
ciphertext: convertBufferToBase64(encryptedMessage.ciphertext),
|
||||||
ephemPublicKey: convertBufferToBase64(encryptedMessage.ephemPublicKey),
|
iv: convertBufferToBase64(encryptedMessage.iv),
|
||||||
metadata: encryptedMessage.metadata
|
mac: convertBufferToBase64(encryptedMessage.mac),
|
||||||
};
|
ephemPublicKey: convertBufferToBase64(encryptedMessage.ephemPublicKey),
|
||||||
|
metadata: encryptedMessage.metadata
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (typeof encryptedMessage.ciphertext === "string") {
|
if (typeof encryptedMessage.ciphertext === 'string') {
|
||||||
// @ts-ignore
|
// @ts-ignore
|
||||||
return encryptedMessage;
|
return encryptedMessage
|
||||||
}
|
}
|
||||||
|
|
||||||
throw new FieldError({
|
throw new FieldError({
|
||||||
field: "encryptedMessage",
|
field: 'encryptedMessage',
|
||||||
message: "Unknown encrypted message format"
|
message: 'Unknown encrypted message format'
|
||||||
});
|
})
|
||||||
};
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @param {EncryptedMessageBuffer | EncryptedMessageResponse} encryptedMessage
|
* @param {EncryptedMessageBuffer | EncryptedMessageResponse} encryptedMessage
|
||||||
* @returns {EncryptedMessageBuffer}
|
* @returns {EncryptedMessageBuffer}
|
||||||
*/
|
*/
|
||||||
const convertToEncryptedMessage = (encryptedMessage) => {
|
const convertToEncryptedMessage = encryptedMessage => {
|
||||||
if (encryptedMessage.ciphertext instanceof Buffer &&
|
if (
|
||||||
encryptedMessage.iv instanceof Buffer &&
|
encryptedMessage.ciphertext instanceof Buffer &&
|
||||||
encryptedMessage.mac instanceof Buffer &&
|
encryptedMessage.iv instanceof Buffer &&
|
||||||
encryptedMessage.ephemPublicKey instanceof Buffer) {
|
encryptedMessage.mac instanceof Buffer &&
|
||||||
// @ts-ignore
|
encryptedMessage.ephemPublicKey instanceof Buffer
|
||||||
return encryptedMessage;
|
) {
|
||||||
|
// @ts-ignore
|
||||||
|
return encryptedMessage
|
||||||
|
}
|
||||||
|
if (
|
||||||
|
typeof encryptedMessage.ciphertext === 'string' &&
|
||||||
|
typeof encryptedMessage.iv === 'string' &&
|
||||||
|
typeof encryptedMessage.mac === 'string' &&
|
||||||
|
typeof encryptedMessage.ephemPublicKey === 'string'
|
||||||
|
) {
|
||||||
|
return {
|
||||||
|
ciphertext: convertBase64ToBuffer(encryptedMessage.ciphertext),
|
||||||
|
iv: convertBase64ToBuffer(encryptedMessage.iv),
|
||||||
|
mac: convertBase64ToBuffer(encryptedMessage.mac),
|
||||||
|
ephemPublicKey: convertBase64ToBuffer(encryptedMessage.ephemPublicKey),
|
||||||
|
metadata: encryptedMessage.metadata
|
||||||
}
|
}
|
||||||
if (typeof encryptedMessage.ciphertext === "string" &&
|
}
|
||||||
typeof encryptedMessage.iv === "string" &&
|
throw new FieldError({
|
||||||
typeof encryptedMessage.mac === "string" &&
|
field: 'encryptedMessage',
|
||||||
typeof encryptedMessage.ephemPublicKey === "string") {
|
message: 'Unknown encrypted message format'
|
||||||
return {
|
})
|
||||||
ciphertext: convertBase64ToBuffer(encryptedMessage.ciphertext),
|
}
|
||||||
iv: convertBase64ToBuffer(encryptedMessage.iv),
|
|
||||||
mac: convertBase64ToBuffer(encryptedMessage.mac),
|
|
||||||
ephemPublicKey: convertBase64ToBuffer(encryptedMessage.ephemPublicKey),
|
|
||||||
metadata: encryptedMessage.metadata
|
|
||||||
};
|
|
||||||
}
|
|
||||||
throw new FieldError({
|
|
||||||
field: "encryptedMessage",
|
|
||||||
message: "Unknown encrypted message format"
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
module.exports = {
|
module.exports = {
|
||||||
generateRandomString,
|
generateRandomString,
|
||||||
|
|
@ -125,5 +134,5 @@ module.exports = {
|
||||||
convertBufferToBase64,
|
convertBufferToBase64,
|
||||||
convertToEncryptedMessage,
|
convertToEncryptedMessage,
|
||||||
convertToEncryptedMessageResponse,
|
convertToEncryptedMessageResponse,
|
||||||
processKey,
|
processKey
|
||||||
}
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue