4 } from '../initializers'
12 import { logger } from './logger'
13 import { AccountInstance } from '../models/account/account-interface'
14 import { jsig } from './custom-jsonld-signature'
16 async function createPrivateAndPublicKeys () {
17 logger.info('Generating a RSA key...')
19 const { key } = await createPrivateKey(PRIVATE_RSA_KEY_SIZE)
20 const { publicKey } = await getPublicKey(key)
22 return { privateKey: key, publicKey }
25 function isSignatureVerified (fromAccount: AccountInstance, signedDocument: object) {
26 const publicKeyObject = {
27 '@context': jsig.SECURITY_CONTEXT_URL,
28 '@id': fromAccount.url,
29 '@type': 'CryptographicKey',
30 owner: fromAccount.url,
31 publicKeyPem: fromAccount.publicKey
34 const publicKeyOwnerObject = {
35 '@context': jsig.SECURITY_CONTEXT_URL,
36 '@id': fromAccount.url,
37 publicKey: [ publicKeyObject ]
41 publicKey: publicKeyObject,
42 publicKeyOwner: publicKeyOwnerObject
45 return jsig.promises.verify(signedDocument, options)
47 logger.error('Cannot check signature.', err)
52 function signObject (byAccount: AccountInstance, data: any) {
54 privateKeyPem: byAccount.privateKey,
55 creator: byAccount.url
58 return jsig.promises.sign(data, options)
61 function comparePassword (plainPassword: string, hashPassword: string) {
62 return bcryptComparePromise(plainPassword, hashPassword)
65 async function cryptPassword (password: string) {
66 const salt = await bcryptGenSaltPromise(BCRYPT_SALT_SIZE)
68 return bcryptHashPromise(password, salt)
71 // ---------------------------------------------------------------------------
76 createPrivateAndPublicKeys,