package org.asamk.signal.manager;

import org.asamk.signal.util.RandomUtils;
import org.signal.zkgroup.InvalidInputException;
import org.signal.zkgroup.profiles.ProfileKey;
import org.whispersystems.util.Base64;

class KeyUtils {

    private KeyUtils() {
    }

    static String createSignalingKey() {
        return getSecret(52);
    }

    static ProfileKey createProfileKey() {
        try {
            return new ProfileKey(getSecretBytes(32));
        } catch (InvalidInputException e) {
            throw new AssertionError("Profile key is guaranteed to be 32 bytes here");
        }
    }

    static String createPassword() {
        return getSecret(18);
    }

    static byte[] createGroupId() {
        return getSecretBytes(16);
    }

    static byte[] createUnrestrictedUnidentifiedAccess() {
        return getSecretBytes(16);
    }

    static byte[] createStickerUploadKey() {
        return getSecretBytes(32);
    }

    private static String getSecret(int size) {
        byte[] secret = getSecretBytes(size);
        return Base64.encodeBytes(secret);
    }

    private static byte[] getSecretBytes(int size) {
        byte[] secret = new byte[size];
        RandomUtils.getSecureRandom().nextBytes(secret);
        return secret;
    }
}
