X-Git-Url: https://git.nmode.ca/signal-cli/blobdiff_plain/5197212d3f04bac3b2d74645f83417bd579ac712..e5a67d6ce1312fe118e99b8bc8fb2f55ed1dbcf2:/lib/src/main/java/org/asamk/signal/manager/DeviceLinkInfo.java diff --git a/lib/src/main/java/org/asamk/signal/manager/DeviceLinkInfo.java b/lib/src/main/java/org/asamk/signal/manager/DeviceLinkInfo.java deleted file mode 100644 index 356cb47d..00000000 --- a/lib/src/main/java/org/asamk/signal/manager/DeviceLinkInfo.java +++ /dev/null @@ -1,60 +0,0 @@ -package org.asamk.signal.manager; - -import org.asamk.signal.manager.api.InvalidDeviceLinkException; -import org.asamk.signal.manager.util.Utils; -import org.signal.libsignal.protocol.InvalidKeyException; -import org.signal.libsignal.protocol.ecc.Curve; -import org.signal.libsignal.protocol.ecc.ECPublicKey; - -import java.net.URI; -import java.net.URISyntaxException; -import java.net.URLEncoder; -import java.nio.charset.StandardCharsets; -import java.util.Base64; - -import static org.whispersystems.signalservice.internal.util.Util.isEmpty; - -public record DeviceLinkInfo(String deviceIdentifier, ECPublicKey deviceKey) { - - public static DeviceLinkInfo parseDeviceLinkUri(URI linkUri) throws InvalidDeviceLinkException { - final var rawQuery = linkUri.getRawQuery(); - if (isEmpty(rawQuery)) { - throw new RuntimeException("Invalid device link uri"); - } - - var query = Utils.getQueryMap(rawQuery); - var deviceIdentifier = query.get("uuid"); - var publicKeyEncoded = query.get("pub_key"); - - if (isEmpty(deviceIdentifier) || isEmpty(publicKeyEncoded)) { - throw new InvalidDeviceLinkException("Invalid device link uri"); - } - - final byte[] publicKeyBytes; - try { - publicKeyBytes = Base64.getDecoder().decode(publicKeyEncoded); - } catch (IllegalArgumentException e) { - throw new InvalidDeviceLinkException("Invalid device link uri", e); - } - ECPublicKey deviceKey; - try { - deviceKey = Curve.decodePoint(publicKeyBytes, 0); - } catch (InvalidKeyException e) { - throw new InvalidDeviceLinkException("Invalid device link", e); - } - - return new DeviceLinkInfo(deviceIdentifier, deviceKey); - } - - public URI createDeviceLinkUri() { - final var deviceKeyString = Base64.getEncoder().encodeToString(deviceKey.serialize()).replace("=", ""); - try { - return new URI("sgnl://linkdevice?uuid=" - + URLEncoder.encode(deviceIdentifier, StandardCharsets.UTF_8) - + "&pub_key=" - + URLEncoder.encode(deviceKeyString, StandardCharsets.UTF_8)); - } catch (URISyntaxException e) { - throw new AssertionError(e); - } - } -}