FFMPEG学习【libavutil】:Crypto and Hashing(二)

来源:互联网 发布:中国农业部数据库 编辑:程序博客网 时间:2024/05/21 10:03

一、CAST5、

一)、函数

struct AVCAST5 * av_cast5_alloc (void)

分配AVCAST5上下文要释放结构体:av_free(ptr)


int av_cast5_init (struct AVCAST5 *ctx, const uint8_t *key, int key_bits)初始化AVCAST5上下文。

参数:ctx:AVCAST5上下文

    key:一个5,6,... 16字节的密钥用于加密/解密

    key_bits:密钥数:可能是40,48,...,128

返回:0成功,故障时小于0


void av_cast5_crypt (struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, int decrypt)使用以前初始化的上下文,仅ECB模式加密或解密缓冲区。

参数:ctx:AVCAST5上下文

    dst:目标数组,可以等于src

    src:源数组,可以等于dst

    count:8字节块数

    decrypt:0加密,1解密


void av_cast5_crypt2 (struct AVCAST5 *ctx, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt)使用先前初始化的上下文加密或解密缓冲区。

参数:ctx:AVCAST5上下文

    dst:目标数组,可以等于src

    src:源数组,可以等于dst

    count:8字节块数

    iv:CBC模式的初始化向量,ECB模式为NULL

    decrypt:0加密,1解密




二)、变量

const int av_cast5_size



二、DES

一)、数据结构

struct  AVDES{
uint64_t round_keys [3] [16];
int triple_des;
}


二)、函数

AVDES * av_des_alloc (void)分配AVDES上下文。


int av_des_init (struct AVDES *d, const uint8_t *key, int key_bits, int decrypt)初始化AVDES上下文。

参数:key_bits:必须是64或192

    decrypt:0加密/ CBC-MAC,1解密

返回:成功为零,否则为负值


void av_des_crypt (struct AVDES *d, uint8_t *dst, const uint8_t *src, int count, uint8_t *iv, int decrypt)使用DES算法加密/解密。

参数:count:8字节块数

    dst:目标数组,可以等于src,必须是8字节对齐

    src:源数组,可以等于dst,必须是8字节对齐,可能是NULL

    iv:用于CBC模式的初始化向量,如果为NULL则ECB将被使用,必须是8字节对齐

   decrypt: 0加密,1解密



void av_des_mac (struct AVDES *d, uint8_t *dst, const uint8_t *src, int count)使用DES算法计算CBC-MAC。

参数:dst:目标数组,可以等于src,必须是8字节对齐

    count:8字节块数

    src:源数组,可以等于dst,必须是8字节对齐,可能是NULL



三、HMAC

一)、宏

enum  AVHMACType { 
  AV_HMAC_MD5, AV_HMAC_SHA1, AV_HMAC_SHA224, AV_HMAC_SHA256, 
  AV_HMAC_SHA384 = 12, AV_HMAC_SHA512 
}

二)、函数

AVHMAC * av_hmac_alloc (enum AVHMACType type)分配AVHMAC上下文。

参数:type:用于HMAC的哈希函数。


void av_hmac_free (AVHMAC *ctx)释放AVHMAC上下文。

参数:ctx:用来释放的上下文,可能为NULL


void av_hmac_init (AVHMAC *ctx, const uint8_t *key, unsigned int keylen)使用身份验证密钥初始化AVHMAC上下文。

参数:ctx:HMAC上下文

    key:验证密钥

    keylen:密钥的长度,以字节为单位


void av_hmac_update (AVHMAC *ctx, const uint8_t *data, unsigned int len)与HMAC的哈希数据。

参数:ctx:HMAC上下文

    data:哈希的数据

    len:数据的长度(以字节为单位)


int av_hmac_final (AVHMAC *ctx, uint8_t *out, unsigned int outlen)完成哈希和输出HMAC摘要。

参数:ctx:HMAC上下文

    out:将消息写入的输出缓冲区

    outlen:out缓冲区的长度,以字节为单位

返回:写出的字节数或负错误代码。


int av_hmac_calc (AVHMAC *ctx, const uint8_t *data, unsigned int len, const uint8_t *key, unsigned int keylen, uint8_t *out, unsigned int outlen)用一个键来排列一组数据。

参数:ctx:HMAC上下文

    data:哈希的数据

    len:数据的长度(以字节为单位)

    key:验证密钥

    keylen:密钥的长度,以字节为单位

    out:将消息写入的输出缓冲区

    outlen:out缓冲区的长度,以字节为单位

返回:写出的字节数或负错误代码。

阅读全文
0 0
原创粉丝点击