what-the-bank/sources/org/jmrtd/cbeff/ISO781611Encoder.java

65 lines
2.7 KiB
Java

package org.jmrtd.cbeff;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import net.sf.scuba.tlv.TLVOutputStream;
import org.bouncycastle.crypto.tls.CipherSuite;
import org.jmrtd.cbeff.BiometricDataBlock;
/* loaded from: classes6.dex */
public class ISO781611Encoder<B extends BiometricDataBlock> implements ISO781611 {
private BiometricDataBlockEncoder<B> bdbEncoder;
public ISO781611Encoder(BiometricDataBlockEncoder<B> biometricDataBlockEncoder) {
this.bdbEncoder = biometricDataBlockEncoder;
}
public void encode(CBEFFInfo cBEFFInfo, OutputStream outputStream) throws IOException {
if (cBEFFInfo instanceof SimpleCBEFFInfo) {
writeBITGroup(Arrays.asList(cBEFFInfo), outputStream);
} else if (cBEFFInfo instanceof ComplexCBEFFInfo) {
writeBITGroup(((ComplexCBEFFInfo) cBEFFInfo).getSubRecords(), outputStream);
}
}
private void writeBITGroup(List<CBEFFInfo> list, OutputStream outputStream) throws IOException {
TLVOutputStream tLVOutputStream = outputStream instanceof TLVOutputStream ? (TLVOutputStream) outputStream : new TLVOutputStream(outputStream);
tLVOutputStream.d(32609);
tLVOutputStream.d(2);
int size = list.size();
tLVOutputStream.d(new byte[]{(byte) size});
for (int i = 0; i < size; i++) {
writeBIT(tLVOutputStream, i, (SimpleCBEFFInfo) list.get(i));
}
tLVOutputStream.c();
}
private void writeBIT(TLVOutputStream tLVOutputStream, int i, SimpleCBEFFInfo<B> simpleCBEFFInfo) throws IOException {
if (!(simpleCBEFFInfo instanceof SimpleCBEFFInfo)) {
throw new IllegalArgumentException("Encoder does not support level > 2 nesting");
}
tLVOutputStream.d(32608);
writeBHT(tLVOutputStream, i, simpleCBEFFInfo);
writeBiometricDataBlock(tLVOutputStream, simpleCBEFFInfo.getBiometricDataBlock());
tLVOutputStream.c();
}
private void writeBHT(TLVOutputStream tLVOutputStream, int i, SimpleCBEFFInfo<B> simpleCBEFFInfo) throws IOException {
tLVOutputStream.d(CipherSuite.TLS_DH_RSA_WITH_AES_256_GCM_SHA384);
for (Map.Entry<Integer, byte[]> entry : simpleCBEFFInfo.getBiometricDataBlock().getStandardBiometricHeader().getElements().entrySet()) {
tLVOutputStream.d(entry.getKey().intValue());
tLVOutputStream.d(entry.getValue());
}
tLVOutputStream.c();
}
private void writeBiometricDataBlock(TLVOutputStream tLVOutputStream, B b) throws IOException {
tLVOutputStream.d(24366);
this.bdbEncoder.encode(b, tLVOutputStream);
tLVOutputStream.c();
}
}