#include <openssl/evp.h>

/* ۂɏ܂ꂽoCgԂ */
int incremental_encrypt(EVP_CIPHER_CTX *ctx, char *data, int inl)
{
    char *buf;
    int  ol;
    int  bl = EVP_CIPHER_CTX_block_size(ctx);

    /* ubN - 1܂ŁAobt@
     * ̒͂̒ɉAubNŊ΁A
     * o͂ubN̍ő吔ł
     */
    buf = (char *)malloc((inl + bl - 1) / bl * bl);
    EVP_EncryptUpdate(ctx, buf, &ol, data, inl);
    if (ol)
        incremental_send(buf, ol);
    /* incremental_sendۑꍇ̓Rs[Ă */
    free(buf);
    return ol;
}

/* ܂ꂽoCgԂ */
int incremental_finish(EVP_CIPHER_CTX *ctx)
{
    char *buf;
    int  ol;
  
    buf = (char *)malloc(EVP_CIPHER_CTX_block_size(ctx));
    EVP_EncryptFinal(ctx, buf, &ol);
    if (ol)
        incremental_send(buf, ol);
    free(buf);
    return ol;
}
