解密函数流程图
2021-07-29 19:45:52 0 举报
一种解密函数的流程图
作者其他创作
大纲/内容
calLength
dataIn、dataOut、keyInfo
dataIn.length == -1?
N
开始
常规参数检查
code = ERR_OK
Y
一次完成解密,并回写dataOut的各字段
code = ERR_NULL
code = ERR_FILE_NULL
读取文件出错,code = ERR_FILE_READ
code = ERR_IV
return code
关联参数检查
(dataIn.length∈D && dataOut.length∈D)||(dataIn.length = dataOut.length = -1)?
dataIn.algId∈A.NEEDIV?
dataIn.data || dataOut.data ==NULL?
总体流程图
关联数据检查
dataIn.data、dataIn.length、dataIn.algId
校验出错code = ERR_IV
错误码非0,直接返回错误码
dataIn、dataOut、keyInfo中有一个为NULL?
输入:dataIn、key、IV、algId、dataOut
dataOut.length > length?
code = ERR_KEY
code = ERR_MEM_NULL
最后一组数据,停止循环,调用final()
结束
循环update()
getInitVector
return (iv,code)
return (key,code)
code=ERR_LENGTH
code = ERR_CIPHER_PADDING
code = ERR_NOSENSE
dataIn.algId∈A?
keyInfo.length满足算法algId要求的长度?
加密所需的密钥结构体初始化、密钥装载
dataIn密文长度满足算法分组?
dataIn.IVLen>0?
code = ERR_DIFF_PTR
dataIn.IVLen满足分组要求?
ExtractKey
keyInfo.key !=NULL?
SymDecrypt
提取iv
清空dataOut指向的输出文件
回写dataOut字段
根据algId选择解密函数、工作模式
iv = getInitVector(dataIn)
code = ERR_ALG_NOT_FOUND
keyInfo、dataIn.algId、
读取文件一部分,解密Init()
length = dataIn.length
提取出密钥明文key
dataIn.length∈D∪{-1} ?dataOut.length∈D ∪{-1} ?
return length
0 条评论
下一页