# Poco::Crypto

# class CipherKey

Library: Crypto
Package: Cipher
Header: Poco/Crypto/CipherKey.h

## Description

CipherKey stores the key information for decryption/encryption of data. To create a random key, using the following code:

    CipherKey key("aes-256");

Note that you won't be able to decrypt data encrypted with a random key once the Cipher is destroyed unless you persist the generated key and IV. An example usage for random keys is to encrypt data saved in a temporary file.

To create a key using a human-readable password string, use the following code. We create a AES Cipher and use a salt value to make the key more robust:

    std::string password = "secret";
    std::string salt("asdff8723lasdf(**923412");
    CipherKey key("aes-256", password, salt);

You may also control the digest and the number of iterations used to generate the key by specifying the specific values. Here we create a key with the same data as before, except that we use 100 iterations instead of DEFAULT_ITERATION_COUNT, and sha1 instead of the default md5:

    std::string password = "secret";
    std::string salt("asdff8723lasdf(**923412");
    std::string digest ("sha1");
    CipherKey key("aes-256", password, salt, 100, digest);

## Member Summary

Member Functions: blockSize, getIV, getKey, impl, ivSize, keySize, mode, name, operator =, setIV, setKey

## Types Aliases

### ByteVec

using ByteVec = CipherKeyImpl::ByteVec;

### Mode

using Mode = CipherKeyImpl::Mode;

## Enumerations

### Anonymous

DEFAULT_ITERATION_COUNT = 2000

Default iteration count to use with generateKey(). RSA security recommends an iteration count of at least 1000.

## Constructors

### CipherKey

CipherKey(
const std::string & name
);

Creates a new CipherKeyImpl object. Autoinitializes key and initialization vector.

### CipherKey

CipherKey(
const CipherKey & other
);

Copy constructor.

### CipherKey

CipherKey(
CipherKey && other
) noexcept;

Copy constructor.

### CipherKey

CipherKey(
const std::string & name,
const ByteVec & key,
const ByteVec & iv
);

Creates a new CipherKeyImpl object using the given cipher name, key and initialization vector (IV).

The size of the IV must match the cipher's expected IV size (see ivSize()), except for GCM mode, which allows a custom IV size.

### CipherKey

CipherKey(
const std::string & name,
const std::string & passphrase,
const std::string & salt = "",
int iterationCount = DEFAULT_ITERATION_COUNT,
const std::string & digest = "md5"
);

Creates a new CipherKeyImpl object using the given cipher name, passphrase, salt value, iteration count and digest.

## Destructor

### ~CipherKey

~CipherKey();

Destroys the CipherKeyImpl.

## Member Functions

### blockSize

int blockSize() const;

Returns the block size of the Cipher.

### getIV

const ByteVec & getIV() const;

Returns the initialization vector (IV) for the Cipher.

### getKey

const ByteVec & getKey() const;

Returns the key for the Cipher.

### impl

CipherKeyImpl::Ptr impl();

Returns the impl object

### ivSize

int ivSize() const;

Returns the IV size of the Cipher.

### keySize

int keySize() const;

Returns the key size of the Cipher.

### mode

Mode mode() const;

Returns the Cipher's mode of operation.

### name

const std::string & name() const;

Returns the name of the Cipher.

### operator =

CipherKey & operator = (
const CipherKey & other
);

Assignment.

### operator =

CipherKey & operator = (
CipherKey && other
) noexcept;

Move assignment.

### setIV

void setIV(
const ByteVec & iv
);

Sets the initialization vector (IV) for the Cipher.

The size of the vector must match the cipher's expected IV size (see ivSize()), except for GCM mode, which allows a custom IV size.

### setKey

void setKey(
const ByteVec & key
);

Sets the key for the Cipher.