1 package org
.asamk
.signal
.manager
.util
;
3 import org
.bouncycastle
.crypto
.generators
.Argon2BytesGenerator
;
4 import org
.bouncycastle
.crypto
.params
.Argon2Parameters
;
5 import org
.whispersystems
.signalservice
.api
.KeyBackupService
;
6 import org
.whispersystems
.signalservice
.api
.kbs
.HashedPin
;
7 import org
.whispersystems
.signalservice
.internal
.registrationpin
.PinHasher
;
9 public final class PinHashing
{
11 private PinHashing() {
14 public static HashedPin
hashPin(String pin
, KeyBackupService
.HashSession hashSession
) {
15 final Argon2Parameters params
= new Argon2Parameters
.Builder(Argon2Parameters
.ARGON2_id
).withParallelism(1)
18 .withMemoryAsKB(16 * 1024)
19 .withSalt(hashSession
.hashSalt())
22 final Argon2BytesGenerator generator
= new Argon2BytesGenerator();
23 generator
.init(params
);
25 return PinHasher
.hashPin(PinHasher
.normalize(pin
), password
-> {
26 byte[] output
= new byte[64];
27 generator
.generateBytes(password
, output
);