# keyctl_pkey_encrypt

## NAME



           keyctl_pkey_encrypt, keyctl_pkey_decrypt - Encrypt and decrypt
           data
    


## SYNOPSIS



           **#include <keyutils.h>**
    
           **long keyctl_pkey_encrypt(key_serial_t** _key_**, const char ***_info_**,**
                                    **const void ***_data_**, size_t** _data_len_**,**
                                    **void ***_enc_**, size_t** _enc_len_**);**
    
           **long keyctl_pkey_decrypt(key_serial_t** _key_**, const char ***_info_**,**
                                    **const void ***_enc_**, size_t** _enc_len_**,**
                                    **void ***_data_**, size_t** _data_len_**);**
    


## DESCRIPTION



           **keyctl_pkey_encrypt**() asks the kernel to use the crypto material
           attached to a key to encrypt a blob of data and
           **keyctl_pkey_decrypt**() asks the kernel to use the key to reverse
           the operation and recover the original data.  Note that these
           operations may involve the kernel calling out to cryptographic
           hardware.  The caller must have **search** permission on a key to be
           able to use them in this manner.
    
           When invoking the function, _key_ indicates the key that will
           provide the cryptographic material and _info_ points to a space- or
           tab-separated string of "key[=value]" parameters that indicate
           things like encoding forms and passwords to unlock the key; see
           asymmetric-key(7) for more information.
    
           _data_ and _datalen_ indicate the address and size of the decrypted
           data buffer and _enc_ and _enclen_ indicate the address and size of
           the encrypted data buffer.  The encrypt function draws data from
           the decrypted data buffer and places the output into the
           encryption buffer.  The decrypt function does the reverse, drawing
           from the encryption buffer and writing into the data buffer.
    
           **keyctl_pkey_query**(2) can be called to find out how large the
           buffers need to be.
    
           Note that not all asymmetric-type keys will support these
           operations; further, the operations available may depend on which
           components of the key material are available: typically encryption
           only requires the public key, but decryption requires the private
           key as well.  Which operations are supported on a particular key
           can also be determined using the query function.
    


## RETURN VALUE



           On success **keyctl_pkey_encrypt**() and **keyctl_pkey_decrypt**() return
           the amount of data written into the output buffer.  On error, the
           value **-1** will be returned and _errno_ will have been set to an
           appropriate error.
    


## ERRORS



           **ENOKEY** The key specified is invalid.
    
           **EKEYEXPIRED**
                  The key specified has expired.
    
           **EKEYREVOKED**
                  The key specified has been revoked.
    
           **EACCES** The key exists, but is not **searchable** by the calling
                  process.
    
           **ENOPKG** Some facility needed to complete the requested operation is
                  not available.  This is most probably a requested or
                  required digest or encryption algorithm.
    
           **EFAULT** Bad address.
    


## LINKING



           This is a library function that can be found in _libkeyutils_.  When
           linking, **-lkeyutils** should be specified to the linker.
    


* * *