Example #1
0
soter_status_t soter_sym_aead_decrypt_final(soter_sym_ctx_t *ctx, const void* auth_tag, const size_t auth_tag_length)
{
  SOTER_CHECK_PARAM(auth_tag!=NULL);
  SOTER_CHECK_PARAM(auth_tag_length>=SOTER_AES_GCM_AUTH_TAG_LENGTH);
  SOTER_CHECK(ctx!=NULL);
  SOTER_IF_FAIL(EVP_CIPHER_CTX_ctrl(&(ctx->evp_sym_ctx), EVP_CTRL_GCM_SET_TAG, SOTER_AES_GCM_AUTH_TAG_LENGTH, (void*)auth_tag), soter_sym_aead_decrypt_destroy(ctx));
  return  soter_sym_aead_ctx_final(ctx, false);
}
soter_status_t soter_rsa_key_pair_gen_export_key(soter_rsa_key_pair_gen_t* ctx, void* key, size_t* key_length, bool isprivate){
    EVP_PKEY *pkey;
    SOTER_CHECK_PARAM(ctx);
    pkey = EVP_PKEY_CTX_get0_pkey(ctx->pkey_ctx);
    SOTER_CHECK_PARAM(pkey);
    SOTER_CHECK_PARAM(EVP_PKEY_RSA == EVP_PKEY_id(pkey));
    if (isprivate)
    {
	return soter_engine_specific_to_rsa_priv_key((const soter_engine_specific_rsa_key_t *)pkey, (soter_container_hdr_t *)key, key_length);
    }
    else
    {
	return soter_engine_specific_to_rsa_pub_key((const soter_engine_specific_rsa_key_t *)pkey, (soter_container_hdr_t *)key, key_length);
    }
}
soter_status_t soter_rsa_key_pair_gen_cleanup(soter_rsa_key_pair_gen_t* ctx){
    SOTER_CHECK_PARAM(ctx);
    if (ctx->pkey_ctx)
    {
	EVP_PKEY_CTX_free(ctx->pkey_ctx);
    }
    return SOTER_SUCCESS;
}
Example #4
0
soter_status_t soter_sym_aead_encrypt_final(soter_sym_ctx_t *ctx, void* auth_tag, size_t* auth_tag_length){
  SOTER_CHECK_PARAM(auth_tag!=NULL);
  if((*auth_tag_length)<SOTER_AES_GCM_AUTH_TAG_LENGTH){
    (*auth_tag_length)=SOTER_AES_GCM_AUTH_TAG_LENGTH;
    return SOTER_BUFFER_TOO_SMALL;
  }
  SOTER_CHECK(soter_sym_aead_ctx_final(ctx, true)==SOTER_SUCCESS);
  SOTER_CHECK(EVP_CIPHER_CTX_ctrl(&(ctx->evp_sym_ctx), EVP_CTRL_GCM_GET_TAG, SOTER_AES_GCM_AUTH_TAG_LENGTH, auth_tag));
  (*auth_tag_length)=SOTER_AES_GCM_AUTH_TAG_LENGTH;
  return SOTER_SUCCESS;
}
soter_status_t soter_rsa_key_pair_gen_destroy(soter_rsa_key_pair_gen_t* ctx){
    SOTER_CHECK_PARAM(ctx);
    SOTER_CHECK(soter_rsa_key_pair_gen_cleanup(ctx)==SOTER_SUCCESS);
    free(ctx);
    return SOTER_SUCCESS;
}