Browse Source

Fixed security key generation

pull/277/head
Tilen Komel 2 years ago
parent
commit
afc45588fa
  1. 34
      src/components/PageComponents/Config/Security.tsx

34
src/components/PageComponents/Config/Security.tsx

@ -19,7 +19,7 @@ export const Security = (): JSX.Element => {
); );
const [privateKeyVisible, setPrivateKeyVisible] = useState<boolean>(false); const [privateKeyVisible, setPrivateKeyVisible] = useState<boolean>(false);
const [privateKeyBitCount, setPrivateKeyBitCount] = useState<number>( const [privateKeyBitCount, setPrivateKeyBitCount] = useState<number>(
config.security?.privateKey.length ?? 16, config.security?.privateKey.length ?? 32,
); );
const [privateKeyValidationText, setPrivateKeyValidationText] = const [privateKeyValidationText, setPrivateKeyValidationText] =
useState<string>(); useState<string>();
@ -60,7 +60,11 @@ export const Security = (): JSX.Element => {
setPrivateKey(fromByteArray(privateKey)); setPrivateKey(fromByteArray(privateKey));
setPublicKey(fromByteArray(publicKey)); setPublicKey(fromByteArray(publicKey));
setPrivateKeyValidationText(undefined); validatePass(
fromByteArray(privateKey),
privateKeyBitCount,
setPrivateKeyValidationText,
);
}; };
const adminKeyClickEvent = () => { const adminKeyClickEvent = () => {
@ -82,19 +86,31 @@ export const Security = (): JSX.Element => {
value: React.SetStateAction<string | undefined>, value: React.SetStateAction<string | undefined>,
) => void, ) => void,
) => { ) => {
if (input.length % 4 !== 0 || toByteArray(input).length !== count) { try {
if (input.length % 4 !== 0 || toByteArray(input).length !== count) {
setValidationText(`Please enter a valid ${count * 8} bit PSK.`);
} else {
setValidationText(undefined);
}
} catch (e) {
console.error(e);
setValidationText(`Please enter a valid ${count * 8} bit PSK.`); setValidationText(`Please enter a valid ${count * 8} bit PSK.`);
} else {
setValidationText(undefined);
} }
}; };
const privateKeyInputChangeEvent = ( const privateKeyInputChangeEvent = (
e: React.ChangeEvent<HTMLInputElement>, e: React.ChangeEvent<HTMLInputElement>,
) => { ) => {
const psk = e.currentTarget?.value; const privateKeyB64String = e.currentTarget?.value;
setPrivateKey(psk); setPrivateKey(privateKeyB64String);
validatePass(psk, privateKeyBitCount, setPrivateKeyValidationText); validatePass(
privateKeyB64String,
privateKeyBitCount,
setPrivateKeyValidationText,
);
const publicKey = getX25519PublicKey(toByteArray(privateKeyB64String));
setPublicKey(fromByteArray(publicKey));
}; };
const adminKeyInputChangeEvent = (e: React.ChangeEvent<HTMLInputElement>) => { const adminKeyInputChangeEvent = (e: React.ChangeEvent<HTMLInputElement>) => {
@ -136,7 +152,7 @@ export const Security = (): JSX.Element => {
name: "privateKey", name: "privateKey",
label: "Private Key", label: "Private Key",
description: "Used to create a shared key with a remote device", description: "Used to create a shared key with a remote device",
bits: [{ text: "128 bit", value: "16", key: "bit128" }], bits: [{ text: "256 bit", value: "32", key: "bit256" }],
validationText: privateKeyValidationText, validationText: privateKeyValidationText,
devicePSKBitCount: privateKeyBitCount, devicePSKBitCount: privateKeyBitCount,
inputChange: privateKeyInputChangeEvent, inputChange: privateKeyInputChangeEvent,

Loading…
Cancel
Save