/** * Public key resources. * * @author n1474335 [n1474335@gmail.com] * @copyright Crown Copyright 2016 * @license Apache-2.0 */ import { toHex, fromHex } from "./Hex.mjs"; /** * Formats Distinguished Name (DN) strings. * * @param {string} dnStr * @param {number} indent * @returns {string} */ export function formatDnStr (dnStr, indent) { const fields = dnStr.substr(1).replace(/([^\\])\//g, "$1$1/").split(/[^\\]\//); let output = "", maxKeyLen = 0, key, value, i, str; for (i = 0; i < fields.length; i++) { if (!fields[i].length) continue; key = fields[i].split("=")[0]; maxKeyLen = key.length > maxKeyLen ? key.length : maxKeyLen; } for (i = 0; i < fields.length; i++) { if (!fields[i].length) continue; key = fields[i].split("=")[0]; value = fields[i].split("=")[1]; str = key.padEnd(maxKeyLen, " ") + " = " + value + "\n"; output += str.padStart(indent + str.length, " "); } return output.slice(0, -1); } /** * Formats byte strings by adding line breaks and delimiters. * * @param {string} byteStr * @param {number} length - Line width * @param {number} indent * @returns {string} */ export function formatByteStr (byteStr, length, indent) { byteStr = toHex(fromHex(byteStr), ":"); length = length * 3; let output = ""; for (let i = 0; i < byteStr.length; i += length) { const str = byteStr.slice(i, i + length) + "\n"; if (i === 0) { output += str; } else { output += str.padStart(indent + str.length, " "); } } return output.slice(0, output.length-1); }