All files trusted-timestamp.ts

90.24% Statements 37/41
62.5% Branches 5/8
100% Functions 6/6
89.47% Lines 34/38

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 561x 1x 1x 1x   1x   4x 4x 4x 4x 1x   3x 3x 3x 3x 3x     3x   1x 1x           3x 3x 3x 2x 2x 2x 2x   1x 1x           1x 1x 1x 1x 1x 1x 1x          
import { execAsync } from './helpers'
import { promisify } from 'util'
import { stat } from 'fs'
import tmp from 'tmp'
 
const statAsync = promisify(stat)
 
export const createRequestFile = async (hash: string): Promise<string> => {
  try {
    const createTmpFileAsync = promisify(tmp.file)
    if (hash.length < 40) {
      throw new Error('Invalid hash')
    }
    const pathTmpFile = await createTmpFileAsync()
    const commandOpenSSL = `openssl ts -query -digest ${hash} -cert -out ${pathTmpFile}`
    await execAsync(commandOpenSSL)
    const statsRequestFile = await statAsync(pathTmpFile)
    Iif (!statsRequestFile.size) {
      throw new Error('There was an error creating File Request. The file appear is empty')
    }
    return pathTmpFile
  } catch (error) {
    Eif (error.message) {
      throw new Error(error.message)
    }
    throw new Error('There was an error creating File Request')
  }
}
 
export const signRequestFile = async (pathRequestFile: string, urlTSA: string): Promise<string> => {
  try {
    await statAsync(pathRequestFile)
    const pathResponseFile = `${pathRequestFile}.tsr`
    const command = `curl -H "Content-Type: application/timestamp-query" --data-binary "@${pathRequestFile}" ${urlTSA} > ${pathResponseFile}`
    await execAsync(command)
    return pathResponseFile
  } catch (error) {
    Eif (error.message) {
      throw new Error(error.message)
    }
    throw new Error('There was a problem signing the file')
  }
}
 
export const getTimestampFromResponse = async (pathResponseFile: string): Promise<string> => {
  try {
    await statAsync(pathResponseFile)
    const command = `openssl ts -reply -in ${pathResponseFile} -text`
    const resultCommand = await execAsync(command)
    const timestamp = resultCommand.match('(Time stamp: )(.*)')[2]
    return timestamp
  } catch (error) {
    throw new Error('There was an error getting the timestamp')
  }
}