Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
09ab755c
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
1 年多 前同步成功
通知
10
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看板
提交
09ab755c
编写于
24年前
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ASN1_ITEM versions of sign, verify, pack and unpack.
The old function pointer versions will eventually go away.
上级
ec558b65
变更
7
隐藏空白更改
内联
并排
Showing
7 changed file
with
198 addition
and
1 deletion
+198
-1
CHANGES
CHANGES
+4
-0
crypto/asn1/a_digest.c
crypto/asn1/a_digest.c
+18
-0
crypto/asn1/a_sign.c
crypto/asn1/a_sign.c
+73
-0
crypto/asn1/a_verify.c
crypto/asn1/a_verify.c
+48
-0
crypto/asn1/asn1.h
crypto/asn1/asn1.h
+2
-0
crypto/asn1/asn_pack.c
crypto/asn1/asn_pack.c
+43
-1
crypto/x509/x509.h
crypto/x509/x509.h
+10
-0
未找到文件。
CHANGES
浏览文件 @
09ab755c
...
...
@@ -3,6 +3,10 @@
Changes between 0.9.6 and 0.9.7 [xx XXX 2000]
*) New ASN1 functions to handle sign, verify, digest, pack and
unpack operations in terms of ASN1_ITEM.
[Steve Henson]
*) New extension functions for OCSP structures, these follow the
same conventions as certificates and CRLs.
[Steve Henson]
...
...
This diff is collapsed.
Click to expand it.
crypto/asn1/a_digest.c
浏览文件 @
09ab755c
...
...
@@ -88,3 +88,21 @@ int ASN1_digest(int (*i2d)(), const EVP_MD *type, char *data,
return
(
1
);
}
int
ASN1_item_digest
(
const
ASN1_ITEM
*
it
,
const
EVP_MD
*
type
,
void
*
asn
,
unsigned
char
*
md
,
unsigned
int
*
len
)
{
EVP_MD_CTX
ctx
;
int
i
;
unsigned
char
*
str
=
NULL
;
i
=
ASN1_item_i2d
(
asn
,
&
str
,
it
);
if
(
!
str
)
return
(
0
);
EVP_DigestInit
(
&
ctx
,
type
);
EVP_DigestUpdate
(
&
ctx
,
str
,
i
);
EVP_DigestFinal
(
&
ctx
,
md
,
len
);
OPENSSL_free
(
str
);
return
(
1
);
}
This diff is collapsed.
Click to expand it.
crypto/asn1/a_sign.c
浏览文件 @
09ab755c
...
...
@@ -146,3 +146,76 @@ err:
{
memset
((
char
*
)
buf_out
,
0
,
outll
);
OPENSSL_free
(
buf_out
);
}
return
(
outl
);
}
int
ASN1_item_sign
(
const
ASN1_ITEM
*
it
,
X509_ALGOR
*
algor1
,
X509_ALGOR
*
algor2
,
ASN1_BIT_STRING
*
signature
,
void
*
asn
,
EVP_PKEY
*
pkey
,
const
EVP_MD
*
type
)
{
EVP_MD_CTX
ctx
;
unsigned
char
*
buf_in
=
NULL
,
*
buf_out
=
NULL
;
int
i
,
inl
=
0
,
outl
=
0
,
outll
=
0
;
X509_ALGOR
*
a
;
for
(
i
=
0
;
i
<
2
;
i
++
)
{
if
(
i
==
0
)
a
=
algor1
;
else
a
=
algor2
;
if
(
a
==
NULL
)
continue
;
if
(
(
a
->
parameter
==
NULL
)
||
(
a
->
parameter
->
type
!=
V_ASN1_NULL
))
{
ASN1_TYPE_free
(
a
->
parameter
);
if
((
a
->
parameter
=
ASN1_TYPE_new
())
==
NULL
)
goto
err
;
a
->
parameter
->
type
=
V_ASN1_NULL
;
}
ASN1_OBJECT_free
(
a
->
algorithm
);
a
->
algorithm
=
OBJ_nid2obj
(
type
->
pkey_type
);
if
(
a
->
algorithm
==
NULL
)
{
ASN1err
(
ASN1_F_ASN1_SIGN
,
ASN1_R_UNKNOWN_OBJECT_TYPE
);
goto
err
;
}
if
(
a
->
algorithm
->
length
==
0
)
{
ASN1err
(
ASN1_F_ASN1_SIGN
,
ASN1_R_THE_ASN1_OBJECT_IDENTIFIER_IS_NOT_KNOWN_FOR_THIS_MD
);
goto
err
;
}
}
inl
=
ASN1_item_i2d
(
asn
,
&
buf_in
,
it
);
outll
=
outl
=
EVP_PKEY_size
(
pkey
);
buf_out
=
(
unsigned
char
*
)
OPENSSL_malloc
((
unsigned
int
)
outl
);
if
((
buf_in
==
NULL
)
||
(
buf_out
==
NULL
))
{
outl
=
0
;
ASN1err
(
ASN1_F_ASN1_SIGN
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
EVP_SignInit
(
&
ctx
,
type
);
EVP_SignUpdate
(
&
ctx
,(
unsigned
char
*
)
buf_in
,
inl
);
if
(
!
EVP_SignFinal
(
&
ctx
,(
unsigned
char
*
)
buf_out
,
(
unsigned
int
*
)
&
outl
,
pkey
))
{
outl
=
0
;
ASN1err
(
ASN1_F_ASN1_SIGN
,
ERR_R_EVP_LIB
);
goto
err
;
}
if
(
signature
->
data
!=
NULL
)
OPENSSL_free
(
signature
->
data
);
signature
->
data
=
buf_out
;
buf_out
=
NULL
;
signature
->
length
=
outl
;
/* In the interests of compatibility, I'll make sure that
* the bit string has a 'not-used bits' value of 0
*/
signature
->
flags
&=
~
(
ASN1_STRING_FLAG_BITS_LEFT
|
0x07
);
signature
->
flags
|=
ASN1_STRING_FLAG_BITS_LEFT
;
err:
memset
(
&
ctx
,
0
,
sizeof
(
ctx
));
if
(
buf_in
!=
NULL
)
{
memset
((
char
*
)
buf_in
,
0
,(
unsigned
int
)
inl
);
OPENSSL_free
(
buf_in
);
}
if
(
buf_out
!=
NULL
)
{
memset
((
char
*
)
buf_out
,
0
,
outll
);
OPENSSL_free
(
buf_out
);
}
return
(
outl
);
}
This diff is collapsed.
Click to expand it.
crypto/asn1/a_verify.c
浏览文件 @
09ab755c
...
...
@@ -117,3 +117,51 @@ int ASN1_verify(int (*i2d)(), X509_ALGOR *a, ASN1_BIT_STRING *signature,
err:
return
(
ret
);
}
int
ASN1_item_verify
(
const
ASN1_ITEM
*
it
,
X509_ALGOR
*
a
,
ASN1_BIT_STRING
*
signature
,
void
*
asn
,
EVP_PKEY
*
pkey
)
{
EVP_MD_CTX
ctx
;
const
EVP_MD
*
type
;
unsigned
char
*
buf_in
=
NULL
;
int
ret
=
-
1
,
i
,
inl
;
i
=
OBJ_obj2nid
(
a
->
algorithm
);
type
=
EVP_get_digestbyname
(
OBJ_nid2sn
(
i
));
if
(
type
==
NULL
)
{
ASN1err
(
ASN1_F_ASN1_VERIFY
,
ASN1_R_UNKNOWN_MESSAGE_DIGEST_ALGORITHM
);
goto
err
;
}
inl
=
ASN1_item_i2d
(
asn
,
&
buf_in
,
it
);
if
(
buf_in
==
NULL
)
{
ASN1err
(
ASN1_F_ASN1_VERIFY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
EVP_VerifyInit
(
&
ctx
,
type
);
EVP_VerifyUpdate
(
&
ctx
,(
unsigned
char
*
)
buf_in
,
inl
);
memset
(
buf_in
,
0
,(
unsigned
int
)
inl
);
OPENSSL_free
(
buf_in
);
if
(
EVP_VerifyFinal
(
&
ctx
,(
unsigned
char
*
)
signature
->
data
,
(
unsigned
int
)
signature
->
length
,
pkey
)
<=
0
)
{
ASN1err
(
ASN1_F_ASN1_VERIFY
,
ERR_R_EVP_LIB
);
ret
=
0
;
goto
err
;
}
/* we don't need to zero the 'ctx' because we just checked
* public information */
/* memset(&ctx,0,sizeof(ctx)); */
ret
=
1
;
err:
return
(
ret
);
}
This diff is collapsed.
Click to expand it.
crypto/asn1/asn1.h
浏览文件 @
09ab755c
...
...
@@ -852,7 +852,9 @@ STACK *ASN1_seq_unpack(unsigned char *buf, int len, char *(*d2i)(),
unsigned
char
*
ASN1_seq_pack
(
STACK
*
safes
,
int
(
*
i2d
)(),
unsigned
char
**
buf
,
int
*
len
);
void
*
ASN1_unpack_string
(
ASN1_STRING
*
oct
,
char
*
(
*
d2i
)());
void
*
ASN1_unpack_item
(
ASN1_STRING
*
oct
,
const
ASN1_ITEM
*
it
);
ASN1_STRING
*
ASN1_pack_string
(
void
*
obj
,
int
(
*
i2d
)(),
ASN1_OCTET_STRING
**
oct
);
ASN1_STRING
*
ASN1_pack_item
(
void
*
obj
,
const
ASN1_ITEM
*
it
,
ASN1_OCTET_STRING
**
oct
);
void
ASN1_STRING_set_default_mask
(
unsigned
long
mask
);
int
ASN1_STRING_set_default_mask_asc
(
char
*
p
);
...
...
This diff is collapsed.
Click to expand it.
crypto/asn1/asn_pack.c
浏览文件 @
09ab755c
...
...
@@ -117,7 +117,7 @@ void *ASN1_unpack_string (ASN1_STRING *oct, char *(*d2i)())
/* Pack an ASN1 object into an ASN1_STRING */
ASN1_STRING
*
ASN1_pack_string
(
void
*
obj
,
int
(
*
i2d
)(),
ASN1_STRING
**
oct
)
ASN1_STRING
*
ASN1_pack_string
(
void
*
obj
,
int
(
*
i2d
)(),
ASN1_STRING
**
oct
)
{
unsigned
char
*
p
;
ASN1_STRING
*
octmp
;
...
...
@@ -143,3 +143,45 @@ ASN1_STRING *ASN1_pack_string (void *obj, int (*i2d)(), ASN1_STRING **oct)
return
octmp
;
}
/* ASN1_ITEM versions of the above */
ASN1_STRING
*
ASN1_pack_item
(
void
*
obj
,
const
ASN1_ITEM
*
it
,
ASN1_STRING
**
oct
)
{
ASN1_STRING
*
octmp
;
if
(
!
oct
||
!*
oct
)
{
if
(
!
(
octmp
=
ASN1_STRING_new
()))
{
ASN1err
(
ASN1_F_ASN1_PACK_STRING
,
ERR_R_MALLOC_FAILURE
);
return
NULL
;
}
if
(
oct
)
*
oct
=
octmp
;
}
else
octmp
=
*
oct
;
if
(
octmp
->
data
)
{
OPENSSL_free
(
octmp
->
data
);
octmp
->
data
=
NULL
;
}
if
(
!
(
octmp
->
length
=
ASN1_item_i2d
(
obj
,
&
octmp
->
data
,
it
)))
{
ASN1err
(
ASN1_F_ASN1_PACK_STRING
,
ASN1_R_ENCODE_ERROR
);
return
NULL
;
}
if
(
!
octmp
->
data
)
{
ASN1err
(
ASN1_F_ASN1_PACK_STRING
,
ERR_R_MALLOC_FAILURE
);
return
NULL
;
}
return
octmp
;
}
/* Extract an ASN1 object from an ASN1_STRING */
void
*
ASN1_unpack_item
(
ASN1_STRING
*
oct
,
const
ASN1_ITEM
*
it
)
{
unsigned
char
*
p
;
void
*
ret
;
p
=
oct
->
data
;
if
(
!
(
ret
=
ASN1_item_d2i
(
NULL
,
&
p
,
oct
->
length
,
it
)))
ASN1err
(
ASN1_F_ASN1_UNPACK_STRING
,
ASN1_R_DECODE_ERROR
);
return
ret
;
}
This diff is collapsed.
Click to expand it.
crypto/x509/x509.h
浏览文件 @
09ab755c
...
...
@@ -913,6 +913,16 @@ int ASN1_digest(int (*i2d)(),const EVP_MD *type,char *data,
int
ASN1_sign
(
int
(
*
i2d
)(),
X509_ALGOR
*
algor1
,
X509_ALGOR
*
algor2
,
ASN1_BIT_STRING
*
signature
,
char
*
data
,
EVP_PKEY
*
pkey
,
const
EVP_MD
*
type
);
int
ASN1_item_digest
(
const
ASN1_ITEM
*
it
,
const
EVP_MD
*
type
,
void
*
data
,
unsigned
char
*
md
,
unsigned
int
*
len
);
int
ASN1_item_verify
(
const
ASN1_ITEM
*
it
,
X509_ALGOR
*
algor1
,
ASN1_BIT_STRING
*
signature
,
void
*
data
,
EVP_PKEY
*
pkey
);
int
ASN1_item_sign
(
const
ASN1_ITEM
*
it
,
X509_ALGOR
*
algor1
,
X509_ALGOR
*
algor2
,
ASN1_BIT_STRING
*
signature
,
void
*
data
,
EVP_PKEY
*
pkey
,
const
EVP_MD
*
type
);
#endif
int
X509_set_version
(
X509
*
x
,
long
version
);
...
...
This diff is collapsed.
Click to expand it.
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录
反馈
建议
客服
返回
顶部