protected void parseMeshPduNotifications(@NonNull final byte[] pdu, @NonNull final MeshNetwork network) throws ExtendedInvalidCipherTextException {
        final List<NetworkKey> networkKeys = network.getNetKeys();
        final int ivi = ((pdu[1] & 0xFF) >>> 7) & 0x01;
        final int nid = pdu[1] & 0x7F;
        final int acceptedIvIndex = network.getIvIndex().getIvIndex();
        int ivIndex = acceptedIvIndex == 0 ? 0 : acceptedIvIndex - 1;
        int tempIvIndex = ivIndex;
        NetworkKey networkKey = null;
        SecureUtils.K2Output k2Output = null;
        byte[] networkHeader = null;
        int ctlTtl = 0;
        int ctl = 0;
        int src = 0;
        ProvisionedMeshNode node = null;
        while (tempIvIndex <= ivIndex + 1) {
            //Here we go through all the network keys and filter out network keys based on the nid.
            for (int i = 0; i < networkKeys.size(); i++) {
                networkKey = networkKeys.get(i);
                k2Output = getMatchingK2Output(networkKey, nid);
                if (k2Output != null) {
                    networkHeader = deObfuscateNetworkHeader(pdu, MeshParserUtils.intToBytes(tempIvIndex), k2Output.getPrivacyKey());
                    ctlTtl = networkHeader[0];
                    ctl = (ctlTtl >> 7) & 0x01;
                    src = MeshParserUtils.unsignedBytesToInt(networkHeader[5], networkHeader[4]);
                    // Check if the src is known to the network and if found let's break
                    // Note a node may not be found if there are two provisioners are operating independently without syncing the network.
                    node = network.getNode(src);
                    if (node != null) {
                        break;
                    }
                }
            }
            // IF the node was found we can safely try to decrypt message with the network key which we found src of the message.
            if(node != null && k2Output != null) {
                final byte[] sequenceNumber = ByteBuffer.allocate(3).order(ByteOrder.BIG_ENDIAN).put(networkHeader, 1, 3).array();
                MeshLogger.verbose(TAG, "Sequence number of received Network PDU: " + MeshParserUtils.convert24BitsToInt(sequenceNumber));
                //TODO validate ivi
                byte[] nonce;
                try {
                    final int networkPayloadLength = pdu.length - (2 + networkHeader.length);
                    final byte[] transportPdu = new byte[networkPayloadLength];
                    System.arraycopy(pdu, 8, transportPdu, 0, networkPayloadLength);
                    final byte[] decryptedPayload;
                    final MeshMessageState state;
                    if (pdu[0] == MeshManagerApi.PDU_TYPE_NETWORK) {
                        nonce = createNetworkNonce((byte) ctlTtl, sequenceNumber, src, MeshParserUtils.intToBytes(tempIvIndex));
                        decryptedPayload = SecureUtils.decryptCCM(transportPdu, k2Output.getEncryptionKey(), nonce, SecureUtils.getNetMicLength(ctl));
                        state = getState(src);
                    } else {
                        nonce = createProxyNonce(sequenceNumber, src, MeshParserUtils.intToBytes(tempIvIndex));
                        decryptedPayload = SecureUtils.decryptCCM(transportPdu, k2Output.getEncryptionKey(), nonce, SecureUtils.getNetMicLength(ctl));
                        state = getState(MeshAddress.UNASSIGNED_ADDRESS);
                    }
                    if (state != null) {
                        //TODO look in to proxy filter messages
                        ((DefaultNoOperationMessageState) state).parseMeshPdu(networkKey, node, pdu, networkHeader, decryptedPayload, tempIvIndex, sequenceNumber);
                        return;
                    }
                } catch (InvalidCipherTextException ex) {
                    throw new ExtendedInvalidCipherTextException(ex.getMessage(), ex.getCause(), TAG);
                }
            }
            tempIvIndex++;
        }
    }
Parse the mesh network/proxy pdus
<p>
This method will try to network layer de-obfuscation and decryption using the available network keys
</p>

@param pdu     mesh pdu that was sent
@param network {@link MeshNetwork}
mesh/src/main/java/no/nordicsemi/android/mesh/transport/BaseMeshMessageHandler.java