# mlx5dv_crypto_login

## NAME



           mlx5dv_crypto_login - Creates a crypto login session
    
           mlx5dv_crypto_login_query_state - Queries the state of the current
           crypto login session
    
           mlx5dv_crypto_logout - Logs out from the current crypto login
           session
    


## SYNOPSIS



                  #include <infiniband/mlx5dv.h>
    
                  int mlx5dv_crypto_login(struct ibv_context *context,
                              struct mlx5dv_crypto_login_attr *login_attr);
    
                  int mlx5dv_crypto_login_query_state(struct ibv_context *context,
                                      enum mlx5dv_crypto_login_state *state);
    
                  int mlx5dv_crypto_logout(struct ibv_context *context);
    


## DESCRIPTION



           When using a crypto engine that is in wrapped import method, an
           active crypto login session must be present in order to create and
           query Data Encryption Keys (DEKs).
    
           **mlx5dv_crypto_login()** Creates a crypto login session with the
           credential given in _login_attr_ and associates it with _context_.
           Only one active crypto login session can be associated per device
           context.
    
           **mlx5dv_crypto_login_query_state()** queries the state of the crypto
           login session associated with _context_ and returns the state in
           _state_ , which indicates whether it is valid, invalid or doesn’t
           exist.  A valid crypto login session can become invalid if the
           credential or the import KEK used in the crypto login session were
           deleted during the login session (for example by a crypto
           officer).  In this case, **mlx5dv_crypto_logout()** should be called
           to destroy the current invalid crypto login session and if still
           necessary, **mlx5dv_crypto_login()** should be called to create a new
           crypto login session with valid credential and import KEK.
    
           **mlx5dv_crypto_logout()** logs out from the current crypto login
           session associated with _context_.
    
           Existing DEKs that were previously loaded to the device during a
           crypto login session don’t need an active crypto login session in
           order to be used (in MKey or during traffic).
    


## ARGUMENTS



       **context**
           The device context to associate the crypto login session with.
    
       **login_attr**
           Crypto login attributes specify the credential to login with and
           the import KEK to be used for secured communications during the
           crypto login session.
    
                  struct mlx5dv_crypto_login_attr {
                      uint32_t credential_id;
                      uint32_t import_kek_id;
                      char credential[48];
                      uint64_t comp_mask;
                  };
    
           _credential_id_
                  An ID of a credential, from the credentials stored on the
                  device, that indicates the credential that should be
                  validated against the credential provided in _credential_.
    
           _import_kek_id_
                  An ID of an import KEK, from the import KEKs stored on the
                  device, that indicates the import KEK that will be used for
                  unwrapping the credential provided in _credential_ and also
                  for all other secured communications during the crypto
                  login session.
    
           _credential_
                  The credential to login with.  Must be provided wrapped by
                  the AES key wrap algorithm using the import KEK indicated
                  by _import_kek_id_.
    
           _comp_mask_
                  Reserved For future extension, must be 0 now.
    
       **state**
           Indicates the state of the current crypto login session.  can be
           one of MLX5DV_CRYPTO_LOGIN_STATE_VALID,
           MLX5DV_CRYPTO_LOGIN_STATE_NO_LOGIN and
           MLX5DV_CRYPTO_LOGIN_STATE_INVALID.
    


## RETURN VALUE



           **mlx5dv_crypto_login()** returns 0 on success and errno value on
           error.
    
           **mlx5dv_crypto_login_query_state()** returns 0 on success and updates
           _state_ with the queried state.  On error, errno value is returned.
    
           **mlx5dv_crypto_logout()** returns 0 on success and errno value on
           error.
    


## ERRORS



           EEXIST A crypto login session already exists.
    
           EINVAL Invalid attributes were provided, or one or more of
                  _credential_ , _credential_id_ and _import_kek_id_ are invalid.
    
           ENOENT No crypto login session exists.
    


* * *