コード例 #1
0
ファイル: modes.hpp プロジェクト: sd-eblana/bawx
inline void Mode_BASE::Process(byte* out, const byte* in, word32 sz)
{
    if (mode_ == ECB)
        ECB_Process(out, in, sz);
    else if (mode_ == CBC)
        if (dir_ == ENCRYPTION)
            CBC_Encrypt(out, in, sz);
        else
            CBC_Decrypt(out, in, sz);
}
コード例 #2
0
ファイル: c4cipher.c プロジェクト: rhardman/C4
C4Err CBC_DecryptPAD(Cipher_Algorithm algorithm,
                     uint8_t *key, size_t key_len,
                     const uint8_t *iv,
                     const uint8_t *in, size_t in_len,
                     uint8_t **outData, size_t *outSize)

{
    C4Err err = kC4Err_NoErr;
    CBC_ContextRef      cbc = kInvalidCBC_ContextRef;
    
    uint8_t *buffer = NULL;
    size_t buffLen = in_len;
    uint8_t  bytes2Pad = 0;
    
    /* check Key length and algorithm */
    switch(algorithm)
    {
        case kCipher_Algorithm_AES128:
            ValidateParam (key_len == 16); break;
            
        case kCipher_Algorithm_AES192:
            ValidateParam (key_len == 24); break;
            
        case kCipher_Algorithm_AES256:
            ValidateParam (key_len == 32); break;
            
        case kCipher_Algorithm_2FISH256:
            ValidateParam (key_len == 32); break;
            
        default:
            RETERR(kC4Err_BadParams);
    }
    
    buffer = XMALLOC(buffLen);
    
    err = CBC_Init(algorithm, key, iv,  &cbc);CKERR;
    
    err = CBC_Decrypt(cbc, in, buffLen, buffer); CKERR;
    
    bytes2Pad = *(buffer+buffLen-1);
    
    if(bytes2Pad > buffLen)
        RETERR(kC4Err_CorruptData);
    
    *outData = buffer;
    *outSize = buffLen- bytes2Pad;
    
    
done:
    if(IsC4Err(err))
    {
        if(buffer)
        {
            memset(buffer, buffLen, 0);
            XFREE(buffer);
        }
    }
    
    CBC_Free(cbc);
    
    return err;
    
}