Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Added 12 new timestamp conversions #1840

Open
wants to merge 7 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 18 additions & 9 deletions src/core/config/Categories.json
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@
"From Binary",
"To Octal",
"From Octal",
"To Base64",
"From Base64",
"Show Base64 offsets",
"To Base32",
"From Base32",
"To Base45",
Expand Down Expand Up @@ -177,6 +180,7 @@
"PGP Verify",
"PGP Encrypt and Sign",
"PGP Decrypt and Verify",
"Parse SSH Host Key"
"Generate RSA Key Pair",
"RSA Sign",
"RSA Verify",
Expand Down Expand Up @@ -241,7 +245,6 @@
"URL Encode",
"URL Decode",
"Protobuf Decode",
"Protobuf Encode",
"VarInt Encode",
"VarInt Decode",
"JA3 Fingerprint",
Expand All @@ -265,10 +268,8 @@
"ops": [
"Encode text",
"Decode text",
"Unicode Text Format",
"Remove Diacritics",
"Unescape Unicode Characters",
"Convert to NATO alphabet"
"Unescape Unicode Characters"
]
},
{
Expand Down Expand Up @@ -301,7 +302,6 @@
"Pad lines",
"Find / Replace",
"Regular expression",
"Fuzzy Match",
"Offset checker",
"Hamming Distance",
"Levenshtein Distance",
Expand All @@ -313,7 +313,6 @@
"Convert co-ordinate format",
"Show on map",
"Parse UNIX file permissions",
"Parse ObjectID timestamp",
"Swap endianness",
"Parse colour code",
"Escape string",
Expand All @@ -330,11 +329,22 @@
"Translate DateTime Format",
"From UNIX Timestamp",
"To UNIX Timestamp",
"From UNIX 32-bit Timestamp",
"To UNIX 32-bit Timestamp",
"Windows Filetime to UNIX Timestamp",
"UNIX Timestamp to Windows Filetime",
"From Mac Absolute Timestamp",
"To Mac Absolute Timestamp",
"From HFS(+) Timestamp",
"To HFS(+) Timestamp",
"From Windows 64-bit Filetime Timestamp",
"To Windows 64-bit Filetime Timestamp",
"From Chrome Browser Timestamp",
"To Chrome Browser Timestamp",
"From Firefox Browser Timestamp",
"To Firefox Browser Timestamp",
"DateTime Delta",
"Extract dates",
"Get Time",
"Sleep"
]
},
Expand All @@ -355,6 +365,7 @@
"JPath expression",
"CSS selector",
"Extract EXIF",
"Extract Files"
"Extract ID3",
"Extract Files",
"RAKE"
Expand Down Expand Up @@ -397,7 +408,6 @@
"SHA1",
"SHA2",
"SHA3",
"SM3",
"Keccak",
"Shake",
"RIPEMD",
Expand Down Expand Up @@ -489,7 +499,6 @@
"ops": [
"Render Image",
"Play Media",
"Generate Image",
"Optical Character Recognition",
"Remove EXIF",
"Extract EXIF",
Expand Down
46 changes: 46 additions & 0 deletions src/core/operations/FromChromeBrowserTimeStamp.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @author mykulh [mykulh@yahoo.co.uk]
* @copyright Crown Copyright 2021
* @license Apache-2.0
*/

import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import moment from "moment-timezone";

/**
* From Chrome Browser Timestamp operation
*/
class FromChromeBrowserTimestamp extends Operation {

/**
* FromChromeBrowserTimestamp constructor
*/
constructor() {
super();
this.name = "From Chrome Browser Timestamp";
this.module = "Default";
this.description = "Converts Chrome Browser Timestamp to datetime string<br><br>e.g. <code>12883423549000000</code> \
becomes <code>5 April 209 16:45:49 UTC</code><br><br>Chrome Browser timestamp is a 17 digit value representing the number of microseconds since \
January 1, 1601 UTC.";
this.infoURL = "https://support.google.com/chrome/community?hl=en";
this.inputType = "string";
this.outputType = "string";
this.args = [];
}

/**
* @param {string} input
* @returns {string}
* @throws {OperationError} if invalid unit
*/
run(input, args) {
try {
const d = moment.unix((input /1000000) - 11644473600);
return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC";
} catch {
throw new OperationError("Unrecognised format");
}
}
}
export default FromChromeBrowserTimestamp;

Check failure on line 46 in src/core/operations/FromChromeBrowserTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Newline required at end of file but not found
46 changes: 46 additions & 0 deletions src/core/operations/FromFirefoxBrowserTimeStamp.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @author mykulh [mykulh@yahoo.co.uk]
* @copyright Crown Copyright 2021
* @license Apache-2.0
*/

import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import moment from "moment-timezone";

/**
* From Firefox Browser Timestamp operation
*/
class FromFirefoxBrowserTimestamp extends Operation {

/**
* FromFirefoxBrowserTimestamp constructor
*/
constructor() {
super();
this.name = "From Firefox Browser Timestamp";
this.module = "Default";
this.description = "Converts Firefox Browser Timestamp to datetime string<br><br>e.g. <code>1341575244735000</code> \
becomes <code>6 July 2012 11:47:24 UTC</code><br><br>Firefox Browser timestamp is a 16 digit value representing the number of microseconds since \
January 1, 1970 UTC. Note: fractions of seconds are not retained.";
this.infoURL = "https://support.mozilla.org/en-US/";
this.inputType = "string";
this.outputType = "string";
this.args = [];
}

/**
* @param {string} input
* @returns {string}
* @throws {OperationError} if invalid unit
*/
run(input, args) {
try{

Check failure on line 38 in src/core/operations/FromFirefoxBrowserTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Expected space(s) after "try"
const d = moment.unix((input /1000000));
return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC";
} catch {
throw new OperationError("Unrecognised format");
}
}
}
export default FromFirefoxBrowserTimestamp;
45 changes: 45 additions & 0 deletions src/core/operations/FromHFSPlusTimeStamp.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
/**
* @author mykulh [mykulh@yahoo.co.uk]
* @copyright Crown Copyright 2021
* @license Apache-2.0
*/

import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import moment from "moment-timezone";

/**
* From HFSPlus filesystem Timestamp operation
*/
class FromHFSPlusTimestamp extends Operation {

/**
* FromHFSPlusTimestamp constructor
*/
constructor() {
super();
this.name = "From HFS(+) Timestamp";
this.module = "Default";
this.description = "Converts Apple HFS/HFS+ Filesystem Timestamp to datetime string<br><br>e.g. <code>CDF566EE</code> becomes <code>30 June 2013 04:39:10 UTC</code><br><br>Mac HFS/HFS+ timestamp is a 4 Byte Hex String representing the number of seconds since January 1, 1904 UTC<br><br> Use with swap endianness recipe if required.";
this.infoURL = "https://en.wikipedia.org/wiki/HFS_Plus";
this.inputType = "string";
this.outputType = "string";
this.args = [];
}

/**
* @param {string} input
* @returns {string}
* @throws {OperationError} if invalid unit
*/
run(input, args) {
try {
const h = parseInt(input, 16);
const d = moment.unix(h - 2082844800);
return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC";
} catch {
throw new OperationError("Unrecognised format");
}
}
}
export default FromHFSPlusTimestamp;

Check failure on line 45 in src/core/operations/FromHFSPlusTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Newline required at end of file but not found
44 changes: 44 additions & 0 deletions src/core/operations/FromMacAbsoluteTimestamp.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
/**
* @author mykulh [mykulh@yahoo.co.uk]
* @copyright Crown Copyright 2021
* @license Apache-2.0
*/

import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import moment from "moment-timezone";

/**
* From Mac Absolute Timestamp operation
*/
class FromMacAbsoluteTimestamp extends Operation {

/**
* FromMacAbsoluteTimestamp constructor
*/
constructor() {
super();
this.name = "From Mac Absolute Timestamp";
this.module = "Default";
this.description = "Converts Apple Mac Absolute Timestamp to datetime string<br><br>e.g. <code>591621300</code> becomes <code>Tue 1 October 2019 11:15:00 UTC</code><br><br>Mac Absolute timestamp is a 32-bit value representing the number of seconds since January 1, 2001 UTC";
this.infoURL = "https://developer.apple.com/documentation/corefoundation/cfabsolutetime";
this.inputType = "number";
this.outputType = "string";
this.args = [];
}

/**
* @param {number} input
* @returns {string}
* @throws {OperationError} if invalid unit
*/
run(input, args) {
try {
const d = moment.unix(input + 978307200);
return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC";
} catch {
throw new OperationError("Unrecognised format");
}
}
}
export default FromMacAbsoluteTimestamp;

Check failure on line 44 in src/core/operations/FromMacAbsoluteTimestamp.mjs

View workflow job for this annotation

GitHub Actions / main

Newline required at end of file but not found
47 changes: 47 additions & 0 deletions src/core/operations/FromUNIX32bitTimeStamp.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
/**
* @author mykulh [mykulh@yahoo.co.uk]
* @copyright Crown Copyright 2021
* @license Apache-2.0
*/

import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import moment from "moment-timezone";

/**
* From UNIX 32bit filesystem Timestamp operation
*/
class FromUNIX32bitTimestamp extends Operation {

/**
* FromUNIX32bitTimestamp constructor
*/
constructor() {
super();
this.name = "From UNIX 32-bit Timestamp";
this.module = "Default";
this.description = "Converts UNIX 32-bit Hex Timestamp to datetime string<br><br>e.g. <code>51C3C311</code> becomes <code>21 June 2013 03:05:53 UTC</code><br><br>UNIX 32-bit timestamp is a 4 Byte Hex value representing the number of seconds since January 1, 1970 UTC<br><br> Use with swap endianness recipe if required.";
this.infoURL = "https://wikipedia.org/wiki/Unix_time";
this.inputType = "string";
this.outputType = "string";


Check warning on line 28 in src/core/operations/FromUNIX32bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Trailing spaces not allowed
this.args = [];
}

/**
* @param {string} input
* @returns {string}
* @throws {OperationError} if invalid unit
*/
run(input, args) {
try {
const h = parseInt(input, 16);
const d = moment.unix(h);
return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC";

Check warning on line 41 in src/core/operations/FromUNIX32bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Trailing spaces not allowed
} catch {
throw new OperationError("Unrecognised format");

Check warning on line 43 in src/core/operations/FromUNIX32bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Trailing spaces not allowed
}

Check warning on line 44 in src/core/operations/FromUNIX32bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Trailing spaces not allowed
}
}
export default FromUNIX32bitTimestamp;

Check failure on line 47 in src/core/operations/FromUNIX32bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Newline required at end of file but not found
46 changes: 46 additions & 0 deletions src/core/operations/FromWindows64bitTimeStamp.mjs
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
/**
* @author mykulh [mykulh@yahoo.co.uk]
* @copyright Crown Copyright 2021
* @license Apache-2.0
*/

import Operation from "../Operation.mjs";
import OperationError from "../errors/OperationError.mjs";
import moment from "moment-timezone";

/**
* From Windows 64bit Filesystem Timestamp operation
*/
class FromWindows64bitTimestamp extends Operation {

/**
* FromWindows64bitFilesystemTimestamp constructor
*/
constructor() {
super();
this.name = "From Windows 64-bit Filetime Timestamp";
this.module = "Default";
this.description = "Converts Windows 64-bit Hex Filetime Timestamp to datetime string<br><br>e.g. <code>01CEE16F415343EE</code> becomes <code>14 November 2013 19:21:19 UTC</code><br><br>windows 64-bit filetime timestamp is a 8 Byte Hex value representing the number of 100s of nanoseconds since January 1, 1601 UTC<br><br> Use with swap endianness recipe if required.";
this.infoURL = "https://en.wikipedia.org/wiki/System_time";
this.inputType = "string";
this.outputType = "string";
this.args = [];
}

/**
* @param {string} input
* @returns {string}
* @throws {OperationError} if invalid unit
*/
run(input, args) {
try {
const h = parseInt(input, 16);
const secs = h/10000000;
const d = moment.unix(secs - 11644473600);
return d.tz("UTC").format("ddd D MMMM YYYY HH:mm:ss") + " UTC";

Check warning on line 40 in src/core/operations/FromWindows64bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Trailing spaces not allowed
} catch {
throw new OperationError("Unrecognised format");

Check warning on line 42 in src/core/operations/FromWindows64bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Trailing spaces not allowed
}
}
}
export default FromWindows64bitTimestamp;

Check failure on line 46 in src/core/operations/FromWindows64bitTimeStamp.mjs

View workflow job for this annotation

GitHub Actions / main

Newline required at end of file but not found
Loading
Loading