Method: Create Key

Description

This endpoint creates a new named encryption key in the specified vault.

  1. The named key is wrapped (encrypted) by the vaults key.

  2. The un-wrapped (plaintext) key material of the named key is not obtainable by any endpoints, unless:

    1. The named key is marked as exportable (allow_export) upon creation of the key.

    2. The named key is marked as backupable (allow_backup) upon creation of the key.

    3. The user calling the /export endpoint has Admin permission in the vault where the named key resides.

    4. The user calling the /backup endpoint has Admin permission in the vault where the named key resides.

The newly created named key can be used by a user with at least Read permission in the vault, to encrypt data using the /encrypt endpoint, or to decrypt data using the /decrypt endpoint without having any access, or knowledge, about the key material.

See the overview on how transparent encryption in StoredSafe can help solve key distribution problems.

Note

Creating a key requires the Write permission in the affected vault.

URL Syntax

/api/{version}/transparent/:vaultid/keys/:name

HTTP Method

POST

Successful HTTP Response

201

Parameters

Parameter name

Description

Parameter type

Type

Default

Mandatory

Comment

X-Http-Token

StoredSafe token

HTTP Header

String

1)

Preferred method

token

StoredSafe token

JSON-encoded

String

1)

Legacy method

vaultid

Vault-ID

URL-encoded

String

Yes

name

Key name

URL-encoded

String

Yes

type

Type of key

JSON-encoded

String

aes128-gcm96

See table below for supported types

allow_export

Enables key to be exported

JSON-encoded

Boolean

True

allow_backup

Enables key to be backed up in plaintext

JSON-encoded

Boolean

True

allow_delete

Enable deletion of key

JSON-encoded

Boolean

True

info

Key information

JSON-encoded

String

Note

1) One of the methods is required.

Name

Description

Type

Signing

aes128-ofb

AES-128 in OFB mode

Symmetric

aes256-ofb

AES-256 in OFB mode

Symmetric

aes128-gcm96

AES-128 in GCM mode using 96 bit nonce size AEAD

Symmetric

aes256-gcm96

AES-256 in GCM mode using 96 bit nonce size AEAD

Symmetric

chacha20-poly1305

ChaCha20-Poly1305 AEAD

Symmetric

RSA-4096

RSA-4096

Asymmetric

Yes

ED25519

ED25519

Asymmetric

Yes

Response Attributes

Attribute

Description

Type

CALLINFO.errorcodes

Number of errors

Integer

CALLINFO.errors

Number of errors

Integer

CALLINFO.general

Information

Array

CALLINFO.handler

Handler used

String

CALLINFO.status

SUCCESS or FAIL

String

CALLINFO.token

Rotated StoredSafe token 1)

String

CALLINFO.version

Key version

String

CALLINFO.objectid

Object-ID

String

DATA

Supplied data in prior API-call

String

HEADERS.(headers)

HTTP Headers

String

PARAMS

Route parameters (empty)

Array

ERRORCODES

Error code and text 2)

Object

ERRORS

Error code and text 2)

Array

Note

1) Token to be used in subsequent calls
2) Only present if errors

Examples

Create a new named key (my-new-key) in the vault (vault-id) 179.

Request

POST /api/1.0/transparent/179/keys/my-new-key
x-http-token: your_storedsafe_token
{
    "type": "aes256-gcm96",
    "info": "my new key"
}

Response

HTTP/2 201
Content-type: application/json; charset=UTF-8
{
    "CALLINFO": {
        "errorcodes": 0,
        "errors": 0,
        "general": [],
        "handler": "EncryptionHandler",
        "status": "SUCCESS",
        "token": "rotated_storedsafe_token",
        "name": "my-new-key",
        "objectid": "8743"
    },
    "DATA": {
        "name": "my-new-key",
        "vaultid": "179",
        "type": "aes256-gcm96",
        "info": "my new key",
        "token": "your_storedsafe_token",
    },
    "HEADERS": {
        "Accept": "*/*",
        "Content-Length": "169",
        "Content-Type": "application/json",
        "Host": "safe.domain.cc",
        "User-Agent": "curl/7.64.1",
        "X-Http-Token": "your_storedsafe_token"
    },
    "PARAMS": []
}

See the annotated example for a full example on how to use transparent encryption.