# Secure | QMK Firmware
Documentation for QMK Firmware

Skip to content

# Secure ​

The secure feature aims to prevent unwanted interaction without user intervention.

TIP

Secure does not currently implement encryption/decryption/etc and should not be a replacement where a strong hardware/software based solution is required.

### Unlock sequence ​

To unlock, the user must perform a set of actions. This can optionally be configured to be multiple keys.

- While unlocking all keyboard input is ignored
- Incorrect attempts will revert back to the previously locked state

### Automatic Locking ​

Once unlocked, the keyboard will revert back to a locked state after the configured timeout. The timeout can be refreshed by using the `secure_activity_event` function, for example from one of the various hooks.

## Usage ​

Add the following to your `rules.mk`:

make

    SECURE_ENABLE = yes

## Keycodes ​

Key | Aliases | Description
--- | --- | ---
`QK_SECURE_LOCK` | `SE_LOCK` | Revert back to a locked state
`QK_SECURE_UNLOCK` | `SE_UNLK` | Forces unlock without performing a unlock sequence
`QK_SECURE_TOGGLE` | `SE_TOGG` | Toggle directly between locked and unlock without performing a unlock sequence
`QK_SECURE_REQUEST` | `SE_REQ` | Request that user perform the unlock sequence

## Configuration ​

Define | Default | Description
--- | --- | ---
`SECURE_UNLOCK_TIMEOUT` | `5000` | Timeout for the user to perform the configured unlock sequence - `0` to disable
`SECURE_IDLE_TIMEOUT` | `60000` | Timeout while unlocked before returning to locked - `0` to disable
`SECURE_UNLOCK_SEQUENCE` | `{ { 0, 0 } }` | Array of matrix locations describing a sequential sequence of keypresses

## Functions ​

Function | Description
--- | ---
`secure_is_locked()` | Check if the device is currently locked
`secure_is_unlocking()` | Check if an unlock sequence is currently in progress
`secure_is_unlocked()` | Check if the device is currently unlocked
`secure_lock()` | Lock down the device
`secure_unlock()` | Force unlock the device - bypasses user unlock sequence
`secure_request_unlock()` | Begin listening for an unlock sequence
`secure_activity_event()` | Flag that user activity has happened and the device should remain unlocked