--- /dev/null
+package org.asamk.signal.manager.util;
+
+import org.asamk.signal.util.RandomUtils;
+import org.signal.zkgroup.InvalidInputException;
+import org.signal.zkgroup.profiles.ProfileKey;
+import org.whispersystems.util.Base64;
+
+public class KeyUtils {
+
+ private KeyUtils() {
+ }
+
+ public static String createSignalingKey() {
+ return getSecret(52);
+ }
+
+ public static ProfileKey createProfileKey() {
+ try {
+ return new ProfileKey(getSecretBytes(32));
+ } catch (InvalidInputException e) {
+ throw new AssertionError("Profile key is guaranteed to be 32 bytes here");
+ }
+ }
+
+ public static String createPassword() {
+ return getSecret(18);
+ }
+
+ public static byte[] createStickerUploadKey() {
+ return getSecretBytes(32);
+ }
+
+ private static String getSecret(int size) {
+ byte[] secret = getSecretBytes(size);
+ return Base64.encodeBytes(secret);
+ }
+
+ public static byte[] getSecretBytes(int size) {
+ byte[] secret = new byte[size];
+ RandomUtils.getSecureRandom().nextBytes(secret);
+ return secret;
+ }
+}