Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
openssl
提交
a981e2ad
O
openssl
项目概览
btwise
/
openssl
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
O
openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
a981e2ad
编写于
3月 16, 2008
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add support for random key generation: this will be needed by enveloped data.
上级
88fce853
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
35 addition
and
9 deletion
+35
-9
crypto/cms/cms.h
crypto/cms/cms.h
+1
-0
crypto/cms/cms_enc.c
crypto/cms/cms_enc.c
+33
-9
crypto/cms/cms_err.c
crypto/cms/cms_err.c
+1
-0
未找到文件。
crypto/cms/cms.h
浏览文件 @
a981e2ad
...
...
@@ -352,6 +352,7 @@ void ERR_load_CMS_strings(void);
#define CMS_R_NO_CONTENT 116
#define CMS_R_NO_DEFAULT_DIGEST 117
#define CMS_R_NO_DIGEST_SET 118
#define CMS_R_NO_KEY 148
#define CMS_R_NO_MATCHING_DIGEST 119
#define CMS_R_NO_MATCHING_RECIPIENT 147
#define CMS_R_NO_PRIVATE_KEY 120
...
...
crypto/cms/cms_enc.c
浏览文件 @
a981e2ad
...
...
@@ -77,7 +77,7 @@ BIO *cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
int
ok
=
0
;
int
enc
;
int
enc
,
keep_key
=
0
;
enc
=
ec
->
cipher
?
1
:
0
;
...
...
@@ -134,10 +134,26 @@ BIO *cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
goto
err
;
}
/* If necessary set key length */
if
(
e
c
->
keylen
!=
EVP_CIPHER_CTX_key_length
(
ctx
)
)
if
(
e
nc
&&
!
ec
->
key
)
{
/* Generate random key */
if
(
!
ec
->
keylen
)
ec
->
keylen
=
EVP_CIPHER_CTX_key_length
(
ctx
);
ec
->
key
=
OPENSSL_malloc
(
ec
->
keylen
);
if
(
!
ec
->
key
)
{
CMSerr
(
CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
if
(
EVP_CIPHER_CTX_rand_key
(
ctx
,
ec
->
key
)
<=
0
)
goto
err
;
keep_key
=
1
;
}
else
if
(
ec
->
keylen
!=
EVP_CIPHER_CTX_key_length
(
ctx
))
{
/* If necessary set key length */
if
(
EVP_CIPHER_CTX_set_key_length
(
ctx
,
ec
->
keylen
)
<=
0
)
{
CMSerr
(
CMS_F_CMS_ENCRYPTEDCONTENT_INIT_BIO
,
...
...
@@ -172,7 +188,7 @@ BIO *cms_EncryptedContent_init_bio(CMS_EncryptedContentInfo *ec)
ok
=
1
;
err:
if
(
ec
->
key
)
if
(
ec
->
key
&&
!
keep_key
)
{
OPENSSL_cleanse
(
ec
->
key
,
ec
->
keylen
);
OPENSSL_free
(
ec
->
key
);
...
...
@@ -189,13 +205,16 @@ int cms_EncryptedContent_init(CMS_EncryptedContentInfo *ec,
const
unsigned
char
*
key
,
size_t
keylen
)
{
ec
->
cipher
=
cipher
;
ec
->
key
=
OPENSSL_malloc
(
keylen
);
if
(
!
ec
->
key
)
return
0
;
if
(
key
)
{
ec
->
key
=
OPENSSL_malloc
(
keylen
);
if
(
!
ec
->
key
)
return
0
;
memcpy
(
ec
->
key
,
key
,
keylen
);
}
ec
->
keylen
=
keylen
;
if
(
cipher
)
ec
->
contentType
=
OBJ_nid2obj
(
NID_pkcs7_data
);
memcpy
(
ec
->
key
,
key
,
keylen
);
ec
->
keylen
=
keylen
;
return
1
;
}
...
...
@@ -203,6 +222,11 @@ int CMS_EncryptedData_set1_key(CMS_ContentInfo *cms, const EVP_CIPHER *ciph,
const
unsigned
char
*
key
,
size_t
keylen
)
{
CMS_EncryptedContentInfo
*
ec
;
if
(
!
key
||
!
keylen
)
{
CMSerr
(
CMS_F_CMS_ENCRYPTEDDATA_SET1_KEY
,
CMS_R_NO_KEY
);
return
0
;
}
if
(
ciph
)
{
cms
->
d
.
encryptedData
=
M_ASN1_new_of
(
CMS_EncryptedData
);
...
...
crypto/cms/cms_err.c
浏览文件 @
a981e2ad
...
...
@@ -155,6 +155,7 @@ static ERR_STRING_DATA CMS_str_reasons[]=
{
ERR_REASON
(
CMS_R_NO_CONTENT
)
,
"no content"
},
{
ERR_REASON
(
CMS_R_NO_DEFAULT_DIGEST
)
,
"no default digest"
},
{
ERR_REASON
(
CMS_R_NO_DIGEST_SET
)
,
"no digest set"
},
{
ERR_REASON
(
CMS_R_NO_KEY
)
,
"no key"
},
{
ERR_REASON
(
CMS_R_NO_MATCHING_DIGEST
)
,
"no matching digest"
},
{
ERR_REASON
(
CMS_R_NO_MATCHING_RECIPIENT
)
,
"no matching recipient"
},
{
ERR_REASON
(
CMS_R_NO_PRIVATE_KEY
)
,
"no private key"
},
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录