LassoWsseUsernameToken

## LassoWsseUsernameToken LassoWsseUsernameToken |

## Synopsis

    enum                LassoWsseUsernameTokenPasswordType;
    struct              LassoWsseUsernameToken;
    LassoWsseUsernameToken * lasso_wsse_username_token_new  (void);
    void                lasso_wsse_username_token_reset_nonce
                                                            (LassoWsseUsernameToken *wsse_username_token);
    void                lasso_wsse_username_token_set_password_kind
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             LassoWsseUsernameTokenPasswordType password_type);
    lasso_error_t       lasso_wsse_username_token_set_password
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             char *password);
    lasso_error_t       lasso_wsse_username_token_check_password
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             char *password);
    guchar *            lasso_wsse_username_token_derive_key
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             char *password);

## Description

Transmit username and password credential as a WS-Security token. The password can be transmitted as cleartext or using a digest mode. It also allows to derive encryption and HMAC signing keys.

## Details

### enum LassoWsseUsernameTokenPasswordType

    typedef enum {
    	LASSO_WSSE_USERNAME_TOKEN_PASSWORD_TYPE_UNKNOWN,
    	LASSO_WSSE_USERNAME_TOKEN_PASSWORD_TYPE_TEXT,
    	LASSO_WSSE_USERNAME_TOKEN_PASSWORD_TYPE_DIGEST,
    	LASSO_WSSE_USERNAME_TOKEN_PASSWORD_TYPE_LAST
    } LassoWsseUsernameTokenPasswordType;

### struct LassoWsseUsernameToken

    struct LassoWsseUsernameToken {
    	LassoNode parent;

    	char *Id;
    	char *Username;
    	char *Nonce;
    	char *Salt;
    	char *Created;
    	int Iteration;
    	GHashTable *attributes;
    };

LassoNode `parent`; |
char *`Id`; | the identifier of the UsernameToken
char *`Username`; | the username
char *`Nonce`; | a nonce used to compute the digest of the password
char *`Salt`; | the salt for generating derived key
char *`Created`; | the timestamp for the generation of the token, also used in the digest of the password
int `Iteration`; | how many times to apply SHA1 for generating derivated key
GHashTable *`attributes`; |

### lasso_wsse_username_token_new ()

    LassoWsseUsernameToken * lasso_wsse_username_token_new  (void);

### lasso_wsse_username_token_reset_nonce ()

    void                lasso_wsse_username_token_reset_nonce
                                                            (LassoWsseUsernameToken *wsse_username_token);

Generate a random nonce.

`wsse_username_token` : | a LassoWsseUsernameToken object

### lasso_wsse_username_token_set_password_kind ()

    void                lasso_wsse_username_token_set_password_kind
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             LassoWsseUsernameTokenPasswordType password_type);

Set the way to transmit password, that is either cleartext or digest.

`wsse_username_token` : | a LassoWsseUsernameToken object
`password_type` : | a LassoWsseUsernameTokenPasswordType enumeration

### lasso_wsse_username_token_set_password ()

    lasso_error_t       lasso_wsse_username_token_set_password
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             char *password);

Set the password using the given UTF-8 string. If password kind is digest, compute the digest SHA1(nonce + created + password), convert to Base64 and set it as the password. If nonce or created are NULL, the empty string is used.

`wsse_username_token` : | a LassoWsseUsernameToken object
`password` : | an UTF-8 string
Returns : | 0 if successfull, an error code otherwise.

### lasso_wsse_username_token_check_password ()

    lasso_error_t       lasso_wsse_username_token_check_password
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             char *password);

### lasso_wsse_username_token_derive_key ()

    guchar *            lasso_wsse_username_token_derive_key
                                                            (LassoWsseUsernameToken *wsse_username_token,
                                                             char *password);

Generate a derived 128bit key using the password and setting from the UsernameToken.

`wsse_username_token` : | a LassoWsseUsernameToken object
`password` : | the known password
Returns : | a 20 byte octet string.