91 lines
2.8 KiB
JavaScript
91 lines
2.8 KiB
JavaScript
/**
|
|
* Deserializes the passed in Extended Key to its component parts.
|
|
*
|
|
* @author dgoldenberg [virtualcurrency@mitre.org]
|
|
* @copyright MITRE 2023
|
|
* @license Apache-2.0
|
|
*/
|
|
import Operation from "../Operation.mjs";
|
|
import OperationError from "../errors/OperationError.mjs";
|
|
import { deserializeExtendedKeyFunc } from "../lib/Bitcoin.mjs";
|
|
|
|
|
|
/**
|
|
* Deserializes an extended key (XPUB/XPRV). Returns available information.
|
|
*/
|
|
class DeserializeExtendedKey extends Operation {
|
|
|
|
/**
|
|
* Extract Seedphrases Constructor.
|
|
*/
|
|
constructor() {
|
|
super();
|
|
|
|
this.name = "Deserialize Extended Key";
|
|
this.module = "Serialize";
|
|
this.description = "Deserializes a passed in extended key. Can return all the deserialized information, or just the master key part (useful for chaining this call to others in a recipe).";
|
|
this.inputType = "string";
|
|
this.outputType = "JSON";
|
|
this.presentType = "string";
|
|
this.infoURL = "https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki#Serialization_format";
|
|
this.args = [
|
|
{
|
|
name: "Key Only",
|
|
type: "boolean",
|
|
value: true
|
|
}
|
|
];
|
|
this.checks = [
|
|
{
|
|
"pattern": "^(X|x|Y|y|Z|z|L|l|T|t)[pub|prv|tbv|tub][A-HJ-NP-Za-km-z1-9]{2,}$",
|
|
"flags": "",
|
|
"args": []
|
|
}
|
|
];
|
|
}
|
|
|
|
/**
|
|
* @param {string} input
|
|
* @param {Object[]} args
|
|
* @returns {string}
|
|
*/
|
|
run(input, args) {
|
|
const [keyOnly] = args;
|
|
const result = deserializeExtendedKeyFunc(input);
|
|
if (!keyOnly) {
|
|
return result;
|
|
} else {
|
|
return {"masterkey": result.masterkey};
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Displays the result of deserializing the extended key.
|
|
*
|
|
* @param {Object} output
|
|
* @returns {final_output}
|
|
*/
|
|
present(output) {
|
|
if ("error" in output) {
|
|
throw new OperationError(output.error);
|
|
} else {
|
|
if (Object.prototype.hasOwnProperty.call(output, "masterkey") && Object.prototype.hasOwnProperty.call(output, "checksum")) {
|
|
let finalOutput = "Key Analyzed: " + output.key + "\n";
|
|
finalOutput += "\tChecksum: " + output.checksum + "\n";
|
|
finalOutput += "\tVersion: " + output.version + "\n";
|
|
finalOutput += "\tLevel: " + output.level + "\n";
|
|
finalOutput += "\tFingerprint: " + output.fingerprint + "\n";
|
|
finalOutput += "\tChaincode: " + output.chaincode + "\n";
|
|
finalOutput += "\tMasterKey: " + output.masterkey + "\n";
|
|
finalOutput += "\n";
|
|
return finalOutput;
|
|
} else {
|
|
return output.masterkey;
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
export default DeserializeExtendedKey;
|