mirror of
https://github.com/gchq/CyberChef.git
synced 2025-04-20 14:56:19 -04:00
100 lines
2.6 KiB
JavaScript
100 lines
2.6 KiB
JavaScript
![]() |
import {BigInteger} from "jsbn";
|
||
|
|
||
|
/**
|
||
|
* Windows Filetime operations.
|
||
|
*
|
||
|
* @author n1474335 [n1474335@gmail.com]
|
||
|
* @copyright Crown Copyright 2017
|
||
|
* @license Apache-2.0
|
||
|
*
|
||
|
* @namespace
|
||
|
*/
|
||
|
const Filetime = {
|
||
|
|
||
|
/**
|
||
|
* @constant
|
||
|
* @default
|
||
|
*/
|
||
|
UNITS: ["Seconds (s)", "Milliseconds (ms)", "Microseconds (μs)", "Nanoseconds (ns)"],
|
||
|
|
||
|
/**
|
||
|
* @constant
|
||
|
* @default
|
||
|
*/
|
||
|
FILETIME_FORMATS: ["Decimal", "Hex"],
|
||
|
|
||
|
/**
|
||
|
* Windows Filetime to Unix Timestamp operation.
|
||
|
*
|
||
|
* @author bwhitn [brian.m.whitney@outlook.com]
|
||
|
* @param {string} input
|
||
|
* @param {Object[]} args
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
runFromFiletimeToUnix: function(input, args) {
|
||
|
let units = args[0],
|
||
|
format = args[1];
|
||
|
|
||
|
if (format === "Hex") {
|
||
|
input = new BigInteger(input, 16);
|
||
|
} else {
|
||
|
input = new BigInteger(input);
|
||
|
}
|
||
|
|
||
|
input = input.subtract(new BigInteger("116444736000000000"));
|
||
|
|
||
|
if (units === "Seconds (s)"){
|
||
|
input = input.divide(new BigInteger("10000000"));
|
||
|
} else if (units === "Milliseconds (ms)") {
|
||
|
input = input.divide(new BigInteger("10000"));
|
||
|
} else if (units === "Microseconds (μs)") {
|
||
|
input = input.divide(new BigInteger("10"));
|
||
|
} else if (units === "Nanoseconds (ns)") {
|
||
|
input = input.multiply(new BigInteger("100"));
|
||
|
} else {
|
||
|
throw "Unrecognised unit";
|
||
|
}
|
||
|
|
||
|
return input.toString();
|
||
|
},
|
||
|
|
||
|
|
||
|
/**
|
||
|
* Unix Timestamp to Windows Filetime operation.
|
||
|
*
|
||
|
* @author bwhitn [brian.m.whitney@outlook.com]
|
||
|
* @param {string} input
|
||
|
* @param {Object[]} args
|
||
|
* @returns {string}
|
||
|
*/
|
||
|
runToFiletimeFromUnix: function(input, args) {
|
||
|
let units = args[0],
|
||
|
format = args[1];
|
||
|
|
||
|
input = new BigInteger(input);
|
||
|
|
||
|
if (units === "Seconds (s)"){
|
||
|
input = input.multiply(new BigInteger("10000000"));
|
||
|
} else if (units === "Milliseconds (ms)") {
|
||
|
input = input.multiply(new BigInteger("10000"));
|
||
|
} else if (units === "Microseconds (μs)") {
|
||
|
input = input.multiply(new BigInteger("10"));
|
||
|
} else if (units === "Nanoseconds (ns)") {
|
||
|
input = input.divide(new BigInteger("100"));
|
||
|
} else {
|
||
|
throw "Unrecognised unit";
|
||
|
}
|
||
|
|
||
|
input = input.add(new BigInteger("116444736000000000"));
|
||
|
|
||
|
if (format === "Hex"){
|
||
|
return input.toString(16);
|
||
|
} else {
|
||
|
return input.toString();
|
||
|
}
|
||
|
},
|
||
|
|
||
|
};
|
||
|
|
||
|
export default Filetime;
|