final AccessMessage parseUnsegmentedAccessLowerTransportPDU(@NonNull final byte[] pdu,
                                                                final int ivIndex,
                                                                @NonNull final byte[] sequenceNumber) {
        AccessMessage message = null;
        final byte header = pdu[10]; //Lower transport pdu starts here
        final int seg = (header >> 7) & 0x01;
        final int akf = (header >> 6) & 0x01;
        final int aid = header & 0x3F;
        if (seg == 0) { //Unsegmented message
            MeshLogger.debug(TAG, "IV Index of received message: " + ivIndex);
            final int seqAuth = (ivIndex << 24) | MeshParserUtils.convert24BitsToInt(sequenceNumber);
            final byte[] src = MeshParserUtils.getSrcAddress(pdu);
            final int srcAdd = MeshParserUtils.unsignedBytesToInt(src[1], src[0]);
            MeshLogger.debug(TAG, "SeqAuth: " + seqAuth);
            if (!isValidSeqAuth(seqAuth, srcAdd)) {
                return null;
            }
            mMeshNode.setSeqAuth(srcAdd, seqAuth);
            // We do not need to rely on the sequence number here
            // Setting hte sequence number here will reset the already incremented sequence number for a message sent to all nodes.
            // mMeshNode.setSequenceNumber(MeshParserUtils.convert24BitsToInt(sequenceNumber));
            message = new AccessMessage();
            if (akf == 0) {// device key was used to encrypt
                final int lowerTransportPduLength = pdu.length - 10;
                final ByteBuffer lowerTransportBuffer = ByteBuffer.allocate(lowerTransportPduLength).order(ByteOrder.BIG_ENDIAN);
                lowerTransportBuffer.put(pdu, 10, lowerTransportPduLength);
                final byte[] lowerTransportPDU = lowerTransportBuffer.array();
                final SparseArray<byte[]> messages = new SparseArray<>();
                messages.put(0, lowerTransportPDU);
                message.setSegmented(false);
                message.setAszmic(0); //aszmic is always 0 for unsegmented access messages
                message.setAkf(akf);
                message.setAid(aid);
                message.setLowerTransportAccessPdu(messages);
            } else {
                final int lowerTransportPduLength = pdu.length - 10;
                final ByteBuffer lowerTransportBuffer = ByteBuffer.allocate(lowerTransportPduLength).order(ByteOrder.BIG_ENDIAN);
                lowerTransportBuffer.put(pdu, 10, lowerTransportPduLength);
                final byte[] lowerTransportPDU = lowerTransportBuffer.array();
                final SparseArray<byte[]> messages = new SparseArray<>();
                messages.put(0, lowerTransportPDU);
                message.setSegmented(false);
                message.setAszmic(0); //aszmic is always 0 for unsegmented access messages
                message.setAkf(akf);
                message.setAid(aid);
                message.setLowerTransportAccessPdu(messages);
            }
        }
        return message;
    }
Parses a unsegmented lower transport access pdu

@param pdu            The complete pdu was received from the node. This is already de-obfuscated
                      and decrypted at network layer.
@param ivIndex        IV Index of the received pdu
@param sequenceNumber Sequence number of the message.
mesh/src/main/java/no/nordicsemi/android/mesh/transport/LowerTransportLayer.java