package org.snmp4j.security;

import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Iterator;
import java.util.List;
import java.util.Random;
import java.util.Vector;
import org.snmp4j.SNMP4JSettings;
import org.snmp4j.TransportStateReference;
import org.snmp4j.asn1.BER;
import org.snmp4j.asn1.BERInputStream;
import org.snmp4j.asn1.BEROutputStream;
import org.snmp4j.event.CounterEvent;
import org.snmp4j.event.UsmUserEvent;
import org.snmp4j.event.UsmUserListener;
import org.snmp4j.log.LogAdapter;
import org.snmp4j.log.LogFactory;
import org.snmp4j.mp.CounterSupport;
import org.snmp4j.mp.MPv3;
import org.snmp4j.mp.SnmpConstants;
import org.snmp4j.mp.StatusInformation;
import org.snmp4j.smi.Integer32;
import org.snmp4j.smi.OID;
import org.snmp4j.smi.OctetString;
import org.snmp4j.smi.VariableBinding;

/* JADX INFO: loaded from: classes.dex */
public class USM extends SNMPv3SecurityModel {
    private static final int MAXLEN_USMUSERNAME = 32;
    private static final LogAdapter logger = LogFactory.getLogger(USM.class);
    private CounterSupport counterSupport;
    private boolean engineDiscoveryEnabled;
    private SecurityProtocols securityProtocols;
    private UsmTimeTable timeTable;
    private UsmUserTable userTable;
    private transient Vector<UsmUserListener> usmUserListeners;

    public USM(SecurityProtocols securityProtocols, OctetString octetString, int i2) {
        this.engineDiscoveryEnabled = true;
        this.localEngineID = octetString;
        this.timeTable = new UsmTimeTable(octetString, i2);
        this.userTable = new UsmUserTable();
        this.securityProtocols = securityProtocols;
        this.counterSupport = CounterSupport.getInstance();
    }

    private OctetString getSecurityName(OctetString octetString, OctetString octetString2) {
        UsmUserEntry user;
        if (octetString2.length() == 0) {
            return octetString2;
        }
        UsmUserEntry user2 = this.userTable.getUser(octetString, octetString2);
        if (user2 != null) {
            return user2.getUsmUser().getSecurityName();
        }
        if (!isEngineDiscoveryEnabled() || (user = this.userTable.getUser(octetString2)) == null) {
            return null;
        }
        return user.getUsmUser().getSecurityName();
    }

    private static OctetString randomID() {
        byte[] bArr = new byte[8];
        new Random().nextBytes(bArr);
        return new OctetString(bArr);
    }

    public UsmUserEntry addLocalizedUser(byte[] bArr, OctetString octetString, OID oid, byte[] bArr2, OID oid2, byte[] bArr3) {
        UsmUserEntry usmUserEntry = new UsmUserEntry(bArr, octetString, oid, bArr2, oid2, bArr3);
        this.userTable.addUser(usmUserEntry);
        fireUsmUserChange(new UsmUserEvent(this, usmUserEntry, 1));
        return usmUserEntry;
    }

    public void addUser(OctetString octetString, UsmUser usmUser) {
        addUser(octetString, new OctetString(), usmUser);
    }

    public synchronized void addUsmUserListener(UsmUserListener usmUserListener) {
        if (this.usmUserListeners == null) {
            this.usmUserListeners = new Vector<>(2);
        }
        if (!this.usmUserListeners.contains(usmUserListener)) {
            this.usmUserListeners.add(usmUserListener);
        }
    }

    protected void fireIncrementCounter(CounterEvent counterEvent) {
        this.counterSupport.fireIncrementCounter(counterEvent);
    }

    protected void fireUsmUserChange(UsmUserEvent usmUserEvent) {
        Vector<UsmUserListener> vector = this.usmUserListeners;
        if (vector != null) {
            vector.size();
            Iterator<UsmUserListener> it = vector.iterator();
            while (it.hasNext()) {
                it.next().usmUserChange(usmUserEvent);
            }
        }
    }

    @Override // org.snmp4j.security.SecurityModel
    public int generateRequestMessage(int i2, byte[] bArr, int i3, int i4, byte[] bArr2, byte[] bArr3, int i5, BERInputStream bERInputStream, SecurityParameters securityParameters, BEROutputStream bEROutputStream, TransportStateReference transportStateReference) throws IOException {
        return generateResponseMessage(i2, bArr, i3, i4, bArr2, bArr3, i5, bERInputStream, null, securityParameters, bEROutputStream);
    }

    @Override // org.snmp4j.security.SecurityModel
    public int generateResponseMessage(int i2, byte[] bArr, int i3, int i4, byte[] bArr2, byte[] bArr3, int i5, BERInputStream bERInputStream, SecurityStateReference securityStateReference, SecurityParameters securityParameters, BEROutputStream bEROutputStream) throws IOException {
        byte[] bArrBuildWholeMessage;
        UsmSecurityParameters usmSecurityParameters = (UsmSecurityParameters) securityParameters;
        if (securityStateReference != null) {
            UsmSecurityStateReference usmSecurityStateReference = (UsmSecurityStateReference) securityStateReference;
            if (usmSecurityStateReference.getSecurityEngineID() == null) {
                usmSecurityParameters.setAuthoritativeEngineID(bArr2);
                usmSecurityStateReference.setSecurityEngineID(bArr2);
            }
            if (usmSecurityStateReference.getSecurityName() == null) {
                OctetString octetString = new OctetString(bArr3);
                usmSecurityStateReference.setSecurityName(octetString.getValue());
                usmSecurityParameters.setUserName(octetString);
                OctetString securityName = getSecurityName(new OctetString(bArr2), octetString);
                if (securityName != null && securityName.length() <= 32) {
                    usmSecurityParameters.setUserName(securityName);
                }
            } else {
                usmSecurityParameters.setUserName(new OctetString(usmSecurityStateReference.getSecurityName()));
            }
            usmSecurityParameters.setAuthenticationProtocol(usmSecurityStateReference.getAuthenticationProtocol());
            usmSecurityParameters.setPrivacyProtocol(usmSecurityStateReference.getPrivacyProtocol());
            usmSecurityParameters.setAuthenticationKey(usmSecurityStateReference.getAuthenticationKey());
            usmSecurityParameters.setPrivacyKey(usmSecurityStateReference.getPrivacyKey());
        } else {
            OctetString octetString2 = new OctetString();
            if (bArr2 != null) {
                octetString2.setValue(bArr2);
            }
            OctetString octetString3 = new OctetString(bArr3);
            UsmUserEntry user = null;
            if (octetString2.length() != 0) {
                user = getUser(octetString2, octetString3);
            } else {
                if (!isEngineDiscoveryEnabled()) {
                    if (!logger.isDebugEnabled()) {
                        return SnmpConstants.SNMPv3_USM_UNKNOWN_ENGINEID;
                    }
                    logger.debug("Engine ID unknown and discovery disabled");
                    return SnmpConstants.SNMPv3_USM_UNKNOWN_ENGINEID;
                }
                if (hasUser(null, octetString3)) {
                    user = new UsmUserEntry();
                }
            }
            if (user == null) {
                if (!logger.isDebugEnabled()) {
                    return SnmpConstants.SNMPv3_USM_UNKNOWN_SECURITY_NAME;
                }
                logger.debug("Security name not found for engineID=" + octetString2.toHexString() + ", securityName=" + octetString3.toHexString());
                return SnmpConstants.SNMPv3_USM_UNKNOWN_SECURITY_NAME;
            }
            AuthenticationProtocol authenticationProtocol = this.securityProtocols.getAuthenticationProtocol(user.getUsmUser().getAuthenticationProtocol());
            PrivacyProtocol privacyProtocol = this.securityProtocols.getPrivacyProtocol(user.getUsmUser().getPrivacyProtocol());
            usmSecurityParameters.setAuthenticationProtocol(authenticationProtocol);
            usmSecurityParameters.setPrivacyProtocol(privacyProtocol);
            usmSecurityParameters.setAuthenticationKey(user.getAuthenticationKey());
            usmSecurityParameters.setPrivacyKey(user.getPrivacyKey());
            usmSecurityParameters.setUserName(user.getUsmUser().getSecurityName());
            usmSecurityParameters.setAuthoritativeEngineID(octetString2.getValue());
        }
        if (usmSecurityParameters.getAuthoritativeEngineID().length > 32) {
            logger.error("Engine ID too long: " + usmSecurityParameters.getAuthoritativeEngineID().length + ">32 for " + new OctetString(usmSecurityParameters.getAuthoritativeEngineID()).toHexString());
            return SnmpConstants.SNMPv3_USM_ENGINE_ID_TOO_LONG;
        }
        if (bArr3.length > 32) {
            logger.error("Security name too long: " + usmSecurityParameters.getAuthoritativeEngineID().length + ">32 for " + new OctetString(bArr3).toHexString());
            return SnmpConstants.SNMPv3_USM_SECURITY_NAME_TOO_LONG;
        }
        if (i5 >= 2) {
            if (securityStateReference != null) {
                usmSecurityParameters.setAuthoritativeEngineBoots(getEngineBoots());
                usmSecurityParameters.setAuthoritativeEngineTime(getEngineTime());
            } else {
                OctetString octetString4 = new OctetString(bArr2);
                UsmTimeEntry time = this.timeTable.getTime(octetString4);
                if (time == null) {
                    this.timeTable.addEntry(new UsmTimeEntry(octetString4, usmSecurityParameters.getAuthoritativeEngineBoots(), usmSecurityParameters.getAuthoritativeEngineTime()));
                } else {
                    usmSecurityParameters.setAuthoritativeEngineBoots(time.getEngineBoots());
                    usmSecurityParameters.setAuthoritativeEngineTime(time.getLatestReceivedTime());
                }
            }
        }
        if (i5 >= 2 && usmSecurityParameters.getAuthenticationProtocol() == null) {
            return SnmpConstants.SNMPv3_USM_UNSUPPORTED_SECURITY_LEVEL;
        }
        byte[] bArrBuildMessageBuffer = SNMPv3SecurityModel.buildMessageBuffer(bERInputStream);
        if (i5 != 3) {
            logger.debug("RFC3414 §3.1.4.b Outgoing message is not encrypted");
            usmSecurityParameters.setPrivacyParameters(new OctetString());
        } else {
            if (usmSecurityParameters.getPrivacyProtocol() == null) {
                if (logger.isDebugEnabled()) {
                    logger.debug("Unsupported security level (missing or unsupported privacy protocol): Security params are " + usmSecurityParameters);
                }
                return SnmpConstants.SNMPv3_USM_UNSUPPORTED_SECURITY_LEVEL;
            }
            logger.debug("RFC3414 §3.1.4.a Outgoing message needs to be encrypted");
            DecryptParams decryptParams = new DecryptParams();
            byte[] bArrEncrypt = usmSecurityParameters.getPrivacyProtocol().encrypt(bArrBuildMessageBuffer, 0, bArrBuildMessageBuffer.length, usmSecurityParameters.getPrivacyKey(), usmSecurityParameters.getAuthoritativeEngineBoots(), usmSecurityParameters.getAuthoritativeEngineTime(), decryptParams);
            if (bArrEncrypt == null) {
                if (!logger.isDebugEnabled()) {
                    return SnmpConstants.SNMPv3_USM_ENCRYPTION_ERROR;
                }
                logger.debug("Encryption error");
                return SnmpConstants.SNMPv3_USM_ENCRYPTION_ERROR;
            }
            usmSecurityParameters.setPrivacyParameters(new OctetString(decryptParams.array));
            OctetString octetString5 = new OctetString(bArrEncrypt);
            BEROutputStream bEROutputStream2 = new BEROutputStream(ByteBuffer.allocate(octetString5.getBERLength()));
            octetString5.encodeBER(bEROutputStream2);
            bArrBuildMessageBuffer = bEROutputStream2.getBuffer().array();
        }
        if (i5 >= 2) {
            AuthenticationProtocol authenticationProtocol2 = usmSecurityParameters.getAuthenticationProtocol();
            usmSecurityParameters.setAuthenticationParameters(new OctetString(new byte[authenticationProtocol2.getAuthenticationCodeLength()]));
            bArrBuildWholeMessage = SNMPv3SecurityModel.buildWholeMessage(new Integer32(i2), bArrBuildMessageBuffer, bArr, usmSecurityParameters);
            if (!usmSecurityParameters.getAuthenticationProtocol().authenticate(usmSecurityParameters.getAuthenticationKey(), bArrBuildWholeMessage, 0, bArrBuildWholeMessage.length, new ByteArrayWindow(bArrBuildWholeMessage, usmSecurityParameters.getAuthParametersPosition() + usmSecurityParameters.getSecurityParametersPosition(), authenticationProtocol2.getAuthenticationCodeLength()))) {
                if (!logger.isDebugEnabled()) {
                    return SnmpConstants.SNMPv3_USM_AUTHENTICATION_ERROR;
                }
                logger.debug("Outgoing message could not be authenticated");
                return SnmpConstants.SNMPv3_USM_AUTHENTICATION_ERROR;
            }
        } else {
            usmSecurityParameters.setAuthoritativeEngineBoots(0);
            usmSecurityParameters.setAuthenticationParameters(new OctetString());
            usmSecurityParameters.setAuthoritativeEngineTime(0);
            bArrBuildWholeMessage = SNMPv3SecurityModel.buildWholeMessage(new Integer32(i2), bArrBuildMessageBuffer, bArr, usmSecurityParameters);
        }
        bEROutputStream.setBuffer((ByteBuffer) ByteBuffer.wrap(bArrBuildWholeMessage).position(bArrBuildWholeMessage.length));
        return 0;
    }

    public CounterSupport getCounterSupport() {
        return this.counterSupport;
    }

    public int getEngineBoots() {
        return this.timeTable.getEngineBoots();
    }

    public int getEngineTime() {
        return this.timeTable.getEngineTime();
    }

    @Override // org.snmp4j.security.SecurityModel
    public int getID() {
        return 3;
    }

    public SecurityProtocols getSecurityProtocols() {
        return this.securityProtocols;
    }

    public UsmTimeTable getTimeTable() {
        return this.timeTable;
    }

    public UsmUserEntry getUser(OctetString octetString, OctetString octetString2) {
        if (logger.isDebugEnabled()) {
            logger.debug("getUser(engineID=" + octetString.toHexString() + ", securityName=" + octetString2.toString() + ")");
        }
        UsmUserEntry user = this.userTable.getUser(octetString, octetString2);
        if (user != null) {
            return user;
        }
        UsmUserEntry user2 = this.userTable.getUser(octetString2);
        if (user2 == null && octetString2.length() > 0) {
            if (logger.isDebugEnabled()) {
                logger.debug("USM.getUser - User '" + octetString2 + "' unknown");
            }
            return null;
        }
        if (user2 == null || octetString.length() == 0) {
            UsmUserEntry usmUserEntry = new UsmUserEntry();
            usmUserEntry.setUserName(octetString2);
            usmUserEntry.setUsmUser(new UsmUser(octetString2, null, null, null, null));
            return usmUserEntry;
        }
        OID authenticationProtocol = user2.getUsmUser().getAuthenticationProtocol();
        OID privacyProtocol = user2.getUsmUser().getPrivacyProtocol();
        if (authenticationProtocol != null) {
            return addLocalizedUser(octetString.getValue(), octetString2, authenticationProtocol, user2.getUsmUser().isLocalized() ? user2.getUsmUser().getAuthenticationPassphrase().getValue() : this.securityProtocols.passwordToKey(authenticationProtocol, user2.getUsmUser().getAuthenticationPassphrase(), octetString.getValue()), privacyProtocol, privacyProtocol != null ? user2.getUsmUser().isLocalized() ? user2.getUsmUser().getPrivacyPassphrase().getValue() : this.securityProtocols.passwordToKey(privacyProtocol, authenticationProtocol, user2.getUsmUser().getPrivacyPassphrase(), octetString.getValue()) : null);
        }
        return user2;
    }

    public UsmUserTable getUserTable() {
        return this.userTable;
    }

    @Override // org.snmp4j.security.SecurityModel
    public boolean hasAuthoritativeEngineID() {
        return true;
    }

    public boolean hasUser(OctetString octetString, OctetString octetString2) {
        return (this.userTable.getUser(octetString, octetString2) == null && this.userTable.getUser(octetString2) == null && octetString2.length() > 0) ? false : true;
    }

    public boolean isEngineDiscoveryEnabled() {
        return this.engineDiscoveryEnabled;
    }

    @Override // org.snmp4j.security.SecurityModel
    public SecurityParameters newSecurityParametersInstance() {
        return new UsmSecurityParameters();
    }

    @Override // org.snmp4j.security.SecurityModel
    public SecurityStateReference newSecurityStateReference() {
        return new UsmSecurityStateReference();
    }

    @Override // org.snmp4j.security.SecurityModel
    public int processIncomingMsg(int i2, int i3, SecurityParameters securityParameters, SecurityModel securityModel, int i4, BERInputStream bERInputStream, TransportStateReference transportStateReference, OctetString octetString, OctetString octetString2, BEROutputStream bEROutputStream, Integer32 integer32, SecurityStateReference securityStateReference, StatusInformation statusInformation) throws IOException {
        int i5;
        PrivacyProtocol privacyProtocol;
        int i6;
        UsmSecurityParameters usmSecurityParameters = (UsmSecurityParameters) securityParameters;
        UsmSecurityStateReference usmSecurityStateReference = (UsmSecurityStateReference) securityStateReference;
        octetString.setValue(usmSecurityParameters.getAuthoritativeEngineID());
        byte[] bArrBuildMessageBuffer = SNMPv3SecurityModel.buildMessageBuffer(bERInputStream);
        if (octetString.length() == 0 || this.timeTable.checkEngineID(octetString, isEngineDiscoveryEnabled(), usmSecurityParameters.getAuthoritativeEngineBoots(), usmSecurityParameters.getAuthoritativeEngineTime()) != 0) {
            if (logger.isDebugEnabled()) {
                logger.debug("RFC3414 §3.2.3 Unknown engine ID: " + octetString.toHexString());
            }
            octetString.setValue(usmSecurityParameters.getAuthoritativeEngineID());
            octetString2.setValue(usmSecurityParameters.getUserName().getValue());
            if (statusInformation == null) {
                return SnmpConstants.SNMPv3_USM_UNKNOWN_ENGINEID;
            }
            CounterEvent counterEvent = new CounterEvent(this, SnmpConstants.usmStatsUnknownEngineIDs);
            fireIncrementCounter(counterEvent);
            statusInformation.setSecurityLevel(new Integer32(i4));
            statusInformation.setErrorIndication(new VariableBinding(counterEvent.getOid(), counterEvent.getCurrentValue()));
            return SnmpConstants.SNMPv3_USM_UNKNOWN_ENGINEID;
        }
        octetString2.setValue(usmSecurityParameters.getUserName().getValue());
        int scopedPduPosition = usmSecurityParameters.getScopedPduPosition();
        if (usmSecurityParameters.getUserName().length() <= 0 && i4 <= 1) {
            if (logger.isDebugEnabled()) {
                logger.debug("Accepting zero length security name");
            }
            octetString2.setValue(new byte[0]);
        } else if (getSecurityName(octetString, usmSecurityParameters.getUserName()) == null) {
            if (logger.isDebugEnabled()) {
                logger.debug("RFC3414 §3.2.4 Unknown security name: " + octetString2.toHexString());
            }
            if (statusInformation != null) {
                CounterEvent counterEvent2 = new CounterEvent(this, SnmpConstants.usmStatsUnknownUserNames);
                fireIncrementCounter(counterEvent2);
                statusInformation.setSecurityLevel(new Integer32(1));
                statusInformation.setErrorIndication(new VariableBinding(counterEvent2.getOid(), counterEvent2.getCurrentValue()));
            }
            return SnmpConstants.SNMPv3_USM_UNKNOWN_SECURITY_NAME;
        }
        if (usmSecurityParameters.getUserName().length() > 0 || i4 > 1) {
            UsmUserEntry user = getUser(octetString, octetString2);
            if (user == null) {
                if (logger.isDebugEnabled()) {
                    logger.debug("RFC3414 §3.2.4 Unknown security name: " + octetString2.toHexString() + " for engine ID " + octetString.toHexString());
                }
                CounterEvent counterEvent3 = new CounterEvent(this, SnmpConstants.usmStatsUnknownUserNames);
                fireIncrementCounter(counterEvent3);
                if (statusInformation != null) {
                    if (SNMP4JSettings.getReportSecurityLevelStrategy() == SNMP4JSettings.ReportSecurityLevelStrategy.noAuthNoPrivIfNeeded) {
                        statusInformation.setSecurityLevel(new Integer32(1));
                    }
                    statusInformation.setErrorIndication(new VariableBinding(counterEvent3.getOid(), counterEvent3.getCurrentValue()));
                }
                return SnmpConstants.SNMPv3_USM_UNKNOWN_SECURITY_NAME;
            }
            usmSecurityStateReference.setUserName(user.getUserName().getValue());
            AuthenticationProtocol authenticationProtocol = this.securityProtocols.getAuthenticationProtocol(user.getUsmUser().getAuthenticationProtocol());
            PrivacyProtocol privacyProtocol2 = this.securityProtocols.getPrivacyProtocol(user.getUsmUser().getPrivacyProtocol());
            usmSecurityStateReference.setAuthenticationKey(user.getAuthenticationKey());
            usmSecurityStateReference.setPrivacyKey(user.getPrivacyKey());
            usmSecurityStateReference.setAuthenticationProtocol(authenticationProtocol);
            usmSecurityStateReference.setPrivacyProtocol(privacyProtocol2);
            if ((i4 >= 2 && authenticationProtocol == null) || (i4 >= 3 && privacyProtocol2 == null)) {
                if (logger.isDebugEnabled()) {
                    logger.debug("RFC3414 §3.2.5 - Unsupported security level: " + i4 + " by user " + user);
                }
                CounterEvent counterEvent4 = new CounterEvent(this, SnmpConstants.usmStatsUnsupportedSecLevels);
                fireIncrementCounter(counterEvent4);
                if (SNMP4JSettings.getReportSecurityLevelStrategy() == SNMP4JSettings.ReportSecurityLevelStrategy.noAuthNoPrivIfNeeded) {
                    statusInformation.setSecurityLevel(new Integer32(1));
                }
                statusInformation.setErrorIndication(new VariableBinding(counterEvent4.getOid(), counterEvent4.getCurrentValue()));
                return SnmpConstants.SNMPv3_USM_UNSUPPORTED_SECURITY_LEVEL;
            }
            if (i4 >= 2) {
                if (statusInformation != null) {
                    privacyProtocol = privacyProtocol2;
                    i6 = scopedPduPosition;
                    if (!authenticationProtocol.isAuthentic(user.getAuthenticationKey(), bArrBuildMessageBuffer, 0, bArrBuildMessageBuffer.length, new ByteArrayWindow(bArrBuildMessageBuffer, usmSecurityParameters.getAuthParametersPosition() + usmSecurityParameters.getSecurityParametersPosition(), authenticationProtocol.getAuthenticationCodeLength()))) {
                        if (logger.isDebugEnabled()) {
                            logger.debug("RFC3414 §3.2.6 Wrong digest -> authentication failure: " + usmSecurityParameters.getAuthenticationParameters().toHexString());
                        }
                        CounterEvent counterEvent5 = new CounterEvent(this, SnmpConstants.usmStatsWrongDigests);
                        fireIncrementCounter(counterEvent5);
                        if (SNMP4JSettings.getReportSecurityLevelStrategy() == SNMP4JSettings.ReportSecurityLevelStrategy.noAuthNoPrivIfNeeded) {
                            statusInformation.setSecurityLevel(new Integer32(1));
                        }
                        statusInformation.setErrorIndication(new VariableBinding(counterEvent5.getOid(), counterEvent5.getCurrentValue()));
                        return SnmpConstants.SNMPv3_USM_AUTHENTICATION_FAILURE;
                    }
                    int iCheckTime = this.timeTable.checkTime(new UsmTimeEntry(octetString, usmSecurityParameters.getAuthoritativeEngineBoots(), usmSecurityParameters.getAuthoritativeEngineTime()));
                    if (iCheckTime == 1410) {
                        if (logger.isDebugEnabled()) {
                            logger.debug("RFC3414 §3.2.7.b - Unknown engine ID: " + octetString);
                        }
                        CounterEvent counterEvent6 = new CounterEvent(this, SnmpConstants.usmStatsUnknownEngineIDs);
                        fireIncrementCounter(counterEvent6);
                        if (SNMP4JSettings.getReportSecurityLevelStrategy() == SNMP4JSettings.ReportSecurityLevelStrategy.noAuthNoPrivIfNeeded) {
                            statusInformation.setSecurityLevel(new Integer32(1));
                        }
                        statusInformation.setErrorIndication(new VariableBinding(counterEvent6.getOid(), counterEvent6.getCurrentValue()));
                        return iCheckTime;
                    }
                    if (iCheckTime == 1411) {
                        logger.debug("RFC3414 §3.2.7.a Not in time window; engineID='" + octetString + "', engineBoots=" + usmSecurityParameters.getAuthoritativeEngineBoots() + ", engineTime=" + usmSecurityParameters.getAuthoritativeEngineTime());
                        CounterEvent counterEvent7 = new CounterEvent(this, SnmpConstants.usmStatsNotInTimeWindows);
                        fireIncrementCounter(counterEvent7);
                        statusInformation.setSecurityLevel(new Integer32(2));
                        statusInformation.setErrorIndication(new VariableBinding(counterEvent7.getOid(), counterEvent7.getCurrentValue()));
                        return iCheckTime;
                    }
                } else {
                    privacyProtocol = privacyProtocol2;
                    i6 = scopedPduPosition;
                }
                if (i4 >= 3) {
                    OctetString privacyParameters = usmSecurityParameters.getPrivacyParameters();
                    DecryptParams decryptParams = new DecryptParams(privacyParameters.getValue(), 0, privacyParameters.length());
                    try {
                        int i7 = i6;
                        BERInputStream bERInputStream2 = new BERInputStream(ByteBuffer.wrap(bArrBuildMessageBuffer, i7, bArrBuildMessageBuffer.length - i7));
                        long position = bERInputStream2.getPosition();
                        int iDecodeHeader = BER.decodeHeader(bERInputStream2, new BER.MutableByte());
                        int position2 = i7 + ((int) (bERInputStream2.getPosition() - position));
                        bERInputStream2.close();
                        i5 = 0;
                        bEROutputStream.setFilledBuffer(ByteBuffer.wrap(privacyProtocol.decrypt(bArrBuildMessageBuffer, position2, iDecodeHeader, user.getPrivacyKey(), usmSecurityParameters.getAuthoritativeEngineBoots(), usmSecurityParameters.getAuthoritativeEngineTime(), decryptParams)));
                    } catch (Exception e2) {
                        logger.debug("RFC 3414 §3.2.8 Decryption error: " + e2.getMessage());
                        return SnmpConstants.SNMPv3_USM_DECRYPTION_ERROR;
                    }
                } else {
                    int i8 = i6;
                    i5 = 0;
                    bEROutputStream.setFilledBuffer(ByteBuffer.wrap(bArrBuildMessageBuffer, i8, bArrBuildMessageBuffer.length - i8));
                }
            } else {
                i5 = 0;
                bEROutputStream.setFilledBuffer(ByteBuffer.wrap(bArrBuildMessageBuffer, scopedPduPosition, bArrBuildMessageBuffer.length - scopedPduPosition));
            }
        } else {
            bEROutputStream.setFilledBuffer(ByteBuffer.wrap(bArrBuildMessageBuffer, scopedPduPosition, bArrBuildMessageBuffer.length - scopedPduPosition));
            i5 = 0;
        }
        integer32.setValue(i3 - usmSecurityParameters.getBERMaxLength(i4));
        usmSecurityStateReference.setSecurityName(octetString2.getValue());
        return i5;
    }

    public List<UsmUser> removeAllUsers(OctetString octetString, OctetString octetString2) {
        List<UsmUserEntry> listRemoveAllUsers = this.userTable.removeAllUsers(octetString, octetString2);
        if (listRemoveAllUsers.isEmpty()) {
            return Collections.emptyList();
        }
        ArrayList arrayList = new ArrayList();
        for (UsmUserEntry usmUserEntry : listRemoveAllUsers) {
            arrayList.add(usmUserEntry.getUsmUser());
            fireUsmUserChange(new UsmUserEvent(this, usmUserEntry, 2));
        }
        return arrayList;
    }

    public void removeEngineTime(OctetString octetString) {
        this.timeTable.removeEntry(octetString);
    }

    public UsmUser removeUser(OctetString octetString, OctetString octetString2) {
        UsmUserEntry usmUserEntryRemoveUser = this.userTable.removeUser(octetString, octetString2);
        if (usmUserEntryRemoveUser == null) {
            return null;
        }
        fireUsmUserChange(new UsmUserEvent(this, usmUserEntryRemoveUser, 2));
        return usmUserEntryRemoveUser.getUsmUser();
    }

    public synchronized void removeUsmUserListener(UsmUserListener usmUserListener) {
        if (this.usmUserListeners != null && this.usmUserListeners.contains(usmUserListener)) {
            this.usmUserListeners.remove(usmUserListener);
        }
    }

    public void setCounterSupport(CounterSupport counterSupport) {
        if (counterSupport == null) {
            throw null;
        }
        this.counterSupport = counterSupport;
    }

    public void setEngineBoots(int i2) {
        this.timeTable.setEngineBoots(i2);
    }

    public void setEngineDiscoveryEnabled(boolean z) {
        this.engineDiscoveryEnabled = z;
    }

    public void setLocalEngine(OctetString octetString, int i2, int i3) {
        this.localEngineID = octetString;
        this.timeTable.setLocalTime(new UsmTimeEntry(octetString, i2, i3));
    }

    public void setUsers(UsmUser[] usmUserArr) {
        if (usmUserArr == null || usmUserArr.length == 0) {
            this.userTable.clear();
            return;
        }
        Vector vector = new Vector(usmUserArr.length);
        for (UsmUser usmUser : usmUserArr) {
            vector.add(new UsmUserEntry(usmUser.getSecurityName(), (UsmUser) usmUser.clone()));
        }
        this.userTable.setUsers(vector);
    }

    @Override // org.snmp4j.security.SecurityModel
    public boolean supportsEngineIdDiscovery() {
        return true;
    }

    public void updateUser(UsmUserEntry usmUserEntry) {
        fireUsmUserChange(new UsmUserEvent(this, usmUserEntry, this.userTable.addUser(usmUserEntry) == null ? 1 : 3));
    }

    public void addUser(UsmUser usmUser) {
        addUser(usmUser.getSecurityName(), new OctetString(), usmUser);
    }

    /* JADX WARN: Removed duplicated region for block: B:27:0x00a0  */
    /*
        Code decompiled incorrectly, please refer to instructions dump.
        To view partially-correct add '--show-bad-code' argument
    */
    public void addUser(org.snmp4j.smi.OctetString r8, org.snmp4j.smi.OctetString r9, org.snmp4j.security.UsmUser r10) {
        /*
            Method dump skipped, instruction units count: 251
            To view this dump add '--comments-level debug' option
        */
        throw new UnsupportedOperationException("Method not decompiled: org.snmp4j.security.USM.addUser(org.snmp4j.smi.OctetString, org.snmp4j.smi.OctetString, org.snmp4j.security.UsmUser):void");
    }

    public USM() {
        this(SecurityProtocols.getInstance().addDefaultProtocols(), new OctetString(MPv3.createLocalEngineID(randomID())), 0);
    }

    public List<UsmUser> removeAllUsers(OctetString octetString) {
        return removeAllUsers(octetString, null);
    }

    public void removeAllUsers() {
        this.userTable.clear();
        fireUsmUserChange(new UsmUserEvent(this, null, 2));
    }
}
