mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 06:55:08 -04:00
added json to ab helper op
This commit is contained in:
parent
08d66388a7
commit
0ebafdc7f2
3 changed files with 56 additions and 13 deletions
44
src/core/operations/JSONToArrayBuffer.mjs
Normal file
44
src/core/operations/JSONToArrayBuffer.mjs
Normal file
|
@ -0,0 +1,44 @@
|
||||||
|
/**
|
||||||
|
* @author Configured Things Ltd. [getconfigured@configuredthings.com]
|
||||||
|
* @copyright Crown Copyright 2025
|
||||||
|
* @license Apache-2.0
|
||||||
|
*/
|
||||||
|
|
||||||
|
import Operation from "../Operation.mjs";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSON to ArrayBuffer operation
|
||||||
|
*/
|
||||||
|
class JSONToArrayBuffer extends Operation {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* JSONToArrayBuffer constructor
|
||||||
|
*/
|
||||||
|
constructor() {
|
||||||
|
super();
|
||||||
|
|
||||||
|
this.name = "JSON to ArrayBuffer";
|
||||||
|
this.module = "Default";
|
||||||
|
this.description = "Serialises a JSON object to an ArrayBuffer";
|
||||||
|
this.infoURL = ""; // Usually a Wikipedia link. Remember to remove localisation (i.e. https://wikipedia.org/etc rather than https://en.wikipedia.org/etc)
|
||||||
|
this.inputType = "JSON";
|
||||||
|
this.outputType = "ArrayBuffer";
|
||||||
|
this.args = [
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param {JSON} input
|
||||||
|
* @param {Object[]} args
|
||||||
|
* @returns {ArrayBuffer}
|
||||||
|
*/
|
||||||
|
run(input, args) {
|
||||||
|
const messageStr = JSON.stringify(input);
|
||||||
|
const textEncoder = new TextEncoder();
|
||||||
|
const messageAb = textEncoder.encode(messageStr).buffer;
|
||||||
|
return messageAb;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
export default JSONToArrayBuffer;
|
|
@ -23,7 +23,7 @@ class LibHydrogenCurve25519Signing extends Operation {
|
||||||
this.module = "Crypto";
|
this.module = "Crypto";
|
||||||
this.description = "Computes a signature for a message using the lightweight LibHydrogen cryptography library";
|
this.description = "Computes a signature for a message using the lightweight LibHydrogen cryptography library";
|
||||||
this.infoURL = "https://libhydrogen.org/";
|
this.infoURL = "https://libhydrogen.org/";
|
||||||
this.inputType = "JSON";
|
this.inputType = "ArrayBuffer";
|
||||||
this.outputType = "JSON";
|
this.outputType = "JSON";
|
||||||
this.args = [
|
this.args = [
|
||||||
{
|
{
|
||||||
|
@ -41,7 +41,7 @@ class LibHydrogenCurve25519Signing extends Operation {
|
||||||
|
|
||||||
/* eslint-disable camelcase */
|
/* eslint-disable camelcase */
|
||||||
/**
|
/**
|
||||||
* @param {JSON} input
|
* @param {ArrayBuffer} input
|
||||||
* @param {Object[]} args
|
* @param {Object[]} args
|
||||||
* @returns {JSON}
|
* @returns {JSON}
|
||||||
*/
|
*/
|
||||||
|
@ -240,8 +240,8 @@ function reserve(offset, length) {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Digital signing of a JSON object
|
* Digital signing of an ArrayBuffer's contents
|
||||||
* @param {JSON} input - A JSON object to be signed
|
* @param {ArrayBuffer} input - An ArrayBuffer to be signed
|
||||||
* @param {string} context - A string used to define the context of the signing operation,
|
* @param {string} context - A string used to define the context of the signing operation,
|
||||||
* see {@link https://github.com/jedisct1/libhydrogen/wiki/Contexts}
|
* see {@link https://github.com/jedisct1/libhydrogen/wiki/Contexts}
|
||||||
* @param {Uint8Array} privateKey - The private key to use for the digital signing operation
|
* @param {Uint8Array} privateKey - The private key to use for the digital signing operation
|
||||||
|
@ -264,12 +264,11 @@ async function sign(input, context, privateKey) {
|
||||||
contextArr.set([contextAb.at(i)], i);
|
contextArr.set([contextAb.at(i)], i);
|
||||||
}
|
}
|
||||||
|
|
||||||
const messageStr = JSON.stringify(input);
|
const messageTypedArr = new Uint8Array(input);
|
||||||
const messageAb = textEncoder.encode(messageStr);
|
const messageArr = reserve(offset, messageTypedArr.length);
|
||||||
const messageArr = reserve(offset, messageAb.length);
|
|
||||||
|
|
||||||
for (let i = 0; i < messageAb.length; i++) {
|
for (let i = 0; i < input.length; i++) {
|
||||||
messageArr.set([messageAb.at(i)], i);
|
messageArr.set([messageTypedArr.at(i)], i);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate a key pair
|
// Generate a key pair
|
||||||
|
|
|
@ -10,15 +10,15 @@ import OperationError from "../errors/OperationError.mjs";
|
||||||
/**
|
/**
|
||||||
* Configured Things - Digital Security by Design - Signed JSON to Text operation
|
* Configured Things - Digital Security by Design - Signed JSON to Text operation
|
||||||
*/
|
*/
|
||||||
class ConfiguredThingsDigitalSecurityByDesignSignedJSONToText extends Operation {
|
class SignedJSONToArrayBuffer extends Operation {
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* ConfiguredThingsDigitalSecurityByDesignSignedJSONToText constructor
|
* SignedJSONToArrayBuffer constructor
|
||||||
*/
|
*/
|
||||||
constructor() {
|
constructor() {
|
||||||
super();
|
super();
|
||||||
|
|
||||||
this.name = "Configured Things - Digital Security by Design - LibHydrogen Signed JSON to Text";
|
this.name = "Signed JSON to ArrayBuffer";
|
||||||
this.module = "Default";
|
this.module = "Default";
|
||||||
this.description = "Converts signed JSON to text";
|
this.description = "Converts signed JSON to text";
|
||||||
this.infoURL = ""; // Usually a Wikipedia link. Remember to remove localisation (i.e. https://wikipedia.org/etc rather than https://en.wikipedia.org/etc)
|
this.infoURL = ""; // Usually a Wikipedia link. Remember to remove localisation (i.e. https://wikipedia.org/etc rather than https://en.wikipedia.org/etc)
|
||||||
|
@ -49,4 +49,4 @@ class ConfiguredThingsDigitalSecurityByDesignSignedJSONToText extends Operation
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
export default ConfiguredThingsDigitalSecurityByDesignSignedJSONToText;
|
export default SignedJSONToArrayBuffer;
|
Loading…
Add table
Add a link
Reference in a new issue