# SoftHSM2

[TOC]

## Installing SoftHSM2

Follow the instructions at <https://github.com/softhsm/SoftHSMv2>.

When running on a Linux system, you can install SoftHSM2 using the package manager. For example, on Ubuntu, you can run:

```shell
sudo apt install softhsm2
```

Export the configuration file location

```shell
export SOFTHSM2_CONF=/etc/softhsm2/softhsm2.conf
```

Make sure the token directory set in the configuration file exists:

```shell
mkdir -p /var/lib/softhsm/tokens
# Set appropriate permissions for your systems on the directory
sudo chmod 777 /var/lib/softhsm/tokens
```

To initialize the token, run the following command:

```bash
softhsm2-util --init-token --slot 0 --label "my_token_1"
```

The resulting slot number may be completely different from 0, so you should check the output of the command:

```bash
softhsm2-util --show-slots
```

and always use the DECIMAL slot number in the `kms.toml` file or when referencing HSM objects using the slot id.

Set the SO and User PIN to 12345678 or update the `kms.toml` file accordingly.

## Running the KMS server

Use the provided `kms.toml` file to run the KMS server with the softhsm2 PKCS#11 library.

From the KMS root directory, run the following command:

```bash
COSMIAN_KMS_CONF=crate/hsm/softhsm2/kms.toml cargo run --bin cosmian_kms --features non-fips
```
