mirror of
https://github.com/planetrenox/inzerosight.git
synced 2026-09-18 10:05:44 +00:00
98 lines
3.1 KiB
JavaScript
98 lines
3.1 KiB
JavaScript
import zwus from 'zwus';
|
|
import * as speck48_96ctr from './speck48_96ctr.js';
|
|
import * as speck32_64ecb from './speck32_64ecb.js';
|
|
|
|
const textarea = document.getElementById('textarea');
|
|
const encoderDropdown = document.getElementById('encoder');
|
|
const cipherDropdown = document.getElementById('cipher');
|
|
const signBtn = document.getElementById('sign');
|
|
const sigDetect = document.getElementById('sigDetect');
|
|
|
|
const SIG = {
|
|
3: '\u{200D}\u{200B}\u{00AD}\u{180E}',
|
|
6: '\u{200D}\u{200B}\u{00AD}\u{2060}',
|
|
8: '\u{200D}\u{200B}\u{00AD}\u{FEFF}'
|
|
};
|
|
|
|
document.getElementById('encodeButton').addEventListener('click', ACT);
|
|
document.getElementById('decodeButton').addEventListener('click', ACT);
|
|
signBtn.addEventListener('click', e =>
|
|
e.target.classList.toggle('on')
|
|
);
|
|
|
|
let fadeTimer;
|
|
|
|
function ACT(event) {
|
|
clearTimeout(fadeTimer);
|
|
sigDetect.className = '';
|
|
|
|
if (textarea.value === '') {
|
|
textarea.value = 'The text box is empty.';
|
|
return;
|
|
}
|
|
|
|
const op = event.target.id === 'encodeButton' ? 'NO' : 'YES';
|
|
const cipher = getCipherKey();
|
|
let base = encoderDropdown.value.split('-')[1];
|
|
let text = textarea.value;
|
|
|
|
if (op === 'YES') {
|
|
const sigBase = Object.keys(SIG).find(b => text.includes(SIG[b]));
|
|
if (sigBase) {
|
|
if (sigBase !== base) {
|
|
sigDetect.textContent = `ZWUS-${sigBase} signature detected`;
|
|
sigDetect.className = 'show';
|
|
fadeTimer = setTimeout(() =>
|
|
sigDetect.className = '', 2000
|
|
);
|
|
}
|
|
base = sigBase;
|
|
encoderDropdown.value = 'ZWUS-' + base;
|
|
text = text.replace(SIG[base], '');
|
|
}
|
|
}
|
|
|
|
const needsKey = cipher !== 'PLAIN';
|
|
const kStr = needsKey && prompt('enter password.');
|
|
|
|
if (needsKey && !kStr) return;
|
|
|
|
try {
|
|
let val = DESCRY[op][cipher](text, base, kStr);
|
|
if (op === 'NO' && signBtn.classList.contains('on'))
|
|
val = SIG[base] + val;
|
|
textarea.value = val;
|
|
} catch (e) {
|
|
console.log(e);
|
|
}
|
|
|
|
if (op === 'NO') {
|
|
textarea.select();
|
|
document.execCommand('copy');
|
|
textarea.value = 'Copied to your clipboard.\n A copy has been placed between these brackets [' + textarea.value + ']';
|
|
}
|
|
}
|
|
|
|
function getCipherKey() {
|
|
return cipherDropdown.value;
|
|
}
|
|
|
|
const DESCRY = {
|
|
NO: {
|
|
PLAIN: (ptStr, base) =>
|
|
zwus.encodeString(ptStr, base),
|
|
SPECK48_96CTR: (ptStr, base, kStr) =>
|
|
zwus.encodeNumberArray(speck48_96ctr.encrypt(ptStr, speck48_96ctr.getKey(kStr)), base),
|
|
'SPECK32_64ECB (insecure)': (ptStr, base, kStr) =>
|
|
zwus.encodeNumberArray(speck32_64ecb.encrypt(ptStr, speck32_64ecb.getKey(kStr)), base),
|
|
},
|
|
YES: {
|
|
PLAIN: (ptStr, base) =>
|
|
zwus.decodeToString(ptStr, base),
|
|
SPECK48_96CTR: (ptStr, base, kStr) =>
|
|
speck48_96ctr.decrypt(zwus.decodeToNumberArray(ptStr, base), speck48_96ctr.getKey(kStr)),
|
|
'SPECK32_64ECB (insecure)': (ptStr, base, kStr) =>
|
|
speck32_64ecb.decrypt(zwus.decodeToNumberArray(ptStr, base), speck32_64ecb.getKey(kStr)),
|
|
}
|
|
};
|