mirror of
https://github.com/oxen-io/session-android.git
synced 2024-12-25 17:27:45 +00:00
66 lines
1.6 KiB
Java
66 lines
1.6 KiB
Java
package org.thoughtcrime.securesms.backup;
|
|
|
|
|
|
import android.support.annotation.NonNull;
|
|
import android.support.annotation.Nullable;
|
|
|
|
import org.greenrobot.eventbus.EventBus;
|
|
import org.whispersystems.libsignal.util.ByteUtil;
|
|
|
|
import java.security.MessageDigest;
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
public abstract class FullBackupBase {
|
|
|
|
@SuppressWarnings("unused")
|
|
private static final String TAG = FullBackupBase.class.getSimpleName();
|
|
|
|
static class BackupStream {
|
|
static @NonNull byte[] getBackupKey(@NonNull String passphrase, @Nullable byte[] salt) {
|
|
try {
|
|
EventBus.getDefault().post(new BackupEvent(BackupEvent.Type.PROGRESS, 0));
|
|
|
|
MessageDigest digest = MessageDigest.getInstance("SHA-512");
|
|
byte[] input = passphrase.replace(" ", "").getBytes();
|
|
byte[] hash = input;
|
|
|
|
if (salt != null) digest.update(salt);
|
|
|
|
for (int i=0;i<250000;i++) {
|
|
if (i % 1000 == 0) EventBus.getDefault().post(new BackupEvent(BackupEvent.Type.PROGRESS, 0));
|
|
digest.update(hash);
|
|
hash = digest.digest(input);
|
|
}
|
|
|
|
return ByteUtil.trim(hash, 32);
|
|
} catch (NoSuchAlgorithmException e) {
|
|
throw new AssertionError(e);
|
|
}
|
|
}
|
|
}
|
|
|
|
public static class BackupEvent {
|
|
public enum Type {
|
|
PROGRESS,
|
|
FINISHED
|
|
}
|
|
|
|
private final Type type;
|
|
private final int count;
|
|
|
|
BackupEvent(Type type, int count) {
|
|
this.type = type;
|
|
this.count = count;
|
|
}
|
|
|
|
public Type getType() {
|
|
return type;
|
|
}
|
|
|
|
public int getCount() {
|
|
return count;
|
|
}
|
|
}
|
|
|
|
}
|