private byte[] decrypt(@NonNull final AccessMessage accessMessage, @NonNull final List<Group> groups, @NonNull List<ApplicationKey> keys, final byte[] nonce, final int transportMicLength) {
        for (ApplicationKey key : keys) {
            for (Group group : groups) {
                if(group.getAddressLabel() != null) {
                    if (key.getAid() == accessMessage.getAid()) {
                        try {
                            return SecureUtils
                                    .decryptCCM(accessMessage.getUpperTransportPdu(), key.getKey(), nonce, MeshParserUtils.uuidToBytes(group.getAddressLabel()), transportMicLength);
                        } catch (Exception ex) {
                            // Retrying decryption
                        }
                    }
                    if (key.getOldAid() == accessMessage.getAid()) {

                        try {
                            return SecureUtils
                                    .decryptCCM(accessMessage.getUpperTransportPdu(), key.getOldKey(), nonce, MeshParserUtils.uuidToBytes(group.getAddressLabel()), transportMicLength);
                        } catch (Exception ex) {
                            // Retrying decryption
                        }
                    }
                }
            }
        }
        return null;
    }
Returns the decrypted upper transport pdu

@param accessMessage Access message object containing the upper transport pdu
mesh/src/main/java/no/nordicsemi/android/mesh/transport/UpperTransportLayer.java