# Security Context Token provider
[Rampart Utilities]

## Classes
struct | rampart_sct_provider_ops
struct | rampart_sct_provider
## Defines
#define | RAMPART_SCT_PROVIDER_FREE(sct_provider, env) ((sct_provider)->ops->free(sct_provider, env))
## Typedefs
typedef struct rampart_sct_provider_ops | rampart_sct_provider_ops_t
typedef struct rampart_sct_provider | rampart_sct_provider_t
## Functions
AXIS2_EXTERN oxs_buffer_t * | sct_provider_get_secret (const axutil_env_t *env, rp_property_t *token, axis2_bool_t is_encryption, rampart_context_t *rampart_context, axis2_msg_ctx_t *msg_ctx)
AXIS2_EXTERN oxs_buffer_t * | sct_provider_get_secret_using_id (const axutil_env_t *env, axis2_char_t *sct_id, rampart_context_t *rampart_context, axis2_msg_ctx_t *msg_ctx)
AXIS2_EXTERN axiom_node_t * | sct_provider_get_token (const axutil_env_t *env, rp_property_t *token, axis2_bool_t is_encryption, rampart_context_t *rampart_context, axis2_msg_ctx_t *msg_ctx)
AXIS2_EXTERN axiom_node_t * | sct_provider_get_attached_reference (const axutil_env_t *env, rp_property_t *token, axis2_bool_t is_encryption, rampart_context_t *rampart_context, axis2_msg_ctx_t *msg_ctx)
AXIS2_EXTERN axiom_node_t * | sct_provider_get_unattached_reference (const axutil_env_t *env, rp_property_t *token, axis2_bool_t is_encryption, rampart_context_t *rampart_context, axis2_msg_ctx_t *msg_ctx)
AXIS2_EXTERN axis2_status_t | sct_provider_validate_security_context_token (const axutil_env_t *env, axiom_node_t *sct_node, rampart_context_t *rampart_context, axis2_msg_ctx_t *msg_ctx)
AXIS2_EXTERN void * | sct_provider_obtain_sct_default (const axutil_env_t *env, axis2_bool_t is_encryption, axis2_msg_ctx_t *msg_ctx, axis2_char_t *sct_id, int sct_id_type, void *user_params)
AXIS2_EXTERN axis2_status_t | sct_provider_store_sct_default (const axutil_env_t *env, axis2_msg_ctx_t *msg_ctx, axis2_char_t *sct_global_id, axis2_char_t *sct_local_id, void *sct, void *user_params)
AXIS2_EXTERN axis2_status_t | sct_provider_delete_sct_default (const axutil_env_t *env, axis2_msg_ctx_t *msg_ctx, axis2_char_t *sct_id, int sct_id_type, void *user_params)
AXIS2_EXTERN axis2_status_t | sct_provider_validate_sct_default (const axutil_env_t *env, axiom_node_t *sct_node, axis2_msg_ctx_t *msg_ctx, void *user_params)

## Function Documentation

AXIS2_EXTERN axis2_status_t sct_provider_delete_sct_default | ( | const axutil_env_t * | env,
|  | axis2_msg_ctx_t * | msg_ctx,
|  | axis2_char_t * | sct_id,
|  | int | sct_id_type,
|  | void * | user_params |
| ) |  |  |

Default implementation of delete sct function. If neither sct_provider nor user defined store function is given, this function will be used. (delete_security_context_token_fn)

Parameters:

  | env | pointer to environment struct
  | msg_ctx | pointer to message context structure
  | sct_id | identifier of security context token. Should not be NULL.
  | sct_id_type | type of sct id. can be global or local.
  | user_params | parameter provided by user (not used in this method)

Returns:
  AXIS2_SUCCESS if deleted. AXIS2_FAILURE otherwise.

AXIS2_EXTERN axiom_node_t* sct_provider_get_attached_reference | ( | const axutil_env_t * | env,
|  | rp_property_t * | token,
|  | axis2_bool_t | is_encryption,
|  | rampart_context_t * | rampart_context,
|  | axis2_msg_ctx_t * | msg_ctx |
| ) |  |  |

Finds security context token and gets the xml representation of key reference. This reference is used when security context token is included in the message

Parameters:

  | env | Pointer to environment struct
  | token | rampart policy property of the token
  | is_encryption | boolean showing whether the token is needed for encryption or signature
  | rampart_context | pointer to rampart context structure
  | msg_ctx | pointer to message context structure

Returns:
  shared secret of the security context token. returned buffer should NOT be freed

AXIS2_EXTERN oxs_buffer_t* sct_provider_get_secret | ( | const axutil_env_t * | env,
|  | rp_property_t * | token,
|  | axis2_bool_t | is_encryption,
|  | rampart_context_t * | rampart_context,
|  | axis2_msg_ctx_t * | msg_ctx |
| ) |  |  |

Finds security context token and gets shared secret. returned buffer should NOT be cleared by the caller

Parameters:

  | env | Pointer to environment struct
  | token | rampart policy property of the token
  | is_encryption | boolean showing whether the token is needed for encryption or signature
  | rampart_context | pointer to rampart context structure
  | msg_ctx | pointer to message context structure

Returns:
  shared secret of the security context token. returned buffer should NOT be freed

AXIS2_EXTERN oxs_buffer_t* sct_provider_get_secret_using_id | ( | const axutil_env_t * | env,
|  | axis2_char_t * | sct_id,
|  | rampart_context_t * | rampart_context,
|  | axis2_msg_ctx_t * | msg_ctx |
| ) |  |  |

Finds security context token and gets shared secret. returned buffer should NOT be cleared by the caller

Parameters:

  | env | Pointer to environment struct
  | sct_id | id of security context token
  | rampart_context | pointer to rampart context structure
  | msg_ctx | pointer to message context structure

Returns:
  shared secret of the security context token. returned buffer should NOT be freed

AXIS2_EXTERN axiom_node_t* sct_provider_get_token | ( | const axutil_env_t * | env,
|  | rp_property_t * | token,
|  | axis2_bool_t | is_encryption,
|  | rampart_context_t * | rampart_context,
|  | axis2_msg_ctx_t * | msg_ctx |
| ) |  |  |

Finds security context token and gets the xml representation of token

Parameters:

  | env | Pointer to environment struct
  | token | rampart policy property of the token
  | is_encryption | boolean showing whether the token is needed for encryption or signature
  | rampart_context | pointer to rampart context structure
  | msg_ctx | pointer to message context structure

Returns:
  shared secret of the security context token. returned buffer should NOT be freed

AXIS2_EXTERN axiom_node_t* sct_provider_get_unattached_reference | ( | const axutil_env_t * | env,
|  | rp_property_t * | token,
|  | axis2_bool_t | is_encryption,
|  | rampart_context_t * | rampart_context,
|  | axis2_msg_ctx_t * | msg_ctx |
| ) |  |  |

Finds security context token and gets the xml representation of key reference. This reference is used when security context token is NOT included in the message

Parameters:

  | env | Pointer to environment struct
  | token | rampart policy property of the token
  | is_encryption | boolean showing whether the token is needed for encryption or signature
  | rampart_context | pointer to rampart context structure
  | msg_ctx | pointer to message context structure

Returns:
  shared secret of the security context token. returned buffer should NOT be freed

AXIS2_EXTERN void* sct_provider_obtain_sct_default | ( | const axutil_env_t * | env,
|  | axis2_bool_t | is_encryption,
|  | axis2_msg_ctx_t * | msg_ctx,
|  | axis2_char_t * | sct_id,
|  | int | sct_id_type,
|  | void * | user_params |
| ) |  |  |

Default implementation of obtain sct function. If neither sct_provider nor user defined obtain function is given, this function will be used. (obtain_security_context_token_fn)

Parameters:

  | env | pointer to environment struct
  | is_encryption | boolean denotes sct is needed for encryption or signature
  | msg_ctx | pointer to message context structure
  | sct_id | identifier of security context token. Can be NULL
  | sct_id_type | type of sct id. can be global, local or unknown
  | user_params | parameter provided by user (not used in this method) return security context token if found. NULL otherwise.

AXIS2_EXTERN axis2_status_t sct_provider_store_sct_default | ( | const axutil_env_t * | env,
|  | axis2_msg_ctx_t * | msg_ctx,
|  | axis2_char_t * | sct_global_id,
|  | axis2_char_t * | sct_local_id,
|  | void * | sct,
|  | void * | user_params |
| ) |  |  |

Default implementation of store sct function. If neither sct_provider nor user defined store function is given, this function will be used. (store_security_context_token_fn)

Parameters:

  | env | pointer to environment struct
  | msg_ctx | pointer to message context structure
  | sct_global_id | global identifier of security context token. Can be NULL
  | sct_local_id | local identifier of security context token. Can be NULL
  | sct | security context token to be stored
  | user_params | parameter provided by user (not used in this method) return AXIS2_SUCCESS if stored. AXIS2_FAILURE otherwise.

AXIS2_EXTERN axis2_status_t sct_provider_validate_sct_default | ( | const axutil_env_t * | env,
|  | axiom_node_t * | sct_node,
|  | axis2_msg_ctx_t * | msg_ctx,
|  | void * | user_params |
| ) |  |  |

Default implementation of validate sct function. If neither sct_provider nor user defined store function is given, this function will be used. (validate_security_context_token_fn)

Parameters:

  | env | pointer to environment struct
  | sct_node | axiom representation of security context token
  | user_params | parameter provided by user (not used in this method)

Returns:
  AXIS2_SUCCESS if valid. AXIS2_FAILURE otherwise.

AXIS2_EXTERN axis2_status_t sct_provider_validate_security_context_token | ( | const axutil_env_t * | env,
|  | axiom_node_t * | sct_node,
|  | rampart_context_t * | rampart_context,
|  | axis2_msg_ctx_t * | msg_ctx |
| ) |  |  |

Validates whether security context token is valid or not. Normally, we can directly send true as response. But if syntax of security context token is altered/added by using extensible mechanism (e.g having sessions, etc.) then user can implement this method. Axiom representation of the sct will be given as the parameter, because if sct is extended, we don't know the syntax. Method writer can implement whatever needed.

Parameters:

  | env | Pointer to environment struct
  | sct_node | axiom node representation of security context token.
  | rampart_context | pointer to rampart context structure
  | msg_ctx | pointer to message context structure

Returns:
  AXIS2_TRUE is sct is valid. AXIS2_FALSE otherwise.