Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
f5e2354c
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
接近 2 年 前同步成功
通知
12
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
f5e2354c
编写于
3月 26, 2008
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add support for signed receipt request printout and generation.
上级
f4cc56f4
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
171 addition
and
34 deletion
+171
-34
apps/cms.c
apps/cms.c
+130
-8
crypto/cms/cms.h
crypto/cms/cms.h
+10
-2
crypto/cms/cms_env.c
crypto/cms/cms_env.c
+0
-3
crypto/cms/cms_err.c
crypto/cms/cms_err.c
+2
-1
crypto/cms/cms_ess.c
crypto/cms/cms_ess.c
+29
-20
未找到文件。
apps/cms.c
浏览文件 @
f5e2354c
...
...
@@ -71,6 +71,8 @@
static
int
save_certs
(
char
*
signerfile
,
STACK_OF
(
X509
)
*
signers
);
static
int
smime_cb
(
int
ok
,
X509_STORE_CTX
*
ctx
);
static
void
receipt_request_print
(
BIO
*
out
,
CMS_ContentInfo
*
cms
);
static
CMS_ReceiptRequest
*
make_receipt_request
(
STACK
*
rr_to
,
int
rr_allorfirst
,
STACK
*
rr_from
);
#define SMIME_OP 0x10
#define SMIME_IP 0x20
...
...
@@ -112,7 +114,9 @@ int MAIN(int argc, char **argv)
BIO
*
in
=
NULL
,
*
out
=
NULL
,
*
indata
=
NULL
;
int
badarg
=
0
;
int
flags
=
CMS_DETACHED
,
noout
=
0
,
print
=
0
;
int
rr_print
=
0
;
int
rr_print
=
0
,
rr_allorfirst
=
-
1
;
STACK
*
rr_to
=
NULL
,
*
rr_from
=
NULL
;
CMS_ReceiptRequest
*
rr
=
NULL
;
char
*
to
=
NULL
,
*
from
=
NULL
,
*
subject
=
NULL
;
char
*
CAfile
=
NULL
,
*
CApath
=
NULL
;
char
*
passargin
=
NULL
,
*
passin
=
NULL
;
...
...
@@ -248,6 +252,28 @@ int MAIN(int argc, char **argv)
noout
=
1
;
else
if
(
!
strcmp
(
*
args
,
"-receipt_request_print"
))
rr_print
=
1
;
else
if
(
!
strcmp
(
*
args
,
"-receipt_request_all"
))
rr_allorfirst
=
0
;
else
if
(
!
strcmp
(
*
args
,
"-receipt_request_first"
))
rr_allorfirst
=
1
;
else
if
(
!
strcmp
(
*
args
,
"-receipt_request_from"
))
{
if
(
!
args
[
1
])
goto
argerr
;
args
++
;
if
(
!
rr_from
)
rr_from
=
sk_new_null
();
sk_push
(
rr_from
,
*
args
);
}
else
if
(
!
strcmp
(
*
args
,
"-receipt_request_to"
))
{
if
(
!
args
[
1
])
goto
argerr
;
args
++
;
if
(
!
rr_to
)
rr_to
=
sk_new_null
();
sk_push
(
rr_to
,
*
args
);
}
else
if
(
!
strcmp
(
*
args
,
"-print"
))
{
noout
=
1
;
...
...
@@ -454,6 +480,17 @@ int MAIN(int argc, char **argv)
args
++
;
}
if
(((
rr_allorfirst
!=
-
1
)
||
rr_from
)
&&
!
rr_to
)
{
BIO_puts
(
bio_err
,
"No Signed Receipts Recipients
\n
"
);
goto
argerr
;
}
if
(
!
(
operation
&
SMIME_SIGNERS
)
&&
(
rr_to
||
rr_from
))
{
BIO_puts
(
bio_err
,
"Signed receipts only allowed with -sign
\n
"
);
goto
argerr
;
}
if
(
!
(
operation
&
SMIME_SIGNERS
)
&&
(
skkeys
||
sksigners
))
{
BIO_puts
(
bio_err
,
"Multiple signers or keys not allowed
\n
"
);
...
...
@@ -462,12 +499,12 @@ int MAIN(int argc, char **argv)
if
(
operation
&
SMIME_SIGNERS
)
{
/* Check to see if any final signer needs to be appended */
if
(
keyfile
&&
!
signerfile
)
{
BIO_puts
(
bio_err
,
"Illegal -inkey without -signer
\n
"
);
goto
argerr
;
}
/* Check to see if any final signer needs to be appended */
if
(
signerfile
)
{
if
(
!
sksigners
)
...
...
@@ -810,27 +847,41 @@ int MAIN(int argc, char **argv)
else
if
(
operation
&
SMIME_SIGNERS
)
{
int
i
;
/* If detached data content we
only
enable streaming if
/* If detached data content we enable streaming if
* S/MIME output format.
*/
if
(
operation
==
SMIME_SIGN
)
{
if
(
flags
&
CMS_DETACHED
)
{
if
(
outformat
!
=
FORMAT_SMIME
)
flags
&=
~
CMS_STREAM
;
if
(
outformat
=
=
FORMAT_SMIME
)
flags
|=
CMS_STREAM
;
}
flags
|=
CMS_PARTIAL
;
cms
=
CMS_sign
(
NULL
,
NULL
,
other
,
in
,
flags
);
if
(
econtent_type
)
CMS_set1_eContentType
(
cms
,
econtent_type
);
if
(
!
cms
)
goto
end
;
if
(
econtent_type
)
CMS_set1_eContentType
(
cms
,
econtent_type
);
if
(
rr_to
)
{
rr
=
make_receipt_request
(
rr_to
,
rr_allorfirst
,
rr_from
);
if
(
!
rr
)
{
BIO_puts
(
bio_err
,
"Signed Receipt Request Creation Error
\n
"
);
goto
end
;
}
}
}
else
flags
|=
CMS_REUSE_DIGEST
;
for
(
i
=
0
;
i
<
sk_num
(
sksigners
);
i
++
)
{
CMS_SignerInfo
*
si
;
signerfile
=
sk_value
(
sksigners
,
i
);
keyfile
=
sk_value
(
skkeys
,
i
);
signer
=
load_cert
(
bio_err
,
signerfile
,
FORMAT_PEM
,
NULL
,
...
...
@@ -841,7 +892,10 @@ int MAIN(int argc, char **argv)
"signing key file"
);
if
(
!
key
)
goto
end
;
if
(
!
CMS_add1_signer
(
cms
,
signer
,
key
,
sign_md
,
flags
))
si
=
CMS_add1_signer
(
cms
,
signer
,
key
,
sign_md
,
flags
);
if
(
!
si
)
goto
end
;
if
(
rr
&&
!
CMS_add1_ReceiptRequest
(
si
,
rr
))
goto
end
;
X509_free
(
signer
);
signer
=
NULL
;
...
...
@@ -1002,6 +1056,12 @@ end:
OPENSSL_free
(
secret_keyid
);
if
(
econtent_type
)
ASN1_OBJECT_free
(
econtent_type
);
if
(
rr
)
CMS_ReceiptRequest_free
(
rr
);
if
(
rr_to
)
sk_free
(
rr_to
);
if
(
rr_from
)
sk_free
(
rr_from
);
X509_STORE_free
(
store
);
X509_free
(
cert
);
X509_free
(
recip
);
...
...
@@ -1119,4 +1179,66 @@ static void receipt_request_print(BIO *out, CMS_ContentInfo *cms)
}
}
static
STACK_OF
(
GENERAL_NAMES
)
*
make_names_stack
(
STACK
*
ns
)
{
int
i
;
STACK_OF
(
GENERAL_NAMES
)
*
ret
;
GENERAL_NAMES
*
gens
=
NULL
;
GENERAL_NAME
*
gen
=
NULL
;
ret
=
sk_GENERAL_NAMES_new_null
();
if
(
!
ret
)
goto
err
;
for
(
i
=
0
;
i
<
sk_num
(
ns
);
i
++
)
{
char
*
str
=
sk_value
(
ns
,
i
);
gen
=
a2i_GENERAL_NAME
(
NULL
,
NULL
,
NULL
,
GEN_EMAIL
,
str
,
0
);
if
(
!
gen
)
goto
err
;
gens
=
GENERAL_NAMES_new
();
if
(
!
gens
)
goto
err
;
if
(
!
sk_GENERAL_NAME_push
(
gens
,
gen
))
goto
err
;
gen
=
NULL
;
if
(
!
sk_GENERAL_NAMES_push
(
ret
,
gens
))
goto
err
;
gens
=
NULL
;
}
return
ret
;
err:
if
(
ret
)
sk_GENERAL_NAMES_pop_free
(
ret
,
GENERAL_NAMES_free
);
if
(
gens
)
GENERAL_NAMES_free
(
gens
);
if
(
gen
)
GENERAL_NAME_free
(
gen
);
return
NULL
;
}
static
CMS_ReceiptRequest
*
make_receipt_request
(
STACK
*
rr_to
,
int
rr_allorfirst
,
STACK
*
rr_from
)
{
STACK_OF
(
GENERAL_NAMES
)
*
rct_to
,
*
rct_from
;
CMS_ReceiptRequest
*
rr
;
rct_to
=
make_names_stack
(
rr_to
);
if
(
!
rct_to
)
goto
err
;
if
(
rr_from
)
{
rct_from
=
make_names_stack
(
rr_from
);
if
(
!
rct_from
)
goto
err
;
}
else
rct_from
=
NULL
;
rr
=
CMS_ReceiptRequest_create0
(
NULL
,
-
1
,
rr_allorfirst
,
rct_from
,
rct_to
);
return
rr
;
err:
return
NULL
;
}
#endif
crypto/cms/cms.h
浏览文件 @
f5e2354c
...
...
@@ -197,6 +197,13 @@ CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid,
ASN1_OBJECT
*
otherTypeId
,
ASN1_TYPE
*
otherType
);
int
CMS_RecipientInfo_kekri_get0_id
(
CMS_RecipientInfo
*
ri
,
X509_ALGOR
**
palg
,
ASN1_OCTET_STRING
**
pid
,
ASN1_GENERALIZEDTIME
**
pdate
,
ASN1_OBJECT
**
potherid
,
ASN1_TYPE
**
pothertype
);
int
CMS_RecipientInfo_set0_key
(
CMS_RecipientInfo
*
ri
,
unsigned
char
*
key
,
size_t
keylen
);
...
...
@@ -288,11 +295,11 @@ void *CMS_unsigned_get0_data_by_OBJ(CMS_SignerInfo *si, ASN1_OBJECT *oid,
#ifdef HEADER_X509V3_H
int
CMS_get1_ReceiptRequest
(
CMS_SignerInfo
*
si
,
CMS_ReceiptRequest
**
prr
);
int
CMS_add1_ReceiptRequest
(
CMS_SignerInfo
*
si
,
unsigned
char
*
id
,
int
idlen
,
CMS_ReceiptRequest
*
CMS_ReceiptRequest_create0
(
unsigned
char
*
id
,
int
idlen
,
int
allorfirst
,
STACK_OF
(
GENERAL_NAMES
)
*
receiptList
,
STACK_OF
(
GENERAL_NAMES
)
*
receiptsTo
);
int
CMS_add1_ReceiptRequest
(
CMS_SignerInfo
*
si
,
CMS_ReceiptRequest
*
rr
);
void
CMS_ReceiptRequest_get0_values
(
CMS_ReceiptRequest
*
rr
,
ASN1_STRING
**
pcid
,
int
*
pallorfirst
,
...
...
@@ -346,6 +353,7 @@ void ERR_load_CMS_strings(void);
#define CMS_F_CMS_GET0_ENVELOPED 131
#define CMS_F_CMS_GET0_REVOCATION_CHOICES 132
#define CMS_F_CMS_GET0_SIGNED 133
#define CMS_F_CMS_RECEIPTREQUEST_CREATE0 159
#define CMS_F_CMS_RECIPIENTINFO_DECRYPT 134
#define CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT 135
#define CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT 136
...
...
crypto/cms/cms_env.c
浏览文件 @
f5e2354c
...
...
@@ -581,7 +581,6 @@ CMS_RecipientInfo *CMS_add0_recipient_key(CMS_ContentInfo *cms, int nid,
}
#if 0
int
CMS_RecipientInfo_kekri_get0_id
(
CMS_RecipientInfo
*
ri
,
X509_ALGOR
**
palg
,
ASN1_OCTET_STRING
**
pid
,
...
...
@@ -618,8 +617,6 @@ int CMS_RecipientInfo_kekri_get0_id(CMS_RecipientInfo *ri,
}
return
1
;
}
#endif
int
CMS_RecipientInfo_set0_key
(
CMS_RecipientInfo
*
ri
,
unsigned
char
*
key
,
size_t
keylen
)
...
...
crypto/cms/cms_err.c
浏览文件 @
f5e2354c
...
...
@@ -72,7 +72,7 @@ static ERR_STRING_DATA CMS_str_functs[]=
{
{
ERR_FUNC
(
CMS_F_CHECK_CONTENT
),
"CHECK_CONTENT"
},
{
ERR_FUNC
(
CMS_F_CMS_ADD0_RECIPIENT_KEY
),
"CMS_add0_recipient_key"
},
{
ERR_FUNC
(
CMS_F_CMS_ADD1_RECEIPTREQUEST
),
"CMS_
ADD1_RECEIPTREQUEST
"
},
{
ERR_FUNC
(
CMS_F_CMS_ADD1_RECEIPTREQUEST
),
"CMS_
add1_ReceiptRequest
"
},
{
ERR_FUNC
(
CMS_F_CMS_ADD1_RECIPIENT_CERT
),
"CMS_add1_recipient_cert"
},
{
ERR_FUNC
(
CMS_F_CMS_ADD1_SIGNER
),
"CMS_add1_signer"
},
{
ERR_FUNC
(
CMS_F_CMS_ADD1_SIGNINGTIME
),
"CMS_ADD1_SIGNINGTIME"
},
...
...
@@ -106,6 +106,7 @@ static ERR_STRING_DATA CMS_str_functs[]=
{
ERR_FUNC
(
CMS_F_CMS_GET0_ENVELOPED
),
"CMS_GET0_ENVELOPED"
},
{
ERR_FUNC
(
CMS_F_CMS_GET0_REVOCATION_CHOICES
),
"CMS_GET0_REVOCATION_CHOICES"
},
{
ERR_FUNC
(
CMS_F_CMS_GET0_SIGNED
),
"CMS_GET0_SIGNED"
},
{
ERR_FUNC
(
CMS_F_CMS_RECEIPTREQUEST_CREATE0
),
"CMS_ReceiptRequest_create0"
},
{
ERR_FUNC
(
CMS_F_CMS_RECIPIENTINFO_DECRYPT
),
"CMS_RecipientInfo_decrypt"
},
{
ERR_FUNC
(
CMS_F_CMS_RECIPIENTINFO_KEKRI_DECRYPT
),
"CMS_RECIPIENTINFO_KEKRI_DECRYPT"
},
{
ERR_FUNC
(
CMS_F_CMS_RECIPIENTINFO_KEKRI_ENCRYPT
),
"CMS_RECIPIENTINFO_KEKRI_ENCRYPT"
},
...
...
crypto/cms/cms_ess.c
浏览文件 @
f5e2354c
...
...
@@ -89,26 +89,18 @@ int CMS_get1_ReceiptRequest(CMS_SignerInfo *si, CMS_ReceiptRequest **prr)
return
1
;
}
int
CMS_add1_ReceiptRequest
(
CMS_SignerInfo
*
si
,
unsigned
char
*
id
,
int
idlen
,
CMS_ReceiptRequest
*
CMS_ReceiptRequest_create0
(
unsigned
char
*
id
,
int
idlen
,
int
allorfirst
,
STACK_OF
(
GENERAL_NAMES
)
*
receiptList
,
STACK_OF
(
GENERAL_NAMES
)
*
receiptsTo
)
{
CMS_ReceiptRequest
*
rr
=
NULL
;
STACK_OF
(
GENERAL_NAMES
)
*
tmpto
=
NULL
;
unsigned
char
*
rrder
=
NULL
;
int
rrderlen
;
int
r
=
0
;
rr
=
CMS_ReceiptRequest_new
();
if
(
!
rr
)
goto
merr
;
if
(
id
)
{
if
(
!
ASN1_STRING_set
(
rr
->
signedContentIdentifier
,
id
,
idlen
))
goto
merr
;
}
ASN1_STRING_set0
(
rr
->
signedContentIdentifier
,
id
,
idlen
);
else
{
if
(
!
ASN1_STRING_set
(
rr
->
signedContentIdentifier
,
NULL
,
32
))
...
...
@@ -118,7 +110,7 @@ int CMS_add1_ReceiptRequest(CMS_SignerInfo *si,
goto
err
;
}
tmpto
=
rr
->
receiptsTo
;
sk_GENERAL_NAMES_pop_free
(
rr
->
receiptsTo
,
GENERAL_NAMES_free
)
;
rr
->
receiptsTo
=
receiptsTo
;
if
(
receiptList
)
...
...
@@ -132,21 +124,38 @@ int CMS_add1_ReceiptRequest(CMS_SignerInfo *si,
rr
->
receiptsFrom
->
d
.
allOrFirstTier
=
allorfirst
;
}
rrderlen
=
i2d_CMS_ReceiptRequest
(
rr
,
&
rrder
);
r
=
CMS_signed_add1_attr_by_NID
(
si
,
NID_id_smime_aa_receiptRequest
,
V_ASN1_SEQUENCE
,
rrder
,
rrderlen
);
return
rr
;
merr:
CMSerr
(
CMS_F_CMS_
ADD1_RECEIPTREQUEST
,
ERR_R_MALLOC_FAILURE
);
CMSerr
(
CMS_F_CMS_
RECEIPTREQUEST_CREATE0
,
ERR_R_MALLOC_FAILURE
);
err:
if
(
rr
)
{
rr
->
receiptsTo
=
tmpto
;
rr
->
receiptsFrom
->
type
=
0
;
CMS_ReceiptRequest_free
(
rr
);
}
return
NULL
;
}
int
CMS_add1_ReceiptRequest
(
CMS_SignerInfo
*
si
,
CMS_ReceiptRequest
*
rr
)
{
unsigned
char
*
rrder
=
NULL
;
int
rrderlen
,
r
=
0
;
rrderlen
=
i2d_CMS_ReceiptRequest
(
rr
,
&
rrder
);
if
(
rrderlen
<
0
)
goto
merr
;
if
(
!
CMS_signed_add1_attr_by_NID
(
si
,
NID_id_smime_aa_receiptRequest
,
V_ASN1_SEQUENCE
,
rrder
,
rrderlen
))
goto
merr
;
r
=
1
;
merr:
if
(
!
r
)
CMSerr
(
CMS_F_CMS_ADD1_RECEIPTREQUEST
,
ERR_R_MALLOC_FAILURE
);
if
(
rrder
)
OPENSSL_free
(
rrder
);
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录