Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
btwise
openssl
提交
14a7cfb3
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,发现更多精彩内容 >>
提交
14a7cfb3
编写于
8月 07, 2002
作者:
B
Bodo Möller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
use a generic EC_KEY structure (EC keys are not ECDSA specific)
Submitted by: Nils Larsch
上级
7a8645d1
变更
41
隐藏空白更改
内联
并排
Showing
41 changed file
with
1782 addition
and
1457 deletion
+1782
-1457
apps/ecdsa.c
apps/ecdsa.c
+20
-20
apps/ecparam.c
apps/ecparam.c
+18
-13
apps/req.c
apps/req.c
+23
-22
crypto/asn1/Makefile.ssl
crypto/asn1/Makefile.ssl
+59
-59
crypto/asn1/asn1.h
crypto/asn1/asn1.h
+1
-0
crypto/asn1/asn1_err.c
crypto/asn1/asn1_err.c
+2
-1
crypto/asn1/d2i_pr.c
crypto/asn1/d2i_pr.c
+6
-6
crypto/asn1/d2i_pu.c
crypto/asn1/d2i_pu.c
+7
-6
crypto/asn1/i2d_pr.c
crypto/asn1/i2d_pr.c
+5
-5
crypto/asn1/i2d_pu.c
crypto/asn1/i2d_pu.c
+5
-5
crypto/asn1/t_pkey.c
crypto/asn1/t_pkey.c
+30
-35
crypto/asn1/t_req.c
crypto/asn1/t_req.c
+4
-4
crypto/asn1/t_spki.c
crypto/asn1/t_spki.c
+4
-4
crypto/asn1/t_x509.c
crypto/asn1/t_x509.c
+6
-6
crypto/asn1/x_pubkey.c
crypto/asn1/x_pubkey.c
+33
-32
crypto/ec/Makefile.ssl
crypto/ec/Makefile.ssl
+12
-4
crypto/ec/ec.h
crypto/ec/ec.h
+75
-27
crypto/ec/ec_asn1.c
crypto/ec/ec_asn1.c
+343
-50
crypto/ec/ec_err.c
crypto/ec/ec_err.c
+19
-4
crypto/ec/ec_key.c
crypto/ec/ec_key.c
+354
-0
crypto/ecdsa/Makefile.ssl
crypto/ecdsa/Makefile.ssl
+2
-13
crypto/ecdsa/ecdsa.h
crypto/ecdsa/ecdsa.h
+52
-163
crypto/ecdsa/ecdsatest.c
crypto/ecdsa/ecdsatest.c
+70
-64
crypto/ecdsa/ecs_asn1.c
crypto/ecdsa/ecs_asn1.c
+0
-321
crypto/ecdsa/ecs_err.c
crypto/ecdsa/ecs_err.c
+1
-55
crypto/ecdsa/ecs_gen.c
crypto/ecdsa/ecs_gen.c
+0
-83
crypto/ecdsa/ecs_lib.c
crypto/ecdsa/ecs_lib.c
+80
-102
crypto/ecdsa/ecs_ossl.c
crypto/ecdsa/ecs_ossl.c
+225
-95
crypto/ecdsa/ecs_sign.c
crypto/ecdsa/ecs_sign.c
+14
-7
crypto/ecdsa/ecs_vrf.c
crypto/ecdsa/ecs_vrf.c
+10
-5
crypto/evp/evp.h
crypto/evp/evp.h
+14
-10
crypto/evp/evp_err.c
crypto/evp/evp_err.c
+5
-2
crypto/evp/evp_pkey.c
crypto/evp/evp_pkey.c
+77
-69
crypto/evp/p_lib.c
crypto/evp/p_lib.c
+31
-28
crypto/pem/pem.h
crypto/pem/pem.h
+2
-5
crypto/pem/pem_all.c
crypto/pem/pem_all.c
+18
-19
crypto/pem/pem_info.c
crypto/pem/pem_info.c
+4
-4
crypto/x509/x509.h
crypto/x509/x509.h
+23
-19
crypto/x509/x509_cmp.c
crypto/x509/x509_cmp.c
+4
-3
crypto/x509/x_all.c
crypto/x509/x_all.c
+28
-29
util/libeay.num
util/libeay.num
+96
-58
未找到文件。
apps/ecdsa.c
浏览文件 @
14a7cfb3
...
...
@@ -60,8 +60,8 @@
#include "apps.h"
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/ecdsa.h>
#include <openssl/evp.h>
#include <openssl/ecdsa.h>
#include <openssl/x509.h>
#include <openssl/pem.h>
...
...
@@ -85,7 +85,7 @@ int MAIN(int argc, char **argv)
{
ENGINE
*
e
=
NULL
;
int
ret
=
1
;
EC
DSA
*
ecdsa
=
NULL
;
EC
_KEY
*
eckey
=
NULL
;
int
i
,
badops
=
0
;
const
EVP_CIPHER
*
enc
=
NULL
;
BIO
*
in
=
NULL
,
*
out
=
NULL
;
...
...
@@ -279,17 +279,17 @@ bad:
if
(
informat
==
FORMAT_ASN1
)
{
if
(
pubin
)
ec
dsa
=
d2i_ECDSA
_PUBKEY_bio
(
in
,
NULL
);
ec
key
=
d2i_EC
_PUBKEY_bio
(
in
,
NULL
);
else
ec
dsa
=
d2i_ECDSA
PrivateKey_bio
(
in
,
NULL
);
ec
key
=
d2i_EC
PrivateKey_bio
(
in
,
NULL
);
}
else
if
(
informat
==
FORMAT_PEM
)
{
if
(
pubin
)
ec
dsa
=
PEM_read_bio_ECDSA
_PUBKEY
(
in
,
NULL
,
NULL
,
ec
key
=
PEM_read_bio_EC
_PUBKEY
(
in
,
NULL
,
NULL
,
NULL
);
else
ec
dsa
=
PEM_read_bio_ECDSA
PrivateKey
(
in
,
NULL
,
NULL
,
ec
key
=
PEM_read_bio_EC
PrivateKey
(
in
,
NULL
,
NULL
,
passin
);
}
else
...
...
@@ -297,7 +297,7 @@ bad:
BIO_printf
(
bio_err
,
"bad input format specified for key
\n
"
);
goto
end
;
}
if
(
ec
dsa
==
NULL
)
if
(
ec
key
==
NULL
)
{
BIO_printf
(
bio_err
,
"unable to load Key
\n
"
);
ERR_print_errors
(
bio_err
);
...
...
@@ -325,15 +325,15 @@ bad:
if
(
new_form
)
{
EC_GROUP_set_point_conversion_form
(
ec
dsa
->
group
,
form
);
ECDSA_set_conversion_form
(
ecdsa
,
form
)
;
EC_GROUP_set_point_conversion_form
(
ec
key
->
group
,
form
);
eckey
->
conv_form
=
form
;
}
if
(
new_asn1_flag
)
EC_GROUP_set_asn1_flag
(
ec
dsa
->
group
,
asn1_flag
);
EC_GROUP_set_asn1_flag
(
ec
key
->
group
,
asn1_flag
);
if
(
text
)
if
(
!
EC
DSA_print
(
out
,
ecdsa
,
0
))
if
(
!
EC
_KEY_print
(
out
,
eckey
,
0
))
{
perror
(
outfile
);
ERR_print_errors
(
bio_err
);
...
...
@@ -343,24 +343,24 @@ bad:
if
(
noout
)
goto
end
;
BIO_printf
(
bio_err
,
"writing EC
DSA
key
\n
"
);
BIO_printf
(
bio_err
,
"writing EC key
\n
"
);
if
(
outformat
==
FORMAT_ASN1
)
{
if
(
param_out
)
i
=
i2d_ECPKParameters_bio
(
out
,
ec
dsa
->
group
);
i
=
i2d_ECPKParameters_bio
(
out
,
ec
key
->
group
);
else
if
(
pubin
||
pubout
)
i
=
i2d_EC
DSA_PUBKEY_bio
(
out
,
ecdsa
);
i
=
i2d_EC
_PUBKEY_bio
(
out
,
eckey
);
else
i
=
i2d_EC
DSAPrivateKey_bio
(
out
,
ecdsa
);
i
=
i2d_EC
PrivateKey_bio
(
out
,
eckey
);
}
else
if
(
outformat
==
FORMAT_PEM
)
{
if
(
param_out
)
i
=
PEM_write_bio_ECPKParameters
(
out
,
ec
dsa
->
group
);
i
=
PEM_write_bio_ECPKParameters
(
out
,
ec
key
->
group
);
else
if
(
pubin
||
pubout
)
i
=
PEM_write_bio_EC
DSA_PUBKEY
(
out
,
ecdsa
);
i
=
PEM_write_bio_EC
_PUBKEY
(
out
,
eckey
);
else
i
=
PEM_write_bio_EC
DSAPrivateKey
(
out
,
ecdsa
,
enc
,
i
=
PEM_write_bio_EC
PrivateKey
(
out
,
eckey
,
enc
,
NULL
,
0
,
NULL
,
passout
);
}
else
...
...
@@ -382,8 +382,8 @@ end:
BIO_free
(
in
);
if
(
out
)
BIO_free_all
(
out
);
if
(
ec
dsa
)
EC
DSA_free
(
ecdsa
);
if
(
ec
key
)
EC
_KEY_free
(
eckey
);
if
(
passin
)
OPENSSL_free
(
passin
);
if
(
passout
)
...
...
apps/ecparam.c
浏览文件 @
14a7cfb3
/* apps/ecparam.c */
/*
* Originally written by Nils Larsch for the OpenSSL project.
*/
/* ====================================================================
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
*
...
...
@@ -78,7 +81,7 @@
* Sheueling Chang Shantz and Douglas Stebila of Sun Microsystems Laboratories.
*
*/
#ifndef OPENSSL_NO_EC
DSA
#ifndef OPENSSL_NO_EC
#include <assert.h>
#include <stdio.h>
#include <stdlib.h>
...
...
@@ -89,7 +92,9 @@
#include <openssl/err.h>
#include <openssl/bn.h>
#include <openssl/ec.h>
#ifndef OPENSSL_NO_ECDSA
#include <openssl/ecdsa.h>
#endif
#include <openssl/x509.h>
#include <openssl/pem.h>
...
...
@@ -673,36 +678,36 @@ bad:
if
(
genkey
)
{
EC
DSA
*
ecdsa
=
ECDSA
_new
();
EC
_KEY
*
eckey
=
EC_KEY
_new
();
if
(
ec
dsa
==
NULL
)
if
(
ec
key
==
NULL
)
goto
end
;
assert
(
need_rand
);
ec
dsa
->
group
=
group
;
ec
key
->
group
=
group
;
if
(
!
EC
DSA_generate_key
(
ecdsa
))
if
(
!
EC
_KEY_generate_key
(
eckey
))
{
ec
dsa
->
group
=
NULL
;
EC
DSA_free
(
ecdsa
);
ec
key
->
group
=
NULL
;
EC
_KEY_free
(
eckey
);
goto
end
;
}
if
(
outformat
==
FORMAT_ASN1
)
i
=
i2d_EC
DSAPrivateKey_bio
(
out
,
ecdsa
);
i
=
i2d_EC
PrivateKey_bio
(
out
,
eckey
);
else
if
(
outformat
==
FORMAT_PEM
)
i
=
PEM_write_bio_EC
DSAPrivateKey
(
out
,
ecdsa
,
NULL
,
i
=
PEM_write_bio_EC
PrivateKey
(
out
,
eckey
,
NULL
,
NULL
,
0
,
NULL
,
NULL
);
else
{
BIO_printf
(
bio_err
,
"bad output format specified "
"for outfile
\n
"
);
ec
dsa
->
group
=
NULL
;
EC
DSA_free
(
ecdsa
);
ec
key
->
group
=
NULL
;
EC
_KEY_free
(
eckey
);
goto
end
;
}
ec
dsa
->
group
=
NULL
;
EC
DSA_free
(
ecdsa
);
ec
key
->
group
=
NULL
;
EC
_KEY_free
(
eckey
);
}
if
(
need_rand
)
...
...
apps/req.c
浏览文件 @
14a7cfb3
...
...
@@ -142,7 +142,7 @@ static int batch=0;
#define TYPE_RSA 1
#define TYPE_DSA 2
#define TYPE_DH 3
#define TYPE_EC
DSA
4
#define TYPE_EC
4
int
MAIN
(
int
,
char
**
);
...
...
@@ -152,8 +152,8 @@ int MAIN(int argc, char **argv)
#ifndef OPENSSL_NO_DSA
DSA
*
dsa_params
=
NULL
;
#endif
#ifndef OPENSSL_NO_EC
DSA
EC
DSA
*
ecdsa
_params
=
NULL
;
#ifndef OPENSSL_NO_EC
EC
_KEY
*
ec
_params
=
NULL
;
#endif
unsigned
long
nmflag
=
0
;
int
ex
=
1
,
x509
=
0
,
days
=
30
;
...
...
@@ -327,41 +327,41 @@ int MAIN(int argc, char **argv)
}
else
#endif
#ifndef OPENSSL_NO_EC
DSA
#ifndef OPENSSL_NO_EC
if
(
strncmp
(
"ecdsa:"
,
p
,
4
)
==
0
)
{
X509
*
xtmp
=
NULL
;
EVP_PKEY
*
dtmp
;
pkey_type
=
TYPE_EC
DSA
;
pkey_type
=
TYPE_EC
;
p
+=
6
;
if
((
in
=
BIO_new_file
(
p
,
"r"
))
==
NULL
)
{
perror
(
p
);
goto
end
;
}
if
((
ec
dsa_params
=
ECDSA
_new
())
==
NULL
)
if
((
ec
_params
=
EC_KEY
_new
())
==
NULL
)
goto
end
;
if
((
ec
dsa
_params
->
group
=
PEM_read_bio_ECPKParameters
(
in
,
NULL
,
NULL
,
NULL
))
==
NULL
)
if
((
ec_params
->
group
=
PEM_read_bio_ECPKParameters
(
in
,
NULL
,
NULL
,
NULL
))
==
NULL
)
{
if
(
ec
dsa
_params
)
EC
DSA_free
(
ecdsa
_params
);
if
(
ec_params
)
EC
_KEY_free
(
ec
_params
);
ERR_clear_error
();
(
void
)
BIO_reset
(
in
);
if
((
xtmp
=
PEM_read_bio_X509
(
in
,
NULL
,
NULL
,
NULL
))
==
NULL
)
{
BIO_printf
(
bio_err
,
"unable to load EC
DSA
parameters from file
\n
"
);
BIO_printf
(
bio_err
,
"unable to load EC parameters from file
\n
"
);
goto
end
;
}
if
((
dtmp
=
X509_get_pubkey
(
xtmp
))
==
NULL
)
goto
end
;
if
(
dtmp
->
type
==
EVP_PKEY_EC
DSA
)
ec
dsa_params
=
ECDSAParameters_dup
(
dtmp
->
pkey
.
ecdsa
);
if
(
dtmp
->
type
==
EVP_PKEY_EC
)
ec
_params
=
ECParameters_dup
(
dtmp
->
pkey
.
eckey
);
EVP_PKEY_free
(
dtmp
);
X509_free
(
xtmp
);
if
(
ec
dsa
_params
==
NULL
)
if
(
ec_params
==
NULL
)
{
BIO_printf
(
bio_err
,
"Certificate does not contain EC
DSA
parameters
\n
"
);
BIO_printf
(
bio_err
,
"Certificate does not contain EC parameters
\n
"
);
goto
end
;
}
}
...
...
@@ -374,7 +374,7 @@ int MAIN(int argc, char **argv)
if
(
!
order
)
goto
end
;
if
(
!
EC_GROUP_get_order
(
ec
dsa
_params
->
group
,
order
,
NULL
))
if
(
!
EC_GROUP_get_order
(
ec_params
->
group
,
order
,
NULL
))
goto
end
;
newkey
=
BN_num_bits
(
order
);
BN_free
(
order
);
...
...
@@ -745,12 +745,13 @@ bad:
dsa_params
=
NULL
;
}
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
pkey_type
==
TYPE_EC
DSA
)
#ifndef OPENSSL_NO_EC
if
(
pkey_type
==
TYPE_EC
)
{
if
(
!
ECDSA_generate_key
(
ecdsa_params
))
goto
end
;
if
(
!
EVP_PKEY_assign_ECDSA
(
pkey
,
ecdsa_params
))
goto
end
;
ecdsa_params
=
NULL
;
if
(
!
EC_KEY_generate_key
(
ec_params
))
goto
end
;
if
(
!
EVP_PKEY_assign_EC_KEY
(
pkey
,
ec_params
))
goto
end
;
ec_params
=
NULL
;
}
#endif
...
...
@@ -1144,8 +1145,8 @@ end:
#ifndef OPENSSL_NO_DSA
if
(
dsa_params
!=
NULL
)
DSA_free
(
dsa_params
);
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
ec
dsa_params
!=
NULL
)
ECDSA_free
(
ecdsa
_params
);
#ifndef OPENSSL_NO_EC
if
(
ec
_params
!=
NULL
)
EC_KEY_free
(
ec
_params
);
#endif
apps_shutdown
();
EXIT
(
ex
);
...
...
crypto/asn1/Makefile.ssl
浏览文件 @
14a7cfb3
...
...
@@ -439,19 +439,19 @@ d2i_pr.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
d2i_pr.o
:
../../include/openssl/des.h ../../include/openssl/des_old.h
d2i_pr.o
:
../../include/openssl/dh.h ../../include/openssl/dsa.h
d2i_pr.o
:
../../include/openssl/e_os2.h ../../include/openssl/ec.h
d2i_pr.o
:
../../include/openssl/e
cdsa.h ../../include/openssl/err
.h
d2i_pr.o
:
../../include/openssl/
evp.h ../../include/openssl/idea
.h
d2i_pr.o
:
../../include/openssl/
lhash.h ../../include/openssl/md2
.h
d2i_pr.o
:
../../include/openssl/md
4.h ../../include/openssl/md5
.h
d2i_pr.o
:
../../include/openssl/
mdc2.h ../../include/openssl/obj_mac
.h
d2i_pr.o
:
../../include/openssl/o
bjects.h ../../include/openssl/opensslconf
.h
d2i_pr.o
:
../../include/openssl/o
pensslv.h ../../include/openssl/ossl_typ
.h
d2i_pr.o
:
../../include/openssl/rc
2.h ../../include/openssl/rc4
.h
d2i_pr.o
:
../../include/openssl/r
c5.h ../../include/openssl/ripemd
.h
d2i_pr.o
:
../../include/openssl/
rsa.h ../../include/openssl/safestack
.h
d2i_pr.o
:
../../include/openssl/s
ha.h ../../include/openssl/stack
.h
d2i_pr.o
:
../../include/openssl/
symhacks.h ../../include/openssl/ui
.h
d2i_pr.o
:
../
../include/openssl/ui_compat.h ../
cryptlib.h d2i_pr.c
d2i_pr.o
:
../../include/openssl/e
rr.h ../../include/openssl/evp
.h
d2i_pr.o
:
../../include/openssl/
idea.h ../../include/openssl/lhash
.h
d2i_pr.o
:
../../include/openssl/
md2.h ../../include/openssl/md4
.h
d2i_pr.o
:
../../include/openssl/md
5.h ../../include/openssl/mdc2
.h
d2i_pr.o
:
../../include/openssl/
obj_mac.h ../../include/openssl/objects
.h
d2i_pr.o
:
../../include/openssl/o
pensslconf.h ../../include/openssl/opensslv
.h
d2i_pr.o
:
../../include/openssl/o
ssl_typ.h ../../include/openssl/rc2
.h
d2i_pr.o
:
../../include/openssl/rc
4.h ../../include/openssl/rc5
.h
d2i_pr.o
:
../../include/openssl/r
ipemd.h ../../include/openssl/rsa
.h
d2i_pr.o
:
../../include/openssl/
safestack.h ../../include/openssl/sha
.h
d2i_pr.o
:
../../include/openssl/s
tack.h ../../include/openssl/symhacks
.h
d2i_pr.o
:
../../include/openssl/
ui.h ../../include/openssl/ui_compat
.h
d2i_pr.o
:
../cryptlib.h d2i_pr.c
d2i_pu.o
:
../../e_os.h ../../include/openssl/aes.h ../../include/openssl/asn1.h
d2i_pu.o
:
../../include/openssl/bio.h ../../include/openssl/blowfish.h
d2i_pu.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
...
...
@@ -459,19 +459,19 @@ d2i_pu.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
d2i_pu.o
:
../../include/openssl/des.h ../../include/openssl/des_old.h
d2i_pu.o
:
../../include/openssl/dh.h ../../include/openssl/dsa.h
d2i_pu.o
:
../../include/openssl/e_os2.h ../../include/openssl/ec.h
d2i_pu.o
:
../../include/openssl/e
cdsa.h ../../include/openssl/err
.h
d2i_pu.o
:
../../include/openssl/
evp.h ../../include/openssl/idea
.h
d2i_pu.o
:
../../include/openssl/
lhash.h ../../include/openssl/md2
.h
d2i_pu.o
:
../../include/openssl/md
4.h ../../include/openssl/md5
.h
d2i_pu.o
:
../../include/openssl/
mdc2.h ../../include/openssl/obj_mac
.h
d2i_pu.o
:
../../include/openssl/o
bjects.h ../../include/openssl/opensslconf
.h
d2i_pu.o
:
../../include/openssl/o
pensslv.h ../../include/openssl/ossl_typ
.h
d2i_pu.o
:
../../include/openssl/rc
2.h ../../include/openssl/rc4
.h
d2i_pu.o
:
../../include/openssl/r
c5.h ../../include/openssl/ripemd
.h
d2i_pu.o
:
../../include/openssl/
rsa.h ../../include/openssl/safestack
.h
d2i_pu.o
:
../../include/openssl/s
ha.h ../../include/openssl/stack
.h
d2i_pu.o
:
../../include/openssl/
symhacks.h ../../include/openssl/ui
.h
d2i_pu.o
:
../
../include/openssl/ui_compat.h ../
cryptlib.h d2i_pu.c
d2i_pu.o
:
../../include/openssl/e
rr.h ../../include/openssl/evp
.h
d2i_pu.o
:
../../include/openssl/
idea.h ../../include/openssl/lhash
.h
d2i_pu.o
:
../../include/openssl/
md2.h ../../include/openssl/md4
.h
d2i_pu.o
:
../../include/openssl/md
5.h ../../include/openssl/mdc2
.h
d2i_pu.o
:
../../include/openssl/
obj_mac.h ../../include/openssl/objects
.h
d2i_pu.o
:
../../include/openssl/o
pensslconf.h ../../include/openssl/opensslv
.h
d2i_pu.o
:
../../include/openssl/o
ssl_typ.h ../../include/openssl/rc2
.h
d2i_pu.o
:
../../include/openssl/rc
4.h ../../include/openssl/rc5
.h
d2i_pu.o
:
../../include/openssl/r
ipemd.h ../../include/openssl/rsa
.h
d2i_pu.o
:
../../include/openssl/
safestack.h ../../include/openssl/sha
.h
d2i_pu.o
:
../../include/openssl/s
tack.h ../../include/openssl/symhacks
.h
d2i_pu.o
:
../../include/openssl/
ui.h ../../include/openssl/ui_compat
.h
d2i_pu.o
:
../cryptlib.h d2i_pu.c
evp_asn1.o
:
../../e_os.h ../../include/openssl/asn1.h
evp_asn1.o
:
../../include/openssl/asn1_mac.h ../../include/openssl/bio.h
evp_asn1.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
...
...
@@ -512,19 +512,19 @@ i2d_pr.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
i2d_pr.o
:
../../include/openssl/des.h ../../include/openssl/des_old.h
i2d_pr.o
:
../../include/openssl/dh.h ../../include/openssl/dsa.h
i2d_pr.o
:
../../include/openssl/e_os2.h ../../include/openssl/ec.h
i2d_pr.o
:
../../include/openssl/e
cdsa.h ../../include/openssl/err
.h
i2d_pr.o
:
../../include/openssl/
evp.h ../../include/openssl/idea
.h
i2d_pr.o
:
../../include/openssl/
lhash.h ../../include/openssl/md2
.h
i2d_pr.o
:
../../include/openssl/md
4.h ../../include/openssl/md5
.h
i2d_pr.o
:
../../include/openssl/
mdc2.h ../../include/openssl/obj_mac
.h
i2d_pr.o
:
../../include/openssl/o
bjects.h ../../include/openssl/opensslconf
.h
i2d_pr.o
:
../../include/openssl/o
pensslv.h ../../include/openssl/ossl_typ
.h
i2d_pr.o
:
../../include/openssl/rc
2.h ../../include/openssl/rc4
.h
i2d_pr.o
:
../../include/openssl/r
c5.h ../../include/openssl/ripemd
.h
i2d_pr.o
:
../../include/openssl/
rsa.h ../../include/openssl/safestack
.h
i2d_pr.o
:
../../include/openssl/s
ha.h ../../include/openssl/stack
.h
i2d_pr.o
:
../../include/openssl/
symhacks.h ../../include/openssl/ui
.h
i2d_pr.o
:
../
../include/openssl/ui_compat.h ../
cryptlib.h i2d_pr.c
i2d_pr.o
:
../../include/openssl/e
rr.h ../../include/openssl/evp
.h
i2d_pr.o
:
../../include/openssl/
idea.h ../../include/openssl/lhash
.h
i2d_pr.o
:
../../include/openssl/
md2.h ../../include/openssl/md4
.h
i2d_pr.o
:
../../include/openssl/md
5.h ../../include/openssl/mdc2
.h
i2d_pr.o
:
../../include/openssl/
obj_mac.h ../../include/openssl/objects
.h
i2d_pr.o
:
../../include/openssl/o
pensslconf.h ../../include/openssl/opensslv
.h
i2d_pr.o
:
../../include/openssl/o
ssl_typ.h ../../include/openssl/rc2
.h
i2d_pr.o
:
../../include/openssl/rc
4.h ../../include/openssl/rc5
.h
i2d_pr.o
:
../../include/openssl/r
ipemd.h ../../include/openssl/rsa
.h
i2d_pr.o
:
../../include/openssl/
safestack.h ../../include/openssl/sha
.h
i2d_pr.o
:
../../include/openssl/s
tack.h ../../include/openssl/symhacks
.h
i2d_pr.o
:
../../include/openssl/
ui.h ../../include/openssl/ui_compat
.h
i2d_pr.o
:
../cryptlib.h i2d_pr.c
i2d_pu.o
:
../../e_os.h ../../include/openssl/aes.h ../../include/openssl/asn1.h
i2d_pu.o
:
../../include/openssl/bio.h ../../include/openssl/blowfish.h
i2d_pu.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
...
...
@@ -532,19 +532,19 @@ i2d_pu.o: ../../include/openssl/cast.h ../../include/openssl/crypto.h
i2d_pu.o
:
../../include/openssl/des.h ../../include/openssl/des_old.h
i2d_pu.o
:
../../include/openssl/dh.h ../../include/openssl/dsa.h
i2d_pu.o
:
../../include/openssl/e_os2.h ../../include/openssl/ec.h
i2d_pu.o
:
../../include/openssl/e
cdsa.h ../../include/openssl/err
.h
i2d_pu.o
:
../../include/openssl/
evp.h ../../include/openssl/idea
.h
i2d_pu.o
:
../../include/openssl/
lhash.h ../../include/openssl/md2
.h
i2d_pu.o
:
../../include/openssl/md
4.h ../../include/openssl/md5
.h
i2d_pu.o
:
../../include/openssl/
mdc2.h ../../include/openssl/obj_mac
.h
i2d_pu.o
:
../../include/openssl/o
bjects.h ../../include/openssl/opensslconf
.h
i2d_pu.o
:
../../include/openssl/o
pensslv.h ../../include/openssl/ossl_typ
.h
i2d_pu.o
:
../../include/openssl/rc
2.h ../../include/openssl/rc4
.h
i2d_pu.o
:
../../include/openssl/r
c5.h ../../include/openssl/ripemd
.h
i2d_pu.o
:
../../include/openssl/
rsa.h ../../include/openssl/safestack
.h
i2d_pu.o
:
../../include/openssl/s
ha.h ../../include/openssl/stack
.h
i2d_pu.o
:
../../include/openssl/
symhacks.h ../../include/openssl/ui
.h
i2d_pu.o
:
../
../include/openssl/ui_compat.h ../
cryptlib.h i2d_pu.c
i2d_pu.o
:
../../include/openssl/e
rr.h ../../include/openssl/evp
.h
i2d_pu.o
:
../../include/openssl/
idea.h ../../include/openssl/lhash
.h
i2d_pu.o
:
../../include/openssl/
md2.h ../../include/openssl/md4
.h
i2d_pu.o
:
../../include/openssl/md
5.h ../../include/openssl/mdc2
.h
i2d_pu.o
:
../../include/openssl/
obj_mac.h ../../include/openssl/objects
.h
i2d_pu.o
:
../../include/openssl/o
pensslconf.h ../../include/openssl/opensslv
.h
i2d_pu.o
:
../../include/openssl/o
ssl_typ.h ../../include/openssl/rc2
.h
i2d_pu.o
:
../../include/openssl/rc
4.h ../../include/openssl/rc5
.h
i2d_pu.o
:
../../include/openssl/r
ipemd.h ../../include/openssl/rsa
.h
i2d_pu.o
:
../../include/openssl/
safestack.h ../../include/openssl/sha
.h
i2d_pu.o
:
../../include/openssl/s
tack.h ../../include/openssl/symhacks
.h
i2d_pu.o
:
../../include/openssl/
ui.h ../../include/openssl/ui_compat
.h
i2d_pu.o
:
../cryptlib.h i2d_pu.c
n_pkey.o
:
../../e_os.h ../../include/openssl/aes.h ../../include/openssl/asn1.h
n_pkey.o
:
../../include/openssl/asn1_mac.h ../../include/openssl/asn1t.h
n_pkey.o
:
../../include/openssl/bio.h ../../include/openssl/blowfish.h
...
...
@@ -708,13 +708,13 @@ t_pkey.o: ../../e_os.h ../../include/openssl/asn1.h ../../include/openssl/bio.h
t_pkey.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
t_pkey.o
:
../../include/openssl/crypto.h ../../include/openssl/dh.h
t_pkey.o
:
../../include/openssl/dsa.h ../../include/openssl/e_os2.h
t_pkey.o
:
../../include/openssl/ec.h ../../include/openssl/e
cdsa
.h
t_pkey.o
:
../../include/openssl/
err.h ../../include/openssl/lhash
.h
t_pkey.o
:
../../include/openssl/obj
_mac.h ../../include/openssl/objects
.h
t_pkey.o
:
../../include/openssl/openssl
conf.h ../../include/openssl/opensslv
.h
t_pkey.o
:
../../include/openssl/
ossl_typ.h ../../include/openssl/rsa
.h
t_pkey.o
:
../../include/openssl/s
afestack.h ../../include/openssl/stack
.h
t_pkey.o
:
../
../include/openssl/symhacks.h ../
cryptlib.h t_pkey.c
t_pkey.o
:
../../include/openssl/ec.h ../../include/openssl/e
rr
.h
t_pkey.o
:
../../include/openssl/
lhash.h ../../include/openssl/obj_mac
.h
t_pkey.o
:
../../include/openssl/obj
ects.h ../../include/openssl/opensslconf
.h
t_pkey.o
:
../../include/openssl/openssl
v.h ../../include/openssl/ossl_typ
.h
t_pkey.o
:
../../include/openssl/
rsa.h ../../include/openssl/safestack
.h
t_pkey.o
:
../../include/openssl/s
tack.h ../../include/openssl/symhacks
.h
t_pkey.o
:
../cryptlib.h t_pkey.c
t_req.o
:
../../e_os.h ../../include/openssl/aes.h ../../include/openssl/asn1.h
t_req.o
:
../../include/openssl/bio.h ../../include/openssl/blowfish.h
t_req.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
...
...
crypto/asn1/asn1.h
浏览文件 @
14a7cfb3
...
...
@@ -1010,6 +1010,7 @@ void ERR_load_ASN1_strings(void);
#define ASN1_F_I2D_ASN1_TIME 160
#define ASN1_F_I2D_DSA_PUBKEY 161
#define ASN1_F_I2D_ECDSA_PUBKEY 174
#define ASN1_F_I2D_EC_PUBKEY 176
#define ASN1_F_I2D_NETSCAPE_RSA 162
#define ASN1_F_I2D_PRIVATEKEY 163
#define ASN1_F_I2D_PUBLICKEY 164
...
...
crypto/asn1/asn1_err.c
浏览文件 @
14a7cfb3
...
...
@@ -128,7 +128,8 @@ static ERR_STRING_DATA ASN1_str_functs[]=
{
ERR_PACK
(
0
,
ASN1_F_D2I_X509_PKEY
,
0
),
"d2i_X509_PKEY"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_ASN1_TIME
,
0
),
"I2D_ASN1_TIME"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_DSA_PUBKEY
,
0
),
"i2d_DSA_PUBKEY"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_ECDSA_PUBKEY
,
0
),
"i2d_ECDSA_PUBKEY"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_ECDSA_PUBKEY
,
0
),
"I2D_ECDSA_PUBKEY"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_EC_PUBKEY
,
0
),
"i2d_EC_PUBKEY"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_NETSCAPE_RSA
,
0
),
"i2d_Netscape_RSA"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_PRIVATEKEY
,
0
),
"i2d_PrivateKey"
},
{
ERR_PACK
(
0
,
ASN1_F_I2D_PUBLICKEY
,
0
),
"i2d_PublicKey"
},
...
...
crypto/asn1/d2i_pr.c
浏览文件 @
14a7cfb3
...
...
@@ -68,8 +68,8 @@
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
#ifndef OPENSSL_NO_EC
DSA
#include <openssl/ec
dsa
.h>
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
EVP_PKEY
*
d2i_PrivateKey
(
int
type
,
EVP_PKEY
**
a
,
unsigned
char
**
pp
,
...
...
@@ -111,9 +111,9 @@ EVP_PKEY *d2i_PrivateKey(int type, EVP_PKEY **a, unsigned char **pp,
}
break
;
#endif
#ifndef OPENSSL_NO_EC
DSA
case
EVP_PKEY_EC
DSA
:
if
((
ret
->
pkey
.
ec
dsa
=
d2i_ECDSA
PrivateKey
(
NULL
,
#ifndef OPENSSL_NO_EC
case
EVP_PKEY_EC
:
if
((
ret
->
pkey
.
ec
key
=
d2i_EC
PrivateKey
(
NULL
,
(
const
unsigned
char
**
)
pp
,
length
))
==
NULL
)
{
ASN1err
(
ASN1_F_D2I_PRIVATEKEY
,
ERR_R_ASN1_LIB
);
...
...
@@ -154,7 +154,7 @@ EVP_PKEY *d2i_AutoPrivateKey(EVP_PKEY **a, unsigned char **pp,
if
(
sk_ASN1_TYPE_num
(
inkey
)
==
6
)
keytype
=
EVP_PKEY_DSA
;
else
if
(
sk_ASN1_TYPE_num
(
inkey
)
==
4
)
keytype
=
EVP_PKEY_EC
DSA
;
keytype
=
EVP_PKEY_EC
;
else
keytype
=
EVP_PKEY_RSA
;
sk_ASN1_TYPE_pop_free
(
inkey
,
ASN1_TYPE_free
);
return
d2i_PrivateKey
(
keytype
,
a
,
pp
,
length
);
...
...
crypto/asn1/d2i_pu.c
浏览文件 @
14a7cfb3
...
...
@@ -68,8 +68,8 @@
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
#ifndef OPENSSL_NO_EC
DSA
#include <openssl/ec
dsa
.h>
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
EVP_PKEY
*
d2i_PublicKey
(
int
type
,
EVP_PKEY
**
a
,
unsigned
char
**
pp
,
...
...
@@ -111,10 +111,11 @@ EVP_PKEY *d2i_PublicKey(int type, EVP_PKEY **a, unsigned char **pp,
}
break
;
#endif
#ifndef OPENSSL_NO_ECDSA
case
EVP_PKEY_ECDSA
:
if
((
ret
->
pkey
.
ecdsa
=
ECDSAPublicKey_set_octet_string
(
&
(
ret
->
pkey
.
ecdsa
),
(
const
unsigned
char
**
)
pp
,
length
))
==
NULL
)
#ifndef OPENSSL_NO_EC
case
EVP_PKEY_EC
:
if
((
ret
->
pkey
.
eckey
=
ECPublicKey_set_octet_string
(
&
(
ret
->
pkey
.
eckey
),
(
const
unsigned
char
**
)
pp
,
length
))
==
NULL
)
{
ASN1err
(
ASN1_F_D2I_PUBLICKEY
,
ERR_R_ASN1_LIB
);
goto
err
;
...
...
crypto/asn1/i2d_pr.c
浏览文件 @
14a7cfb3
...
...
@@ -67,8 +67,8 @@
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
#ifndef OPENSSL_NO_EC
DSA
#include <openssl/ec
dsa
.h>
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
int
i2d_PrivateKey
(
EVP_PKEY
*
a
,
unsigned
char
**
pp
)
...
...
@@ -86,10 +86,10 @@ int i2d_PrivateKey(EVP_PKEY *a, unsigned char **pp)
return
(
i2d_DSAPrivateKey
(
a
->
pkey
.
dsa
,
pp
));
}
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
a
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
if
(
a
->
type
==
EVP_PKEY_EC
)
{
return
(
i2d_EC
DSAPrivateKey
(
a
->
pkey
.
ecdsa
,
pp
));
return
(
i2d_EC
PrivateKey
(
a
->
pkey
.
eckey
,
pp
));
}
#endif
...
...
crypto/asn1/i2d_pu.c
浏览文件 @
14a7cfb3
...
...
@@ -67,8 +67,8 @@
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
#ifndef OPENSSL_NO_EC
DSA
#include <openssl/ec
dsa
.h>
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
int
i2d_PublicKey
(
EVP_PKEY
*
a
,
unsigned
char
**
pp
)
...
...
@@ -83,9 +83,9 @@ int i2d_PublicKey(EVP_PKEY *a, unsigned char **pp)
case
EVP_PKEY_DSA
:
return
(
i2d_DSAPublicKey
(
a
->
pkey
.
dsa
,
pp
));
#endif
#ifndef OPENSSL_NO_EC
DSA
case
EVP_PKEY_EC
DSA
:
return
(
EC
DSAPublicKey_get_octet_string
(
a
->
pkey
.
ecdsa
,
pp
));
#ifndef OPENSSL_NO_EC
case
EVP_PKEY_EC
:
return
(
EC
PublicKey_get_octet_string
(
a
->
pkey
.
eckey
,
pp
));
#endif
default:
ASN1err
(
ASN1_F_I2D_PUBLICKEY
,
ASN1_R_UNSUPPORTED_PUBLIC_KEY_TYPE
);
...
...
crypto/asn1/t_pkey.c
浏览文件 @
14a7cfb3
...
...
@@ -70,8 +70,8 @@
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
#ifndef OPENSSL_NO_EC
DSA
#include <openssl/ec
dsa
.h>
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
static
int
print
(
BIO
*
fp
,
const
char
*
str
,
BIGNUM
*
num
,
...
...
@@ -257,6 +257,22 @@ int ECPKParameters_print_fp(FILE *fp, const EC_GROUP *x, int off)
BIO_free
(
b
);
return
(
ret
);
}
int
EC_KEY_print_fp
(
FILE
*
fp
,
const
EC_KEY
*
x
,
int
off
)
{
BIO
*
b
;
int
ret
;
if
((
b
=
BIO_new
(
BIO_s_file
()))
==
NULL
)
{
ECerr
(
EC_F_EC_KEY_PRINT_FP
,
ERR_R_BIO_LIB
);
return
(
0
);
}
BIO_set_fp
(
b
,
fp
,
BIO_NOCLOSE
);
ret
=
EC_KEY_print
(
b
,
x
,
off
);
BIO_free
(
b
);
return
(
ret
);
}
#endif
int
ECPKParameters_print
(
BIO
*
bp
,
const
EC_GROUP
*
x
,
int
off
)
...
...
@@ -436,29 +452,8 @@ err:
OPENSSL_free
(
buffer
);
return
(
ret
);
}
#endif
/* OPENSSL_NO_EC */
#ifndef OPENSSL_NO_ECDSA
#ifndef OPENSSL_NO_FP_API
int
ECDSA_print_fp
(
FILE
*
fp
,
const
ECDSA
*
x
,
int
off
)
{
BIO
*
b
;
int
ret
;
if
((
b
=
BIO_new
(
BIO_s_file
()))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_PRINT_FP
,
ERR_R_BIO_LIB
);
return
(
0
);
}
BIO_set_fp
(
b
,
fp
,
BIO_NOCLOSE
);
ret
=
ECDSA_print
(
b
,
x
,
off
);
BIO_free
(
b
);
return
(
ret
);
}
#endif
int
EC
DSA_print
(
BIO
*
bp
,
const
ECDSA
*
x
,
int
off
)
int
EC
_KEY_print
(
BIO
*
bp
,
const
EC_KEY
*
x
,
int
off
)
{
char
str
[
128
];
unsigned
char
*
buffer
=
NULL
;
...
...
@@ -474,7 +469,7 @@ int ECDSA_print(BIO *bp, const ECDSA *x, int off)
}
if
((
pub_key
=
EC_POINT_point2bn
(
x
->
group
,
x
->
pub_key
,
ECDSA_get_conversion_form
(
x
)
,
NULL
,
ctx
))
==
NULL
)
x
->
conv_form
,
NULL
,
ctx
))
==
NULL
)
{
reason
=
ERR_R_EC_LIB
;
goto
err
;
...
...
@@ -516,7 +511,7 @@ int ECDSA_print(BIO *bp, const ECDSA *x, int off)
ret
=
1
;
err:
if
(
!
ret
)
EC
DSAerr
(
ECDSA_F_ECDSA
_PRINT
,
reason
);
EC
err
(
EC_F_EC_KEY
_PRINT
,
reason
);
if
(
pub_key
)
BN_free
(
pub_key
);
if
(
ctx
)
...
...
@@ -525,7 +520,7 @@ err:
OPENSSL_free
(
buffer
);
return
(
ret
);
}
#endif
#endif
/* OPENSSL_NO_EC */
static
int
print
(
BIO
*
bp
,
const
char
*
number
,
BIGNUM
*
num
,
unsigned
char
*
buf
,
int
off
)
...
...
@@ -690,26 +685,26 @@ err:
#endif
/* !OPENSSL_NO_DSA */
#ifndef OPENSSL_NO_EC
DSA
#ifndef OPENSSL_NO_EC
#ifndef OPENSSL_NO_FP_API
int
EC
DSAParameters_print_fp
(
FILE
*
fp
,
const
ECDSA
*
x
)
int
EC
Parameters_print_fp
(
FILE
*
fp
,
const
EC_KEY
*
x
)
{
BIO
*
b
;
int
ret
;
if
((
b
=
BIO_new
(
BIO_s_file
()))
==
NULL
)
{
EC
DSAerr
(
ECDSA_F_ECDSA
PARAMETERS_PRINT_FP
,
ERR_R_BIO_LIB
);
{
EC
err
(
EC_F_EC
PARAMETERS_PRINT_FP
,
ERR_R_BIO_LIB
);
return
(
0
);
}
}
BIO_set_fp
(
b
,
fp
,
BIO_NOCLOSE
);
ret
=
EC
DSA
Parameters_print
(
b
,
x
);
ret
=
ECParameters_print
(
b
,
x
);
BIO_free
(
b
);
return
(
ret
);
}
#endif
int
EC
DSAParameters_print
(
BIO
*
bp
,
const
ECDSA
*
x
)
int
EC
Parameters_print
(
BIO
*
bp
,
const
EC_KEY
*
x
)
{
int
reason
=
ERR_R_EC_LIB
,
ret
=
0
;
BIGNUM
*
order
=
NULL
;
...
...
@@ -741,7 +736,7 @@ int ECDSAParameters_print(BIO *bp, const ECDSA *x)
err:
if
(
order
)
BN_free
(
order
);
EC
DSAerr
(
ECDSA_F_ECDSA
PARAMETERS_PRINT
,
reason
);
EC
err
(
EC_F_EC
PARAMETERS_PRINT
,
reason
);
return
(
ret
);
}
...
...
crypto/asn1/t_req.c
浏览文件 @
14a7cfb3
...
...
@@ -134,11 +134,11 @@ int X509_REQ_print(BIO *bp, X509_REQ *x)
}
else
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
pkey
!=
NULL
&&
pkey
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
if
(
pkey
!=
NULL
&&
pkey
->
type
==
EVP_PKEY_EC
)
{
BIO_printf
(
bp
,
"%12sEC
DSA
Public Key:
\n
"
,
""
);
EC
DSA_print
(
bp
,
pkey
->
pkey
.
ecdsa
,
16
);
BIO_printf
(
bp
,
"%12sEC Public Key:
\n
"
,
""
);
EC
_KEY_print
(
bp
,
pkey
->
pkey
.
eckey
,
16
);
}
else
#endif
...
...
crypto/asn1/t_spki.c
浏览文件 @
14a7cfb3
...
...
@@ -93,11 +93,11 @@ int NETSCAPE_SPKI_print(BIO *out, NETSCAPE_SPKI *spki)
}
else
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
pkey
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
if
(
pkey
->
type
==
EVP_PKEY_EC
)
{
BIO_printf
(
out
,
" EC
DSA
Public Key:
\n
"
);
EC
DSA_print
(
out
,
pkey
->
pkey
.
ecdsa
,
2
);
BIO_printf
(
out
,
" EC Public Key:
\n
"
);
EC
_KEY_print
(
out
,
pkey
->
pkey
.
eckey
,
2
);
}
else
#endif
...
...
crypto/asn1/t_x509.c
浏览文件 @
14a7cfb3
...
...
@@ -66,8 +66,8 @@
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
#ifndef OPENSSL_NO_EC
DSA
#include <openssl/ec
dsa
.h>
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
#include <openssl/objects.h>
#include <openssl/x509.h>
...
...
@@ -232,11 +232,11 @@ int X509_print_ex(BIO *bp, X509 *x, unsigned long nmflags, unsigned long cflag)
}
else
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
pkey
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
if
(
pkey
->
type
==
EVP_PKEY_EC
)
{
BIO_printf
(
bp
,
"%12sEC
DSA
Public Key:
\n
"
,
""
);
EC
DSA_print
(
bp
,
pkey
->
pkey
.
ecdsa
,
16
);
BIO_printf
(
bp
,
"%12sEC Public Key:
\n
"
,
""
);
EC
_KEY_print
(
bp
,
pkey
->
pkey
.
eckey
,
16
);
}
else
#endif
...
...
crypto/asn1/x_pubkey.c
浏览文件 @
14a7cfb3
...
...
@@ -129,14 +129,14 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
OPENSSL_free
(
p
);
}
#endif
#ifndef OPENSSL_NO_EC
DSA
else
if
(
pkey
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
else
if
(
pkey
->
type
==
EVP_PKEY_EC
)
{
int
nid
=
0
;
unsigned
char
*
pp
;
EC
DSA
*
ecdsa
;
EC
_KEY
*
eckey
;
ec
dsa
=
pkey
->
pkey
.
ecdsa
;
ec
key
=
pkey
->
pkey
.
eckey
;
ASN1_TYPE_free
(
a
->
parameter
);
if
((
a
->
parameter
=
ASN1_TYPE_new
())
==
NULL
)
...
...
@@ -145,8 +145,8 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
goto
err
;
}
if
(
EC_GROUP_get_asn1_flag
(
ec
dsa
->
group
)
&&
(
nid
=
EC_GROUP_get_nid
(
ec
dsa
->
group
)))
if
(
EC_GROUP_get_asn1_flag
(
ec
key
->
group
)
&&
(
nid
=
EC_GROUP_get_nid
(
ec
key
->
group
)))
{
/* just set the OID */
a
->
parameter
->
type
=
V_ASN1_OBJECT
;
...
...
@@ -154,9 +154,9 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
}
else
/* explicit parameters */
{
if
((
i
=
i2d_EC
DSAParameters
(
ecdsa
,
NULL
))
==
0
)
if
((
i
=
i2d_EC
Parameters
(
eckey
,
NULL
))
==
0
)
{
X509err
(
X509_F_X509_PUBKEY_SET
,
ERR_R_EC
DSA
_LIB
);
X509err
(
X509_F_X509_PUBKEY_SET
,
ERR_R_EC_LIB
);
goto
err
;
}
if
((
p
=
(
unsigned
char
*
)
OPENSSL_malloc
(
i
))
==
NULL
)
...
...
@@ -165,9 +165,9 @@ int X509_PUBKEY_set(X509_PUBKEY **x, EVP_PKEY *pkey)
goto
err
;
}
pp
=
p
;
if
(
!
i2d_EC
DSAParameters
(
ecdsa
,
&
pp
))
if
(
!
i2d_EC
Parameters
(
eckey
,
&
pp
))
{
X509err
(
X509_F_X509_PUBKEY_SET
,
ERR_R_EC
DSA
_LIB
);
X509err
(
X509_F_X509_PUBKEY_SET
,
ERR_R_EC_LIB
);
OPENSSL_free
(
p
);
goto
err
;
}
...
...
@@ -277,24 +277,25 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
ret
->
save_parameters
=
1
;
}
#endif
#ifndef OPENSSL_NO_EC
DSA
else
if
(
ret
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
else
if
(
ret
->
type
==
EVP_PKEY_EC
)
{
if
(
a
->
parameter
&&
(
a
->
parameter
->
type
==
V_ASN1_SEQUENCE
))
{
/* type == V_ASN1_SEQUENCE => we have explicit parameters
* (e.g. parameters in the X9_62_EC_PARAMETERS-structure )
*/
if
((
ret
->
pkey
.
ec
dsa
=
ECDSA
_new
())
==
NULL
)
if
((
ret
->
pkey
.
ec
key
=
EC_KEY
_new
())
==
NULL
)
{
X509err
(
X509_F_X509_PUBKEY_GET
,
ERR_R_MALLOC_FAILURE
);
X509err
(
X509_F_X509_PUBKEY_GET
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
cp
=
p
=
a
->
parameter
->
value
.
sequence
->
data
;
j
=
a
->
parameter
->
value
.
sequence
->
length
;
if
(
!
d2i_EC
DSAParameters
(
&
ret
->
pkey
.
ecdsa
,
&
cp
,
(
long
)
j
))
if
(
!
d2i_EC
Parameters
(
&
ret
->
pkey
.
eckey
,
&
cp
,
(
long
)
j
))
{
X509err
(
X509_F_X509_PUBKEY_GET
,
ERR_R_EC
DSA
_LIB
);
X509err
(
X509_F_X509_PUBKEY_GET
,
ERR_R_EC_LIB
);
goto
err
;
}
}
...
...
@@ -303,16 +304,16 @@ EVP_PKEY *X509_PUBKEY_get(X509_PUBKEY *key)
/* type == V_ASN1_OBJECT => the parameters are given
* by an asn1 OID
*/
EC
DSA
*
ecdsa
;
if
(
ret
->
pkey
.
ec
dsa
==
NULL
)
ret
->
pkey
.
ec
dsa
=
ECDSA
_new
();
ec
dsa
=
ret
->
pkey
.
ecdsa
;
if
(
ec
dsa
->
group
)
EC_GROUP_free
(
ec
dsa
->
group
);
if
((
ec
dsa
->
group
=
EC_GROUP_new_by_name
(
EC
_KEY
*
eckey
;
if
(
ret
->
pkey
.
ec
key
==
NULL
)
ret
->
pkey
.
ec
key
=
EC_KEY
_new
();
ec
key
=
ret
->
pkey
.
eckey
;
if
(
ec
key
->
group
)
EC_GROUP_free
(
ec
key
->
group
);
if
((
ec
key
->
group
=
EC_GROUP_new_by_nid
(
OBJ_obj2nid
(
a
->
parameter
->
value
.
object
)))
==
NULL
)
goto
err
;
EC_GROUP_set_asn1_flag
(
ec
dsa
->
group
,
EC_GROUP_set_asn1_flag
(
ec
key
->
group
,
OPENSSL_EC_NAMED_CURVE
);
}
/* the case implicitlyCA is currently not implemented */
...
...
@@ -453,38 +454,38 @@ int i2d_DSA_PUBKEY(DSA *a, unsigned char **pp)
}
#endif
#ifndef OPENSSL_NO_EC
DSA
EC
DSA
*
d2i_ECDSA_PUBKEY
(
ECDSA
**
a
,
unsigned
char
**
pp
,
long
length
)
#ifndef OPENSSL_NO_EC
EC
_KEY
*
d2i_EC_PUBKEY
(
EC_KEY
**
a
,
unsigned
char
**
pp
,
long
length
)
{
EVP_PKEY
*
pkey
;
EC
DSA
*
key
;
EC
_KEY
*
key
;
unsigned
char
*
q
;
q
=
*
pp
;
pkey
=
d2i_PUBKEY
(
NULL
,
&
q
,
length
);
if
(
!
pkey
)
return
(
NULL
);
key
=
EVP_PKEY_get1_EC
DSA
(
pkey
);
key
=
EVP_PKEY_get1_EC
_KEY
(
pkey
);
EVP_PKEY_free
(
pkey
);
if
(
!
key
)
return
(
NULL
);
*
pp
=
q
;
if
(
a
)
{
EC
DSA
_free
(
*
a
);
EC
_KEY
_free
(
*
a
);
*
a
=
key
;
}
return
(
key
);
}
int
i2d_EC
DSA_PUBKEY
(
ECDSA
*
a
,
unsigned
char
**
pp
)
int
i2d_EC
_PUBKEY
(
EC_KEY
*
a
,
unsigned
char
**
pp
)
{
EVP_PKEY
*
pktmp
;
int
ret
;
if
(
!
a
)
return
(
0
);
if
((
pktmp
=
EVP_PKEY_new
())
==
NULL
)
{
ASN1err
(
ASN1_F_I2D_EC
DSA
_PUBKEY
,
ERR_R_MALLOC_FAILURE
);
ASN1err
(
ASN1_F_I2D_EC_PUBKEY
,
ERR_R_MALLOC_FAILURE
);
return
(
0
);
}
EVP_PKEY_set1_EC
DSA
(
pktmp
,
a
);
EVP_PKEY_set1_EC
_KEY
(
pktmp
,
a
);
ret
=
i2d_PUBKEY
(
pktmp
,
pp
);
EVP_PKEY_free
(
pktmp
);
return
(
ret
);
...
...
crypto/ec/Makefile.ssl
浏览文件 @
14a7cfb3
...
...
@@ -23,12 +23,12 @@ TEST=ectest.c
APPS
=
LIB
=
$(TOP)
/libcrypto.a
LIBSRC
=
ec_lib.c ecp_smpl.c ecp_mont.c ecp_recp.c ecp_nist.c ec_cvt.c ec_mult.c
\
ec_err.c ec_curve.c ec_check.c ec_print.c ec_asn1.c
\
LIBSRC
=
ec_lib.c ecp_smpl.c ecp_mont.c ecp_recp.c ecp_nist.c ec_cvt.c ec_mult.c
\
ec_err.c ec_curve.c ec_check.c ec_print.c ec_asn1.c
ec_key.c
\
ec2_smpl.c ec2_smpt.c ec2_mult.c
LIBOBJ
=
ec_lib.o ecp_smpl.o ecp_mont.o ecp_recp.o ecp_nist.o ec_cvt.o ec_mult.o
\
ec_err.o ec_curve.o ec_check.o ec_print.o ec_asn1.o
\
LIBOBJ
=
ec_lib.o ecp_smpl.o ecp_mont.o ecp_recp.o ecp_nist.o ec_cvt.o ec_mult.o
\
ec_err.o ec_curve.o ec_check.o ec_print.o ec_asn1.o
ec_key.o
\
ec2_smpl.o ec2_mult.o
SRC
=
$(LIBSRC)
...
...
@@ -142,6 +142,14 @@ ec_err.o: ../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
ec_err.o
:
../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
ec_err.o
:
../../include/openssl/stack.h ../../include/openssl/symhacks.h
ec_err.o
:
ec_err.c
ec_key.o
:
../../include/openssl/asn1.h ../../include/openssl/bio.h
ec_key.o
:
../../include/openssl/bn.h ../../include/openssl/crypto.h
ec_key.o
:
../../include/openssl/e_os2.h ../../include/openssl/ec.h
ec_key.o
:
../../include/openssl/err.h ../../include/openssl/lhash.h
ec_key.o
:
../../include/openssl/obj_mac.h ../../include/openssl/opensslconf.h
ec_key.o
:
../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
ec_key.o
:
../../include/openssl/safestack.h ../../include/openssl/stack.h
ec_key.o
:
../../include/openssl/symhacks.h ec_key.c ec_lcl.h
ec_lib.o
:
../../include/openssl/asn1.h ../../include/openssl/bio.h
ec_lib.o
:
../../include/openssl/bn.h ../../include/openssl/crypto.h
ec_lib.o
:
../../include/openssl/e_os2.h ../../include/openssl/ec.h
...
...
crypto/ec/ec.h
浏览文件 @
14a7cfb3
...
...
@@ -334,21 +334,8 @@ int EC_GROUP_precompute_mult(EC_GROUP *, BN_CTX *);
/* ASN1 stuff */
#define OPENSSL_EC_NAMED_CURVE 0x001
typedef
struct
ec_parameters_st
ECPARAMETERS
;
typedef
struct
ecpk_parameters_st
ECPKPARAMETERS
;
DECLARE_ASN1_ITEM
(
ECPARAMETERS
)
DECLARE_ASN1_ITEM
(
ECPKPARAMETERS
)
DECLARE_ASN1_ENCODE_FUNCTIONS_const
(
ECPARAMETERS
,
ECPARAMETERS
)
DECLARE_ASN1_ENCODE_FUNCTIONS_const
(
ECPKPARAMETERS
,
ECPKPARAMETERS
)
EC_GROUP
*
EC_ASN1_pkparameters2group
(
const
ECPKPARAMETERS
*
);
ECPKPARAMETERS
*
EC_ASN1_group2pkparameters
(
const
EC_GROUP
*
,
ECPKPARAMETERS
*
);
EC_GROUP
*
d2i_ECParameters
(
EC_GROUP
**
,
const
unsigned
char
**
in
,
long
len
);
int
i2d_ECParameters
(
const
EC_GROUP
*
,
unsigned
char
**
out
);
EC_GROUP
*
d2i_ECPKParameters
(
EC_GROUP
**
,
const
unsigned
char
**
in
,
long
len
);
int
i2d_ECPKParameters
(
const
EC_GROUP
*
,
unsigned
char
**
out
);
...
...
@@ -368,18 +355,65 @@ int ECPKParameters_print(BIO *bp, const EC_GROUP *x, int off);
int
ECPKParameters_print_fp
(
FILE
*
fp
,
const
EC_GROUP
*
x
,
int
off
);
#endif
/* SEC1 ECPrivateKey */
typedef
struct
ec_privatekey_st
{
int
version
;
ASN1_OCTET_STRING
*
privateKey
;
ECPKPARAMETERS
*
parameters
;
ASN1_BIT_STRING
*
publicKey
;
}
EC_PRIVATEKEY
;
/* the EC_KEY stuff */
typedef
struct
ec_key_st
EC_KEY
;
typedef
struct
ec_key_meth_data_st
{
int
(
*
init
)(
EC_KEY
*
);
void
(
*
finish
)(
EC_KEY
*
);
}
EC_KEY_METH_DATA
;
struct
ec_key_st
{
int
version
;
EC_GROUP
*
group
;
EC_POINT
*
pub_key
;
BIGNUM
*
priv_key
;
unsigned
int
enc_flag
;
point_conversion_form_t
conv_form
;
int
references
;
DECLARE_ASN1_ITEM
(
EC_PRIVATEKEY
)
DECLARE_ASN1_FUNCTIONS_const
(
EC_PRIVATEKEY
)
DECLARE_ASN1_ENCODE_FUNCTIONS_const
(
EC_PRIVATEKEY
,
EC_PRIVATEKEY
)
EC_KEY_METH_DATA
*
meth_data
;
}
/* EC_KEY */
;
/* some values for the encoding_flag */
#define EC_PKEY_NO_PARAMETERS 0x001
#define EC_PKEY_NO_PUBKEY 0x002
EC_KEY
*
EC_KEY_new
(
void
);
void
EC_KEY_free
(
EC_KEY
*
);
EC_KEY
*
EC_KEY_copy
(
EC_KEY
*
,
const
EC_KEY
*
);
EC_KEY
*
EC_KEY_dup
(
const
EC_KEY
*
);
/* EC_KEY_generate_key() creates a ec private (public) key */
int
EC_KEY_generate_key
(
EC_KEY
*
);
/* EC_KEY_check_key() */
int
EC_KEY_check_key
(
const
EC_KEY
*
);
/* de- and encode functions for the SEC1 ECPrivateKey */
EC_KEY
*
d2i_ECPrivateKey
(
EC_KEY
**
a
,
const
unsigned
char
**
in
,
long
len
);
int
i2d_ECPrivateKey
(
EC_KEY
*
a
,
unsigned
char
**
out
);
/* de- and encode functions for the elliptic curve parameters */
EC_KEY
*
d2i_ECParameters
(
EC_KEY
**
a
,
const
unsigned
char
**
in
,
long
len
);
int
i2d_ECParameters
(
EC_KEY
*
a
,
unsigned
char
**
out
);
EC_KEY
*
ECPublicKey_set_octet_string
(
EC_KEY
**
a
,
const
unsigned
char
**
in
,
long
len
);
int
ECPublicKey_get_octet_string
(
EC_KEY
*
a
,
unsigned
char
**
out
);
#ifndef OPENSSL_NO_BIO
int
ECParameters_print
(
BIO
*
bp
,
const
EC_KEY
*
x
);
int
EC_KEY_print
(
BIO
*
bp
,
const
EC_KEY
*
x
,
int
off
);
#endif
#ifndef OPENSSL_NO_FP_API
int
ECParameters_print_fp
(
FILE
*
fp
,
const
EC_KEY
*
x
);
int
EC_KEY_print_fp
(
FILE
*
fp
,
const
EC_KEY
*
x
,
int
off
);
#endif
#define ECParameters_dup(x) (EC_KEY *)ASN1_dup((int (*)())i2d_ECParameters,\
(char *(*)())d2i_ECParameters,(char *)(x))
/* BEGIN ERROR CODES */
/* The following lines are auto generated by the script mkerr.pl. Any changes
...
...
@@ -391,11 +425,15 @@ void ERR_load_EC_strings(void);
/* Function codes. */
#define EC_F_COMPUTE_WNAF 143
#define EC_F_D2I_ECDSAPARAMETERS 154
#define EC_F_D2I_ECPARAMETERS 155
#define EC_F_D2I_ECPKPARAMETERS 161
#define EC_F_D2I_ECPRIVATEKEY 168
#define EC_F_ECPARAMETERS_PRINT 173
#define EC_F_ECPARAMETERS_PRINT_FP 174
#define EC_F_ECPKPARAMETERS_PRINT 166
#define EC_F_ECPKPARAMETERS_PRINT_FP 167
#define EC_F_ECPUBLICKEY_GET_OCTET 170
#define EC_F_ECPUBLICKEY_SET_OCTET 171
#define EC_F_EC_ASN1_GROUP2CURVE 159
#define EC_F_EC_ASN1_GROUP2FIELDID 156
#define EC_F_EC_ASN1_GROUP2PARAMETERS 160
...
...
@@ -419,9 +457,9 @@ void ERR_load_EC_strings(void);
#define EC_F_EC_GFP_SIMPLE_OCT2POINT 103
#define EC_F_EC_GFP_SIMPLE_POINT2OCT 104
#define EC_F_EC_GFP_SIMPLE_POINTS_MAKE_AFFINE 137
#define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES 105
#define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES 128
#define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES 129
#define EC_F_EC_GFP_SIMPLE_POINT_GET_AFFINE_COORDINATES
105
#define EC_F_EC_GFP_SIMPLE_POINT_SET_AFFINE_COORDINATES
128
#define EC_F_EC_GFP_SIMPLE_SET_COMPRESSED_COORDINATES
129
#define EC_F_EC_GROUP_CHECK 150
#define EC_F_EC_GROUP_CHECK_DISCRIMINANT 153
#define EC_F_EC_GROUP_COPY 106
...
...
@@ -443,6 +481,12 @@ void ERR_load_EC_strings(void);
#define EC_F_EC_GROUP_SET_CURVE_GFP 109
#define EC_F_EC_GROUP_SET_EXTRA_DATA 110
#define EC_F_EC_GROUP_SET_GENERATOR 111
#define EC_F_EC_KEY_CHECK_KEY 184
#define EC_F_EC_KEY_COPY 186
#define EC_F_EC_KEY_GENERATE_KEY 185
#define EC_F_EC_KEY_PRINT 175
#define EC_F_EC_KEY_PRINT_FP 176
#define EC_F_EC_NEW 172
#define EC_F_EC_POINTS_MAKE_AFFINE 136
#define EC_F_EC_POINTS_MUL 138
#define EC_F_EC_POINT_ADD 112
...
...
@@ -471,6 +515,7 @@ void ERR_load_EC_strings(void);
#define EC_F_I2D_ECDSAPARAMETERS 158
#define EC_F_I2D_ECPARAMETERS 164
#define EC_F_I2D_ECPKPARAMETERS 165
#define EC_F_I2D_ECPRIVATEKEY 169
/* Reason codes. */
#define EC_R_ASN1_ERROR 130
...
...
@@ -493,7 +538,9 @@ void ERR_load_EC_strings(void);
#define EC_R_INVALID_FIELD 103
#define EC_R_INVALID_FORM 104
#define EC_R_INVALID_GROUP_ORDER 119
#define EC_R_INVALID_PRIVATE_KEY 139
#define EC_R_MISSING_PARAMETERS 127
#define EC_R_MISSING_PRIVATE_KEY 138
#define EC_R_NOT_IMPLEMENTED 136
#define EC_R_NOT_INITIALIZED 111
#define EC_R_NO_SUCH_EXTRA_DATA 105
...
...
@@ -508,6 +555,7 @@ void ERR_load_EC_strings(void);
#define EC_R_UNKNOWN_NID 117
#define EC_R_UNKNOWN_ORDER 114
#define EC_R_UNKNOWN_PARAMETERS_TYPE 129
#define EC_R_WRONG_ORDER 140
#ifdef __cplusplus
}
...
...
crypto/ec/ec_asn1.c
浏览文件 @
14a7cfb3
...
...
@@ -82,14 +82,14 @@ typedef struct x9_62_curve_st {
ASN1_BIT_STRING
*
seed
;
}
X9_62_CURVE
;
struct
ec_parameters_st
{
typedef
struct
ec_parameters_st
{
ASN1_INTEGER
*
version
;
X9_62_FIELDID
*
fieldID
;
X9_62_CURVE
*
curve
;
ASN1_OCTET_STRING
*
base
;
ASN1_INTEGER
*
order
;
ASN1_INTEGER
*
cofactor
;
}
/* ECPARAMETERS */
;
}
ECPARAMETERS
;
struct
ecpk_parameters_st
{
int
type
;
...
...
@@ -100,6 +100,14 @@ struct ecpk_parameters_st {
}
value
;
}
/* ECPKPARAMETERS */
;
/* SEC1 ECPrivateKey */
typedef
struct
ec_privatekey_st
{
int
version
;
ASN1_OCTET_STRING
*
privateKey
;
ECPKPARAMETERS
*
parameters
;
ASN1_BIT_STRING
*
publicKey
;
}
EC_PRIVATEKEY
;
/* the OpenSSL asn1 definitions */
ASN1_SEQUENCE
(
X9_62_FIELDID
)
=
{
...
...
@@ -151,6 +159,7 @@ ASN1_SEQUENCE(ECPARAMETERS) = {
}
ASN1_SEQUENCE_END
(
ECPARAMETERS
)
DECLARE_ASN1_FUNCTIONS_const
(
ECPARAMETERS
)
DECLARE_ASN1_ENCODE_FUNCTIONS_const
(
ECPARAMETERS
,
ECPARAMETERS
)
IMPLEMENT_ASN1_FUNCTIONS_const
(
ECPARAMETERS
)
ASN1_CHOICE
(
ECPKPARAMETERS
)
=
{
...
...
@@ -160,15 +169,18 @@ ASN1_CHOICE(ECPKPARAMETERS) = {
}
ASN1_CHOICE_END
(
ECPKPARAMETERS
)
DECLARE_ASN1_FUNCTIONS_const
(
ECPKPARAMETERS
)
DECLARE_ASN1_ENCODE_FUNCTIONS_const
(
ECPKPARAMETERS
,
ECPKPARAMETERS
)
IMPLEMENT_ASN1_FUNCTIONS_const
(
ECPKPARAMETERS
)
ASN1_SEQUENCE
(
EC_PRIVATEKEY
)
=
{
ASN1_SIMPLE
(
EC_PRIVATEKEY
,
version
,
LONG
),
ASN1_SIMPLE
(
EC_PRIVATEKEY
,
privateKey
,
ASN1_OCTET_STRING
),
ASN1_
OPT
(
EC_PRIVATEKEY
,
parameters
,
ECPKPARAMETERS
),
ASN1_
OPT
(
EC_PRIVATEKEY
,
publicKey
,
ASN1_BIT_STRING
)
ASN1_
EXP_OPT
(
EC_PRIVATEKEY
,
parameters
,
ECPKPARAMETERS
,
0
),
ASN1_
EXP_OPT
(
EC_PRIVATEKEY
,
publicKey
,
ASN1_BIT_STRING
,
1
)
}
ASN1_SEQUENCE_END
(
EC_PRIVATEKEY
)
DECLARE_ASN1_FUNCTIONS_const
(
EC_PRIVATEKEY
)
DECLARE_ASN1_ENCODE_FUNCTIONS_const
(
EC_PRIVATEKEY
,
EC_PRIVATEKEY
)
IMPLEMENT_ASN1_FUNCTIONS_const
(
EC_PRIVATEKEY
)
/* some internal functions */
...
...
@@ -178,6 +190,8 @@ static X9_62_CURVE *ec_asn1_group2curve(const EC_GROUP *, X9_62_CURVE *);
static
EC_GROUP
*
ec_asn1_parameters2group
(
const
ECPARAMETERS
*
);
static
ECPARAMETERS
*
ec_asn1_group2parameters
(
const
EC_GROUP
*
,
ECPARAMETERS
*
);
EC_GROUP
*
EC_ASN1_pkparameters2group
(
const
ECPKPARAMETERS
*
);
ECPKPARAMETERS
*
EC_ASN1_group2pkparameters
(
const
EC_GROUP
*
,
ECPKPARAMETERS
*
);
static
X9_62_FIELDID
*
ec_asn1_group2field
(
const
EC_GROUP
*
group
,
X9_62_FIELDID
*
field
)
...
...
@@ -786,34 +800,7 @@ EC_GROUP *EC_ASN1_pkparameters2group(const ECPKPARAMETERS *params)
return
ret
;
}
/* EC_GROUP <-> DER encoding of EC[PK]PARAMETERS */
EC_GROUP
*
d2i_ECParameters
(
EC_GROUP
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
EC_GROUP
*
group
=
NULL
;
ECPARAMETERS
*
params
=
NULL
;
if
((
params
=
d2i_ECPARAMETERS
(
NULL
,
in
,
len
))
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPARAMETERS
,
EC_R_D2I_ECPARAMETERS_FAILURE
);
ECPARAMETERS_free
(
params
);
return
NULL
;
}
if
((
group
=
ec_asn1_parameters2group
(
params
))
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPARAMETERS
,
EC_R_PARAMETERS2GROUP_FAILURE
);
return
NULL
;
}
if
(
a
&&
*
a
)
EC_GROUP_clear_free
(
*
a
);
if
(
a
)
*
a
=
group
;
ECPARAMETERS_free
(
params
);
return
(
group
);
}
/* EC_GROUP <-> DER encoding of ECPKPARAMETERS */
EC_GROUP
*
d2i_ECPKParameters
(
EC_GROUP
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
...
...
@@ -843,40 +830,346 @@ EC_GROUP *d2i_ECPKParameters(EC_GROUP **a, const unsigned char **in, long len)
return
(
group
);
}
int
i2d_ECParameters
(
const
EC_GROUP
*
a
,
unsigned
char
**
out
)
int
i2d_ECP
KP
arameters
(
const
EC_GROUP
*
a
,
unsigned
char
**
out
)
{
int
ret
=
0
;
ECP
ARAMETERS
*
tmp
=
ec_asn1_group2
parameters
(
a
,
NULL
);
ECP
KPARAMETERS
*
tmp
=
EC_ASN1_group2pk
parameters
(
a
,
NULL
);
if
(
tmp
==
NULL
)
{
ECerr
(
EC_F_I2D_ECP
ARAMETERS
,
EC_R_GROUP2
PARAMETERS_FAILURE
);
ECerr
(
EC_F_I2D_ECP
KPARAMETERS
,
EC_R_GROUP2PK
PARAMETERS_FAILURE
);
return
0
;
}
if
((
ret
=
i2d_ECPARAMETERS
(
tmp
,
out
))
==
0
)
if
((
ret
=
i2d_ECP
KP
ARAMETERS
(
tmp
,
out
))
==
0
)
{
ECerr
(
EC_F_I2D_ECP
ARAMETERS
,
EC_R_I2D_EC_
PARAMETERS_FAILURE
);
ECPARAMETERS_free
(
tmp
);
ECerr
(
EC_F_I2D_ECP
KPARAMETERS
,
EC_R_I2D_ECPK
PARAMETERS_FAILURE
);
ECP
KP
ARAMETERS_free
(
tmp
);
return
0
;
}
ECPARAMETERS_free
(
tmp
);
ECP
KP
ARAMETERS_free
(
tmp
);
return
(
ret
);
}
int
i2d_ECPKParameters
(
const
EC_GROUP
*
a
,
unsigned
char
**
out
)
/* some EC_KEY functions */
EC_KEY
*
d2i_ECPrivateKey
(
EC_KEY
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
int
ret
=
0
;
ECPKPARAMETERS
*
tmp
=
EC_ASN1_group2pkparameters
(
a
,
NULL
);
if
(
tmp
==
NULL
)
int
ok
=
0
;
EC_KEY
*
ret
=
NULL
;
EC_PRIVATEKEY
*
priv_key
=
NULL
;
if
((
priv_key
=
EC_PRIVATEKEY_new
())
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPKPARAMETERS
,
EC_R_GROUP2PKPARAMETERS_FAILURE
);
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
return
NULL
;
}
if
((
priv_key
=
d2i_EC_PRIVATEKEY
(
&
priv_key
,
in
,
len
))
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
ERR_R_EC_LIB
);
EC_PRIVATEKEY_free
(
priv_key
);
return
NULL
;
}
if
(
a
==
NULL
||
*
a
==
NULL
)
{
if
((
ret
=
EC_KEY_new
())
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
if
(
a
)
*
a
=
ret
;
}
else
ret
=
*
a
;
if
(
priv_key
->
parameters
)
{
if
(
ret
->
group
)
EC_GROUP_clear_free
(
ret
->
group
);
ret
->
group
=
EC_ASN1_pkparameters2group
(
priv_key
->
parameters
);
}
if
(
ret
->
group
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
ret
->
version
=
priv_key
->
version
;
if
(
priv_key
->
privateKey
)
{
ret
->
priv_key
=
BN_bin2bn
(
M_ASN1_STRING_data
(
priv_key
->
privateKey
),
M_ASN1_STRING_length
(
priv_key
->
privateKey
),
ret
->
priv_key
);
if
(
ret
->
priv_key
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
ERR_R_BN_LIB
);
goto
err
;
}
}
else
{
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
EC_R_MISSING_PRIVATE_KEY
);
goto
err
;
}
if
(
priv_key
->
publicKey
)
{
if
(
ret
->
pub_key
)
EC_POINT_clear_free
(
ret
->
pub_key
);
ret
->
pub_key
=
EC_POINT_new
(
ret
->
group
);
if
(
ret
->
pub_key
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
EC_POINT_oct2point
(
ret
->
group
,
ret
->
pub_key
,
M_ASN1_STRING_data
(
priv_key
->
publicKey
),
M_ASN1_STRING_length
(
priv_key
->
publicKey
),
NULL
))
{
ECerr
(
EC_F_D2I_ECPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
}
ok
=
1
;
err:
if
(
!
ok
)
{
if
(
ret
)
EC_KEY_free
(
ret
);
ret
=
NULL
;
}
if
(
priv_key
)
EC_PRIVATEKEY_free
(
priv_key
);
return
(
ret
);
}
int
i2d_ECPrivateKey
(
EC_KEY
*
a
,
unsigned
char
**
out
)
{
int
ret
=
0
,
ok
=
0
;
unsigned
char
*
buffer
=
NULL
;
size_t
buf_len
=
0
,
tmp_len
;
EC_PRIVATEKEY
*
priv_key
=
NULL
;
if
(
a
==
NULL
||
a
->
group
==
NULL
||
a
->
priv_key
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_PASSED_NULL_PARAMETER
);
goto
err
;
}
if
((
priv_key
=
EC_PRIVATEKEY_new
())
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
priv_key
->
version
=
a
->
version
;
buf_len
=
(
size_t
)
BN_num_bytes
(
a
->
priv_key
);
buffer
=
OPENSSL_malloc
(
buf_len
);
if
(
buffer
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
if
(
!
BN_bn2bin
(
a
->
priv_key
,
buffer
))
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_BN_LIB
);
goto
err
;
}
if
(
!
M_ASN1_OCTET_STRING_set
(
priv_key
->
privateKey
,
buffer
,
buf_len
))
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_ASN1_LIB
);
goto
err
;
}
if
(
!
(
a
->
enc_flag
&
EC_PKEY_NO_PARAMETERS
))
{
if
((
priv_key
->
parameters
=
EC_ASN1_group2pkparameters
(
a
->
group
,
priv_key
->
parameters
))
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
}
if
(
!
(
a
->
enc_flag
&
EC_PKEY_NO_PUBKEY
))
{
priv_key
->
publicKey
=
M_ASN1_BIT_STRING_new
();
if
(
priv_key
->
publicKey
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
tmp_len
=
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
a
->
conv_form
,
NULL
,
0
,
NULL
);
if
(
tmp_len
>
buf_len
)
buffer
=
OPENSSL_realloc
(
buffer
,
tmp_len
);
if
(
buffer
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
buf_len
=
tmp_len
;
if
(
!
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
a
->
conv_form
,
buffer
,
buf_len
,
NULL
))
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
M_ASN1_BIT_STRING_set
(
priv_key
->
publicKey
,
buffer
,
buf_len
))
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_ASN1_LIB
);
goto
err
;
}
}
if
((
ret
=
i2d_EC_PRIVATEKEY
(
priv_key
,
out
))
==
0
)
{
ECerr
(
EC_F_I2D_ECPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
ok
=
1
;
err:
if
(
buffer
)
OPENSSL_free
(
buffer
);
if
(
priv_key
)
EC_PRIVATEKEY_free
(
priv_key
);
return
(
ok
?
ret
:
0
);
}
int
i2d_ECParameters
(
EC_KEY
*
a
,
unsigned
char
**
out
)
{
if
(
a
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPARAMETERS
,
ERR_R_PASSED_NULL_PARAMETER
);
return
0
;
}
if
((
ret
=
i2d_ECPKPARAMETERS
(
tmp
,
out
))
==
0
)
return
i2d_ECPKParameters
(
a
->
group
,
out
);
}
EC_KEY
*
d2i_ECParameters
(
EC_KEY
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
EC_GROUP
*
group
;
EC_KEY
*
ret
;
if
(
in
==
NULL
||
*
in
==
NULL
)
{
ECerr
(
EC_F_I2D_ECPKPARAMETERS
,
EC_R_I2D_ECPKPARAMETERS_FAILURE
);
ECPKPARAMETERS_free
(
tmp
);
ECerr
(
EC_F_D2I_ECPARAMETERS
,
ERR_R_PASSED_NULL_PARAMETER
);
return
NULL
;
}
group
=
d2i_ECPKParameters
(
NULL
,
in
,
len
);
if
(
group
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPARAMETERS
,
ERR_R_EC_LIB
);
return
NULL
;
}
if
(
a
==
NULL
||
*
a
==
NULL
)
{
if
((
ret
=
EC_KEY_new
())
==
NULL
)
{
ECerr
(
EC_F_D2I_ECPARAMETERS
,
ERR_R_MALLOC_FAILURE
);
return
NULL
;
}
if
(
a
)
*
a
=
ret
;
}
else
ret
=
*
a
;
if
(
ret
->
group
)
EC_GROUP_clear_free
(
ret
->
group
);
ret
->
group
=
group
;
return
ret
;
}
EC_KEY
*
ECPublicKey_set_octet_string
(
EC_KEY
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
EC_KEY
*
ret
=
NULL
;
if
(
a
==
NULL
||
(
*
a
)
==
NULL
||
(
*
a
)
->
group
==
NULL
)
{
/* sorry, but a EC_GROUP-structur is necessary
* to set the public key */
ECerr
(
EC_F_ECPUBLICKEY_SET_OCTET
,
ERR_R_PASSED_NULL_PARAMETER
);
return
0
;
}
ECPKPARAMETERS_free
(
tmp
);
return
(
ret
);
}
ret
=
*
a
;
if
(
ret
->
pub_key
==
NULL
&&
(
ret
->
pub_key
=
EC_POINT_new
(
ret
->
group
))
==
NULL
)
{
ECerr
(
EC_F_ECPUBLICKEY_SET_OCTET
,
ERR_R_MALLOC_FAILURE
);
return
0
;
}
if
(
!
EC_POINT_oct2point
(
ret
->
group
,
ret
->
pub_key
,
*
in
,
len
,
NULL
))
{
ECerr
(
EC_F_ECPUBLICKEY_SET_OCTET
,
ERR_R_EC_LIB
);
return
0
;
}
/* save the point conversion form */
ret
->
conv_form
=
(
point_conversion_form_t
)(
*
in
[
0
]
&
~
0x01
);
return
ret
;
}
int
ECPublicKey_get_octet_string
(
EC_KEY
*
a
,
unsigned
char
**
out
)
{
size_t
buf_len
=
0
;
if
(
a
==
NULL
)
{
ECerr
(
EC_F_ECPUBLICKEY_GET_OCTET
,
ERR_R_PASSED_NULL_PARAMETER
);
return
0
;
}
buf_len
=
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
a
->
conv_form
,
NULL
,
0
,
NULL
);
if
(
out
==
NULL
||
buf_len
==
0
)
/* out == NULL => just return the length of the octet string */
return
buf_len
;
if
(
*
out
==
NULL
)
if
((
*
out
=
OPENSSL_malloc
(
buf_len
))
==
NULL
)
{
ECerr
(
EC_F_ECPUBLICKEY_GET_OCTET
,
ERR_R_MALLOC_FAILURE
);
return
0
;
}
if
(
!
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
a
->
conv_form
,
*
out
,
buf_len
,
NULL
))
{
ECerr
(
EC_F_ECPUBLICKEY_GET_OCTET
,
ERR_R_EC_LIB
);
OPENSSL_free
(
*
out
);
*
out
=
NULL
;
return
0
;
}
return
buf_len
;
}
crypto/ec/ec_err.c
浏览文件 @
14a7cfb3
...
...
@@ -67,17 +67,21 @@
static
ERR_STRING_DATA
EC_str_functs
[]
=
{
{
ERR_PACK
(
0
,
EC_F_COMPUTE_WNAF
,
0
),
"COMPUTE_WNAF"
},
{
ERR_PACK
(
0
,
EC_F_D2I_ECDSAPARAMETERS
,
0
),
"d2i_ECDSAParameters"
},
{
ERR_PACK
(
0
,
EC_F_D2I_ECPARAMETERS
,
0
),
"d2i_ECParameters"
},
{
ERR_PACK
(
0
,
EC_F_D2I_ECPKPARAMETERS
,
0
),
"d2i_ECPKParameters"
},
{
ERR_PACK
(
0
,
EC_F_D2I_ECPRIVATEKEY
,
0
),
"d2i_ECPrivateKey"
},
{
ERR_PACK
(
0
,
EC_F_ECPARAMETERS_PRINT
,
0
),
"ECParameters_print"
},
{
ERR_PACK
(
0
,
EC_F_ECPARAMETERS_PRINT_FP
,
0
),
"ECParameters_print_fp"
},
{
ERR_PACK
(
0
,
EC_F_ECPKPARAMETERS_PRINT
,
0
),
"ECPKParameters_print"
},
{
ERR_PACK
(
0
,
EC_F_ECPKPARAMETERS_PRINT_FP
,
0
),
"ECPKParameters_print_fp"
},
{
ERR_PACK
(
0
,
EC_F_ECPUBLICKEY_GET_OCTET
,
0
),
"ECPUBLICKEY_GET_OCTET"
},
{
ERR_PACK
(
0
,
EC_F_ECPUBLICKEY_SET_OCTET
,
0
),
"ECPUBLICKEY_SET_OCTET"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_GROUP2CURVE
,
0
),
"EC_ASN1_GROUP2CURVE"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_GROUP2FIELDID
,
0
),
"EC_ASN1_GROUP2FIELDID"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_GROUP2PARAMETERS
,
0
),
"EC_ASN1_GROUP2PARAMETERS"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_GROUP2PKPARAMETERS
,
0
),
"EC_ASN1_
group2pkparameters
"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_GROUP2PKPARAMETERS
,
0
),
"EC_ASN1_
GROUP2PKPARAMETERS
"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_PARAMETERS2GROUP
,
0
),
"EC_ASN1_PARAMETERS2GROUP"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_PKPARAMETERS2GROUP
,
0
),
"EC_ASN1_
pkparameters2group
"
},
{
ERR_PACK
(
0
,
EC_F_EC_ASN1_PKPARAMETERS2GROUP
,
0
),
"EC_ASN1_
PKPARAMETERS2GROUP
"
},
{
ERR_PACK
(
0
,
EC_F_EC_GF2M_SIMPLE_GROUP_CHECK_DISCRIMINANT
,
0
),
"ec_GF2m_simple_group_check_discriminant"
},
{
ERR_PACK
(
0
,
EC_F_EC_GF2M_SIMPLE_OCT2POINT
,
0
),
"ec_GF2m_simple_oct2point"
},
{
ERR_PACK
(
0
,
EC_F_EC_GF2M_SIMPLE_POINT2OCT
,
0
),
"ec_GF2m_simple_point2oct"
},
...
...
@@ -119,12 +123,19 @@ static ERR_STRING_DATA EC_str_functs[]=
{
ERR_PACK
(
0
,
EC_F_EC_GROUP_SET_CURVE_GFP
,
0
),
"EC_GROUP_set_curve_GFp"
},
{
ERR_PACK
(
0
,
EC_F_EC_GROUP_SET_EXTRA_DATA
,
0
),
"EC_GROUP_set_extra_data"
},
{
ERR_PACK
(
0
,
EC_F_EC_GROUP_SET_GENERATOR
,
0
),
"EC_GROUP_set_generator"
},
{
ERR_PACK
(
0
,
EC_F_EC_KEY_CHECK_KEY
,
0
),
"EC_KEY_check_key"
},
{
ERR_PACK
(
0
,
EC_F_EC_KEY_COPY
,
0
),
"EC_KEY_copy"
},
{
ERR_PACK
(
0
,
EC_F_EC_KEY_GENERATE_KEY
,
0
),
"EC_KEY_generate_key"
},
{
ERR_PACK
(
0
,
EC_F_EC_KEY_PRINT
,
0
),
"EC_KEY_print"
},
{
ERR_PACK
(
0
,
EC_F_EC_KEY_PRINT_FP
,
0
),
"EC_KEY_print_fp"
},
{
ERR_PACK
(
0
,
EC_F_EC_NEW
,
0
),
"EC_NEW"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINTS_MAKE_AFFINE
,
0
),
"EC_POINTs_make_affine"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINTS_MUL
,
0
),
"EC_POINTs_mul"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_ADD
,
0
),
"EC_POINT_add"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_CMP
,
0
),
"EC_POINT_cmp"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_COPY
,
0
),
"EC_POINT_copy"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_DBL
,
0
),
"EC_POINT_dbl"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_GET_AFFINE_COORDINATES_GF2M
,
0
),
"EC_POINT_get_affine_coordinates_GF2m"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_GET_AFFINE_COORDINATES_GFP
,
0
),
"EC_POINT_get_affine_coordinates_GFp"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_GET_JPROJECTIVE_COORDINATES_GFP
,
0
),
"EC_POINT_get_Jprojective_coordinates_GFp"
},
{
ERR_PACK
(
0
,
EC_F_EC_POINT_IS_AT_INFINITY
,
0
),
"EC_POINT_is_at_infinity"
},
...
...
@@ -143,9 +154,10 @@ static ERR_STRING_DATA EC_str_functs[]=
{
ERR_PACK
(
0
,
EC_F_EC_WNAF_MUL
,
0
),
"ec_wNAF_mul"
},
{
ERR_PACK
(
0
,
EC_F_EC_WNAF_PRECOMPUTE_MULT
,
0
),
"ec_wNAF_precompute_mult"
},
{
ERR_PACK
(
0
,
EC_F_GFP_MONT_GROUP_SET_CURVE
,
0
),
"GFP_MONT_GROUP_SET_CURVE"
},
{
ERR_PACK
(
0
,
EC_F_I2D_ECDSAPARAMETERS
,
0
),
"
i2d_ECDSAParameters
"
},
{
ERR_PACK
(
0
,
EC_F_I2D_ECDSAPARAMETERS
,
0
),
"
I2D_ECDSAPARAMETERS
"
},
{
ERR_PACK
(
0
,
EC_F_I2D_ECPARAMETERS
,
0
),
"i2d_ECParameters"
},
{
ERR_PACK
(
0
,
EC_F_I2D_ECPKPARAMETERS
,
0
),
"i2d_ECPKParameters"
},
{
ERR_PACK
(
0
,
EC_F_I2D_ECPRIVATEKEY
,
0
),
"i2d_ECPrivateKey"
},
{
0
,
NULL
}
};
...
...
@@ -171,7 +183,9 @@ static ERR_STRING_DATA EC_str_reasons[]=
{
EC_R_INVALID_FIELD
,
"invalid field"
},
{
EC_R_INVALID_FORM
,
"invalid form"
},
{
EC_R_INVALID_GROUP_ORDER
,
"invalid group order"
},
{
EC_R_INVALID_PRIVATE_KEY
,
"invalid private key"
},
{
EC_R_MISSING_PARAMETERS
,
"missing parameters"
},
{
EC_R_MISSING_PRIVATE_KEY
,
"missing private key"
},
{
EC_R_NOT_IMPLEMENTED
,
"not implemented"
},
{
EC_R_NOT_INITIALIZED
,
"not initialized"
},
{
EC_R_NO_SUCH_EXTRA_DATA
,
"no such extra data"
},
...
...
@@ -186,6 +200,7 @@ static ERR_STRING_DATA EC_str_reasons[]=
{
EC_R_UNKNOWN_NID
,
"unknown nid"
},
{
EC_R_UNKNOWN_ORDER
,
"unknown order"
},
{
EC_R_UNKNOWN_PARAMETERS_TYPE
,
"unknown parameters type"
},
{
EC_R_WRONG_ORDER
,
"wrong order"
},
{
0
,
NULL
}
};
...
...
crypto/ec
dsa/ecs
_key.c
→
crypto/ec
/ec
_key.c
浏览文件 @
14a7cfb3
/* crypto/ecdsa/ecs_key.c */
/* crypto/ec/ec_key.c */
/*
* Written by Nils Larsch for the OpenSSL project.
*/
/* ====================================================================
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
*
...
...
@@ -17,12 +20,12 @@
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.
OpenSSL
.org/)"
* for use in the OpenSSL Toolkit. (http://www.
openssl
.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@
OpenSSL
.org.
* openssl-core@
openssl
.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
...
...
@@ -31,7 +34,7 @@
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.
OpenSSL
.org/)"
* for use in the OpenSSL Toolkit (http://www.
openssl
.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
...
...
@@ -53,88 +56,299 @@
*
*/
#include "ec
dsa
.h"
#include "ec
_lcl
.h"
#include <openssl/err.h>
int
ECDSA_generate_key
(
ECDSA
*
ecdsa
)
{
int
ok
=
0
;
BN_CTX
*
ctx
=
NULL
;
BIGNUM
*
priv_key
=
NULL
,
*
order
=
NULL
;
EC_POINT
*
pub_key
=
NULL
;
EC_KEY
*
EC_KEY_new
(
void
)
{
EC_KEY
*
ret
;
ret
=
(
EC_KEY
*
)
OPENSSL_malloc
(
sizeof
(
EC_KEY
));
if
(
ret
==
NULL
)
{
ECerr
(
EC_F_EC_NEW
,
ERR_R_MALLOC_FAILURE
);
return
(
NULL
);
}
ret
->
version
=
1
;
ret
->
group
=
NULL
;
ret
->
pub_key
=
NULL
;
ret
->
priv_key
=
NULL
;
ret
->
enc_flag
=
0
;
ret
->
conv_form
=
POINT_CONVERSION_UNCOMPRESSED
;
ret
->
references
=
1
;
ret
->
meth_data
=
NULL
;
return
(
ret
);
}
if
(
!
ecdsa
||
!
ecdsa
->
group
)
void
EC_KEY_free
(
EC_KEY
*
r
)
{
ECDSAerr
(
ECDSA_F_ECDSA_GENERATE_KEY
,
ECDSA_R_MISSING_PARAMETERS
);
return
0
;
int
i
;
if
(
r
==
NULL
)
return
;
i
=
CRYPTO_add
(
&
r
->
references
,
-
1
,
CRYPTO_LOCK_EC
);
#ifdef REF_PRINT
REF_PRINT
(
"EC_KEY"
,
r
);
#endif
if
(
i
>
0
)
return
;
#ifdef REF_CHECK
if
(
i
<
0
)
{
fprintf
(
stderr
,
"EC_KEY_free, bad reference count
\n
"
);
abort
();
}
#endif
if
(
r
->
group
!=
NULL
)
EC_GROUP_free
(
r
->
group
);
if
(
r
->
pub_key
!=
NULL
)
EC_POINT_free
(
r
->
pub_key
);
if
(
r
->
priv_key
!=
NULL
)
BN_clear_free
(
r
->
priv_key
);
if
(
r
->
meth_data
&&
r
->
meth_data
->
finish
)
r
->
meth_data
->
finish
(
r
);
memset
((
void
*
)
r
,
0x0
,
sizeof
(
EC_KEY
));
OPENSSL_free
(
r
);
}
if
((
order
=
BN_new
())
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
EC_KEY
*
EC_KEY_copy
(
EC_KEY
*
dest
,
const
EC_KEY
*
src
)
{
if
(
dest
==
NULL
||
src
==
NULL
)
{
ECerr
(
EC_F_EC_KEY_COPY
,
ERR_R_PASSED_NULL_PARAMETER
);
return
NULL
;
}
/* copy the parameters */
if
(
src
->
group
)
{
const
EC_METHOD
*
meth
=
EC_GROUP_method_of
(
src
->
group
);
/* clear the old group */
if
(
dest
->
group
)
EC_GROUP_free
(
dest
->
group
);
dest
->
group
=
EC_GROUP_new
(
meth
);
if
(
dest
->
group
==
NULL
)
return
NULL
;
if
(
!
EC_GROUP_copy
(
dest
->
group
,
src
->
group
))
return
NULL
;
}
/* copy the public key */
if
(
src
->
pub_key
&&
src
->
group
)
{
if
(
dest
->
pub_key
)
EC_POINT_free
(
dest
->
pub_key
);
dest
->
pub_key
=
EC_POINT_new
(
src
->
group
);
if
(
dest
->
pub_key
==
NULL
)
return
NULL
;
if
(
!
EC_POINT_copy
(
dest
->
pub_key
,
src
->
pub_key
))
return
NULL
;
}
/* copy the private key */
if
(
src
->
priv_key
)
{
if
(
dest
->
priv_key
==
NULL
)
{
dest
->
priv_key
=
BN_new
();
if
(
dest
->
priv_key
==
NULL
)
return
NULL
;
}
if
(
!
BN_copy
(
dest
->
priv_key
,
src
->
priv_key
))
return
NULL
;
}
/* copy the rest */
dest
->
enc_flag
=
src
->
enc_flag
;
dest
->
conv_form
=
src
->
conv_form
;
dest
->
version
=
src
->
version
;
return
dest
;
}
if
(
ecdsa
->
priv_key
==
NULL
)
EC_KEY
*
EC_KEY_dup
(
const
EC_KEY
*
eckey
)
{
if
((
priv_key
=
BN_new
())
==
NULL
)
goto
err
;
EC_KEY
*
ret
=
NULL
;
int
ok
=
1
;
ret
=
EC_KEY_new
();
if
(
ret
==
NULL
)
return
NULL
;
/* copy the parameters */
if
(
eckey
->
group
)
{
ret
->
group
=
EC_GROUP_dup
(
eckey
->
group
);
if
(
ret
->
group
==
NULL
)
ok
=
0
;
}
/* copy the public key */
if
(
eckey
->
pub_key
&&
eckey
->
group
)
{
ret
->
pub_key
=
EC_POINT_dup
(
eckey
->
pub_key
,
eckey
->
group
);
if
(
ret
->
pub_key
==
NULL
)
ok
=
0
;
}
/* copy the private key */
if
(
eckey
->
priv_key
)
{
ret
->
priv_key
=
BN_dup
(
ret
->
priv_key
);
if
(
ret
->
priv_key
==
NULL
)
ok
=
0
;
}
/* copy the rest */
ret
->
enc_flag
=
eckey
->
enc_flag
;
ret
->
conv_form
=
eckey
->
conv_form
;
ret
->
version
=
eckey
->
version
;
if
(
!
ok
)
{
EC_KEY_free
(
ret
);
ret
=
NULL
;
}
return
ret
;
}
int
EC_KEY_generate_key
(
EC_KEY
*
eckey
)
{
int
ok
=
0
;
BN_CTX
*
ctx
=
NULL
;
BIGNUM
*
priv_key
=
NULL
,
*
order
=
NULL
;
EC_POINT
*
pub_key
=
NULL
;
if
(
!
eckey
||
!
eckey
->
group
)
{
ECerr
(
EC_F_EC_KEY_GENERATE_KEY
,
ERR_R_PASSED_NULL_PARAMETER
);
return
0
;
}
if
((
order
=
BN_new
())
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
(
eckey
->
priv_key
==
NULL
)
{
priv_key
=
BN_new
();
if
(
priv_key
==
NULL
)
goto
err
;
}
else
priv_key
=
ecdsa
->
priv_key
;
priv_key
=
eckey
->
priv_key
;
if
(
!
EC_GROUP_get_order
(
eckey
->
group
,
order
,
ctx
))
goto
err
;
if
(
!
EC_GROUP_get_order
(
ecdsa
->
group
,
order
,
ctx
))
goto
err
;
do
if
(
!
BN_rand_range
(
priv_key
,
order
))
goto
err
;
if
(
!
BN_rand_range
(
priv_key
,
order
))
goto
err
;
while
(
BN_is_zero
(
priv_key
));
if
(
ecdsa
->
pub_key
==
NULL
)
{
if
((
pub_key
=
EC_POINT_new
(
ecdsa
->
group
))
==
NULL
)
goto
err
;
}
if
(
eckey
->
pub_key
==
NULL
)
{
pub_key
=
EC_POINT_new
(
eckey
->
group
);
if
(
pub_key
==
NULL
)
goto
err
;
}
else
pub_key
=
ecdsa
->
pub_key
;
pub_key
=
eckey
->
pub_key
;
if
(
!
EC_POINT_mul
(
eckey
->
group
,
pub_key
,
priv_key
,
NULL
,
NULL
,
ctx
))
goto
err
;
if
(
!
EC_POINT_mul
(
ecdsa
->
group
,
pub_key
,
priv_key
,
NULL
,
NULL
,
ctx
))
goto
err
;
eckey
->
priv_key
=
priv_key
;
eckey
->
pub_key
=
pub_key
;
ecdsa
->
priv_key
=
priv_key
;
ecdsa
->
pub_key
=
pub_key
;
ok
=
1
;
err:
if
(
order
)
BN_free
(
order
);
if
((
pub_key
!=
NULL
)
&&
(
ecdsa
->
pub_key
==
NULL
))
EC_POINT_free
(
pub_key
);
if
((
priv_key
!=
NULL
)
&&
(
ecdsa
->
priv_key
==
NULL
))
BN_free
(
priv_key
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
err:
if
(
order
)
BN_free
(
order
);
if
(
pub_key
!=
NULL
&&
eckey
->
pub_key
==
NULL
)
EC_POINT_free
(
pub_key
);
if
(
priv_key
!=
NULL
&&
eckey
->
priv_key
==
NULL
)
BN_free
(
priv_key
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
return
(
ok
);
}
}
int
EC
DSA_check_key
(
ECDSA
*
ecdsa
)
{
int
ok
=
0
;
BN_CTX
*
ctx
=
NULL
;
BIGNUM
*
order
=
NULL
;
EC_POINT
*
point
=
NULL
;
int
EC
_KEY_check_key
(
const
EC_KEY
*
eckey
)
{
int
ok
=
0
;
BN_CTX
*
ctx
=
NULL
;
BIGNUM
*
order
=
NULL
;
EC_POINT
*
point
=
NULL
;
if
(
!
ecdsa
||
!
ecdsa
->
group
||
!
ecdsa
->
pub_key
)
if
(
!
eckey
||
!
eckey
->
group
||
!
eckey
->
pub_key
)
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
ERR_R_PASSED_NULL_PARAMETER
);
return
0
;
}
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
order
=
BN_new
())
==
NULL
)
goto
err
;
if
((
point
=
EC_POINT_new
(
ecdsa
->
group
))
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
order
=
BN_new
())
==
NULL
)
goto
err
;
if
((
point
=
EC_POINT_new
(
eckey
->
group
))
==
NULL
)
goto
err
;
/* testing whether pub_key is a valid point on the elliptic curve */
if
(
!
EC_POINT_is_on_curve
(
ecdsa
->
group
,
ecdsa
->
pub_key
,
ctx
))
goto
err
;
/* testing whether the pub_key is on the elliptic curve */
if
(
!
EC_POINT_is_on_curve
(
eckey
->
group
,
eckey
->
pub_key
,
ctx
))
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
EC_R_POINT_IS_NOT_ON_CURVE
);
goto
err
;
}
/* testing whether pub_key * order is the point at infinity */
if
(
!
EC_GROUP_get_order
(
ecdsa
->
group
,
order
,
ctx
))
goto
err
;
if
(
!
EC_POINT_copy
(
point
,
ecdsa
->
pub_key
))
goto
err
;
if
(
!
EC_POINT_mul
(
ecdsa
->
group
,
point
,
order
,
NULL
,
NULL
,
ctx
))
goto
err
;
if
(
!
EC_POINT_is_at_infinity
(
ecdsa
->
group
,
point
))
goto
err
;
/* in case the priv_key is present : check if generator * priv_key == pub_key */
if
(
ecdsa
->
priv_key
)
{
if
(
BN_cmp
(
ecdsa
->
priv_key
,
order
)
>=
0
)
goto
err
;
if
(
!
EC_POINT_mul
(
ecdsa
->
group
,
point
,
ecdsa
->
priv_key
,
NULL
,
NULL
,
ctx
))
goto
err
;
if
(
EC_POINT_cmp
(
ecdsa
->
group
,
point
,
ecdsa
->
pub_key
,
ctx
)
!=
0
)
goto
err
;
}
if
(
!
EC_GROUP_get_order
(
eckey
->
group
,
order
,
ctx
))
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
EC_R_INVALID_GROUP_ORDER
);
goto
err
;
}
if
(
!
EC_POINT_copy
(
point
,
eckey
->
pub_key
))
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
EC_POINT_mul
(
eckey
->
group
,
point
,
order
,
NULL
,
NULL
,
ctx
))
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
EC_POINT_is_at_infinity
(
eckey
->
group
,
point
))
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
EC_R_WRONG_ORDER
);
goto
err
;
}
/* in case the priv_key is present :
* check if generator * priv_key == pub_key
*/
if
(
eckey
->
priv_key
)
{
if
(
BN_cmp
(
eckey
->
priv_key
,
order
)
>=
0
)
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
EC_R_WRONG_ORDER
);
goto
err
;
}
if
(
!
EC_POINT_mul
(
eckey
->
group
,
point
,
eckey
->
priv_key
,
NULL
,
NULL
,
ctx
))
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
EC_POINT_cmp
(
eckey
->
group
,
point
,
eckey
->
pub_key
,
ctx
)
!=
0
)
{
ECerr
(
EC_F_EC_KEY_CHECK_KEY
,
EC_R_INVALID_PRIVATE_KEY
);
goto
err
;
}
}
ok
=
1
;
err:
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
order
!=
NULL
)
BN_free
(
order
);
if
(
point
!=
NULL
)
EC_POINT_free
(
point
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
order
!=
NULL
)
BN_free
(
order
);
if
(
point
!=
NULL
)
EC_POINT_free
(
point
);
return
(
ok
);
}
}
crypto/ecdsa/Makefile.ssl
浏览文件 @
14a7cfb3
...
...
@@ -23,11 +23,9 @@ TEST=ecdsatest.c
APPS
=
LIB
=
$(TOP)
/libcrypto.a
LIBSRC
=
ecs_lib.c ecs_gen.c ecs_asn1.c ecs_ossl.c ecs_sign.c ecs_vrf.c
\
ecs_key.c ecs_err.c
LIBSRC
=
ecs_lib.c ecs_asn1.c ecs_ossl.c ecs_sign.c ecs_vrf.c ecs_err.c
LIBOBJ
=
ecs_lib.o ecs_gen.o ecs_asn1.o ecs_ossl.o ecs_sign.o ecs_vrf.o
\
ecs_key.o ecs_err.o
LIBOBJ
=
ecs_lib.o ecs_asn1.o ecs_ossl.o ecs_sign.o ecs_vrf.o ecs_err.o
SRC
=
$(LIBSRC)
...
...
@@ -98,15 +96,6 @@ ecs_err.o: ../../include/openssl/lhash.h ../../include/openssl/opensslconf.h
ecs_err.o
:
../../include/openssl/opensslv.h ../../include/openssl/ossl_typ.h
ecs_err.o
:
../../include/openssl/safestack.h ../../include/openssl/stack.h
ecs_err.o
:
../../include/openssl/symhacks.h ecs_err.c
ecs_gen.o
:
ecs_gen.c
ecs_key.o
:
../../include/openssl/asn1.h ../../include/openssl/bio.h
ecs_key.o
:
../../include/openssl/bn.h ../../include/openssl/crypto.h
ecs_key.o
:
../../include/openssl/e_os2.h ../../include/openssl/ec.h
ecs_key.o
:
../../include/openssl/err.h ../../include/openssl/lhash.h
ecs_key.o
:
../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
ecs_key.o
:
../../include/openssl/ossl_typ.h ../../include/openssl/safestack.h
ecs_key.o
:
../../include/openssl/stack.h ../../include/openssl/symhacks.h
ecs_key.o
:
ecdsa.h ecs_key.c
ecs_lib.o
:
../../include/openssl/asn1.h ../../include/openssl/bio.h
ecs_lib.o
:
../../include/openssl/bn.h ../../include/openssl/crypto.h
ecs_lib.o
:
../../include/openssl/dh.h ../../include/openssl/dsa.h
...
...
crypto/ecdsa/ecdsa.h
浏览文件 @
14a7cfb3
...
...
@@ -59,9 +59,6 @@
#error ECDSA is disabled.
#endif
#ifndef OPENSSL_NO_BIO
#include <openssl/bio.h>
#endif
#include <openssl/bn.h>
#include <openssl/ec.h>
#include <openssl/ossl_typ.h>
...
...
@@ -70,8 +67,6 @@
extern
"C"
{
#endif
typedef
struct
ecdsa_st
ECDSA
;
typedef
struct
ECDSA_SIG_st
{
BIGNUM
*
r
;
...
...
@@ -81,122 +76,70 @@ typedef struct ECDSA_SIG_st
typedef
struct
ecdsa_method
{
const
char
*
name
;
ECDSA_SIG
*
(
*
ecdsa_do_sign
)(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA
*
ecdsa
);
int
(
*
ecdsa_sign_setup
)(
ECDSA
*
ecdsa
,
BN_CTX
*
ctx
,
BIGNUM
**
kinv
,
BIGNUM
**
r
);
int
(
*
ecdsa_do_verify
)(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
ECDSA
*
ecdsa
);
int
(
*
init
)(
ECDSA
*
ecdsa
);
int
(
*
finish
)(
ECDSA
*
ecdsa
);
ECDSA_SIG
*
(
*
ecdsa_do_sign
)(
const
unsigned
char
*
dgst
,
int
dgst_len
,
EC_KEY
*
eckey
);
int
(
*
ecdsa_sign_setup
)(
EC_KEY
*
eckey
,
BN_CTX
*
ctx
,
BIGNUM
**
kinv
,
BIGNUM
**
r
);
int
(
*
ecdsa_do_verify
)(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
);
#if 0
int (*init)(EC_KEY *eckey);
int (*finish)(EC_KEY *eckey);
#endif
int
flags
;
char
*
app_data
;
}
ECDSA_METHOD
;
struct
ecdsa_st
{
int
version
;
point_conversion_form_t
conversion_form
;
EC_GROUP
*
group
;
EC_POINT
*
pub_key
;
BIGNUM
*
priv_key
;
BIGNUM
*
kinv
;
/* signing pre-calc */
BIGNUM
*
r
;
/* signing pre-calc */
unsigned
int
enc_flag
;
int
references
;
typedef
struct
ecdsa_data_st
{
/* EC_KEY_METH_DATA part */
int
(
*
init
)(
EC_KEY
*
);
void
(
*
finish
)(
EC_KEY
*
);
/* method specific part */
BIGNUM
*
kinv
;
/* signing pre-calc */
BIGNUM
*
r
;
/* signing pre-calc */
ENGINE
*
engine
;
int
flags
;
CRYPTO_EX_DATA
ex_data
;
const
ECDSA_METHOD
*
meth
;
struct
engine_st
*
engine
;
};
/* some values for the encoding_flag */
#define ECDSA_PKEY_NO_PARAMETERS 0x001
#define ECDSA_PKEY_NO_PUBKEY 0x002
CRYPTO_EX_DATA
ex_data
;
}
ECDSA_DATA
;
/* signature functions */
ECDSA_SIG
*
ECDSA_SIG_new
(
void
);
void
ECDSA_SIG_free
(
ECDSA_SIG
*
a
);
int
i2d_ECDSA_SIG
(
const
ECDSA_SIG
*
a
,
unsigned
char
**
pp
);
ECDSA_SIG
*
d2i_ECDSA_SIG
(
ECDSA_SIG
**
v
,
const
unsigned
char
**
pp
,
long
length
);
ECDSA_SIG
*
ECDSA_do_sign
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA
*
ecdsa
);
int
ECDSA_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
ECDSA
*
ecdsa
);
int
ECDSA_generate_key
(
ECDSA
*
ecdsa
);
int
ECDSA_check_key
(
ECDSA
*
ecdsa
);
/* ECDSA_DATA functions */
ECDSA_DATA
*
ECDSA_DATA_new
(
void
);
ECDSA_DATA
*
ECDSA_DATA_new_method
(
ENGINE
*
);
void
ECDSA_DATA_free
(
ECDSA_DATA
*
);
ECDSA_DATA
*
ecdsa_check
(
EC_KEY
*
);
ECDSA_SIG
*
ECDSA_do_sign
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
EC_KEY
*
);
int
ECDSA_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
);
const
ECDSA_METHOD
*
ECDSA_OpenSSL
(
void
);
void
ECDSA_set_default_method
(
const
ECDSA_METHOD
*
);
const
ECDSA_METHOD
*
ECDSA_get_default_method
(
void
);
int
ECDSA_set_method
(
ECDSA
*
,
const
ECDSA_METHOD
*
);
ECDSA
*
ECDSA_new
(
void
);
ECDSA
*
ECDSA_new_method
(
ENGINE
*
engine
);
int
ECDSA_size
(
const
ECDSA
*
);
int
ECDSA_sign_setup
(
ECDSA
*
ecdsa
,
BN_CTX
*
ctx
,
BIGNUM
**
kinv
,
BIGNUM
**
rp
);
int
ECDSA_sign
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
ECDSA
*
ecdsa
);
int
ECDSA_verify
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sig
,
int
sig_len
,
ECDSA
*
ecdsa
);
int
ECDSA_up_ref
(
ECDSA
*
ecdsa
);
void
ECDSA_free
(
ECDSA
*
a
);
int
ECDSA_get_ex_new_index
(
long
argl
,
void
*
argp
,
CRYPTO_EX_new
*
new_func
,
CRYPTO_EX_dup
*
dup_func
,
CRYPTO_EX_free
*
free_func
);
int
ECDSA_set_ex_data
(
ECDSA
*
d
,
int
idx
,
void
*
arg
);
void
*
ECDSA_get_ex_data
(
ECDSA
*
d
,
int
idx
);
#ifndef OPENSSL_NO_BIO
int
ECDSAParameters_print
(
BIO
*
bp
,
const
ECDSA
*
x
);
int
ECDSA_print
(
BIO
*
bp
,
const
ECDSA
*
x
,
int
off
);
#endif
#ifndef OPENSSL_NO_FP_API
int
ECDSAParameters_print_fp
(
FILE
*
fp
,
const
ECDSA
*
x
);
int
ECDSA_print_fp
(
FILE
*
fp
,
const
ECDSA
*
x
,
int
off
);
#endif
/* the ECDSA_{set|get}_enc_flag() specify the encoding
* of the elliptic curve private key */
unsigned
int
ECDSA_get_enc_flag
(
const
ECDSA
*
);
void
ECDSA_set_enc_flag
(
ECDSA
*
,
unsigned
int
);
/* The ECDSA_{set|get}_conversion_type() functions set/get the
* conversion form for ec-points (see ec.h) in a ECDSA-structure */
void
ECDSA_set_conversion_form
(
ECDSA
*
,
const
point_conversion_form_t
);
point_conversion_form_t
ECDSA_get_conversion_form
(
const
ECDSA
*
);
/* The ECDSA_{set|get}_default_conversion_form() functions set/get the
* default conversion form */
void
ECDSA_set_default_conversion_form
(
const
point_conversion_form_t
);
point_conversion_form_t
ECDSA_get_default_conversion_form
(
void
);
/* the basic de- and encode functions ( see ecs_asn1.c ) */
ECDSA
*
d2i_ECDSAParameters
(
ECDSA
**
a
,
const
unsigned
char
**
in
,
long
len
);
int
i2d_ECDSAParameters
(
ECDSA
*
a
,
unsigned
char
**
out
);
int
ECDSA_set_method
(
EC_KEY
*
,
const
ECDSA_METHOD
*
);
ECDSA
*
d2i_ECDSAPrivateKey
(
ECDSA
**
a
,
const
unsigned
char
**
in
,
long
len
);
int
i2d_ECDSAPrivateKey
(
ECDSA
*
a
,
unsigned
char
**
out
);
int
ECDSA_size
(
const
EC_KEY
*
);
int
ECDSA_sign_setup
(
EC_KEY
*
eckey
,
BN_CTX
*
ctx
,
BIGNUM
**
kinv
,
BIGNUM
**
rp
);
int
ECDSA_sign
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
EC_KEY
*
eckey
);
int
ECDSA_verify
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sig
,
int
sig_len
,
EC_KEY
*
eckey
);
/* ECDSAPublicKey_set_octet_string() sets the public key in the ECDSA-structure.
* (*a) must be a pointer to a ECDSA-structure with (*a)->group not zero
* (e.g. a ECDSA-structure with a valid EC_GROUP-structure) */
ECDSA
*
ECDSAPublicKey_set_octet_string
(
ECDSA
**
a
,
const
unsigned
char
**
in
,
long
len
);
/* ECDSAPublicKey_get_octet_string() returns the length of the octet string encoding
* of the public key. If out != NULL then the function returns in *out
* a pointer to the octet string */
int
ECDSAPublicKey_get_octet_string
(
ECDSA
*
a
,
unsigned
char
**
out
);
int
ECDSA_get_ex_new_index
(
long
argl
,
void
*
argp
,
CRYPTO_EX_new
*
new_func
,
CRYPTO_EX_dup
*
dup_func
,
CRYPTO_EX_free
*
free_func
);
int
ECDSA_set_ex_data
(
EC_KEY
*
d
,
int
idx
,
void
*
arg
);
void
*
ECDSA_get_ex_data
(
EC_KEY
*
d
,
int
idx
);
#define ECDSAParameters_dup(x) (ECDSA *)ASN1_dup((int (*)())i2d_ECDSAParameters, \
(char *(*)())d2i_ECDSAParameters,(char *)(x))
#define d2i_ECDSAParameters_fp(fp,x) (ECDSA *)ASN1_d2i_fp((char *(*)())ECDSA_new, \
(char *(*)())d2i_ECDSAParameters,(fp),(unsigned char **)(x))
#define i2d_ECDSAParameters_fp(fp,x) ASN1_i2d_fp(i2d_ECDSAParameters,(fp), \
(unsigned char *)(x))
#define d2i_ECDSAParameters_bio(bp,x) (ECDSA *)ASN1_d2i_bio((char *(*)())ECDSA_new, \
(char *(*)())d2i_ECDSAParameters,(bp),(unsigned char **)(x))
#define i2d_ECDSAParameters_bio(bp,x) ASN1_i2d_bio(i2d_ECDSAParameters,(bp), \
(unsigned char *)(x))
/* BEGIN ERROR CODES */
/* The following lines are auto generated by the script mkerr.pl. Any changes
...
...
@@ -207,72 +150,18 @@ void ERR_load_ECDSA_strings(void);
/* Error codes for the ECDSA functions. */
/* Function codes. */
#define ECDSA_F_D2I_ECDSAPARAMETERS 100
#define ECDSA_F_D2I_ECDSAPRIVATEKEY 101
#define ECDSA_F_ECDSAPARAMETERS_PRINT 102
#define ECDSA_F_ECDSAPARAMETERS_PRINT_FP 103
#define ECDSA_F_ECDSA_DO_SIGN 104
#define ECDSA_F_ECDSA_DO_VERIFY 105
#define ECDSA_F_ECDSA_GENERATE_KEY 106
#define ECDSA_F_ECDSA_GET 107
#define ECDSA_F_ECDSA_GET_CURVE_NID 120
#define ECDSA_F_ECDSA_GET_ECDSA 121
#define ECDSA_F_ECDSA_GET_EC_PARAMETERS 122
#define ECDSA_F_ECDSA_GET_X9_62_CURVE 108
#define ECDSA_F_ECDSA_GET_X9_62_EC_PARAMETERS 109
#define ECDSA_F_ECDSA_GET_X9_62_FIELDID 110
#define ECDSA_F_ECDSA_NEW 111
#define ECDSA_F_ECDSA_PRINT 112
#define ECDSA_F_ECDSA_PRINT_FP 113
#define ECDSA_F_ECDSA_SET_GROUP_P 114
#define ECDSA_F_ECDSA_SET_PRIME_GROUP 123
#define ECDSA_F_ECDSA_SIGN_SETUP 115
#define ECDSA_F_I2D_ECDSAPARAMETERS 116
#define ECDSA_F_I2D_ECDSAPRIVATEKEY 117
#define ECDSA_F_I2D_ECDSAPUBLICKEY 118
#define ECDSA_F_SIG_CB 119
#define ECDSA_F_ECDSA_DATA_NEW 100
#define ECDSA_F_ECDSA_DO_SIGN 101
#define ECDSA_F_ECDSA_DO_VERIFY 102
#define ECDSA_F_ECDSA_SIGN_SETUP 103
/* Reason codes. */
#define ECDSA_R_BAD_SIGNATURE 100
#define ECDSA_R_CAN_NOT_GET_GENERATOR 101
#define ECDSA_R_D2I_ECDSAPRIVATEKEY_MISSING_PRIVATE_KEY 102
#define ECDSA_R_D2I_ECDSA_PRIVATEKEY_FAILURE 103
#define ECDSA_R_D2I_EC_PARAMETERS_FAILURE 133
#define ECDSA_R_D2I_X9_62_EC_PARAMETERS_FAILURE 104
#define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 105
#define ECDSA_R_ECDSAPRIVATEKEY_NEW_FAILURE 106
#define ECDSA_R_ECDSA_F_ECDSA_NEW 107
#define ECDSA_R_ECDSA_GET_EC_PARAMETERS_FAILURE 134
#define ECDSA_R_ECDSA_GET_FAILURE 108
#define ECDSA_R_ECDSA_GET_X9_62_CURVE_FAILURE 109
#define ECDSA_R_ECDSA_GET_X9_62_EC_PARAMETERS_FAILURE 110
#define ECDSA_R_ECDSA_GET_X9_62_FIELDID_FAILURE 111
#define ECDSA_R_ECDSA_NEW_FAILURE 112
#define ECDSA_R_ECDSA_R_D2I_EC_PARAMETERS_FAILURE 135
#define ECDSA_R_ECDSA_R_D2I_X9_62_EC_PARAMETERS_FAILURE 113
#define ECDSA_R_ECPARAMETERS2ECDSA_FAILURE 138
#define ECDSA_R_EC_GROUP_NID2CURVE_FAILURE 136
#define ECDSA_R_ERR_EC_LIB 114
#define ECDSA_R_I2D_ECDSA_PRIVATEKEY 115
#define ECDSA_R_I2D_ECDSA_PUBLICKEY 116
#define ECDSA_R_MISSING_PARAMETERS 117
#define ECDSA_R_MISSING_PRIVATE_KEY 139
#define ECDSA_R_NOT_SUPPORTED 118
#define ECDSA_R_NO_CURVE_PARAMETER_A_SPECIFIED 119
#define ECDSA_R_NO_CURVE_PARAMETER_B_SPECIFIED 120
#define ECDSA_R_NO_CURVE_SPECIFIED 121
#define ECDSA_R_NO_FIELD_SPECIFIED 122
#define ECDSA_R_PRIME_MISSING 123
#define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 124
#define ECDSA_R_SIGNATURE_MALLOC_FAILED 125
#define ECDSA_R_UNEXPECTED_ASN1_TYPE 126
#define ECDSA_R_UNEXPECTED_PARAMETER 127
#define ECDSA_R_UNEXPECTED_PARAMETER_LENGTH 128
#define ECDSA_R_UNEXPECTED_VERSION_NUMER 129
#define ECDSA_R_UNKNOWN_PARAMETERS_TYPE 137
#define ECDSA_R_WRONG_FIELD_IDENTIFIER 130
#define ECDSA_R_X9_62_CURVE_NEW_FAILURE 131
#define ECDSA_R_X9_62_EC_PARAMETERS_NEW_FAILURE 132
#define ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE 101
#define ECDSA_R_ERR_EC_LIB 102
#define ECDSA_R_MISSING_PARAMETERS 103
#define ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED 104
#define ECDSA_R_SIGNATURE_MALLOC_FAILED 105
#ifdef __cplusplus
}
...
...
crypto/ecdsa/ecdsatest.c
浏览文件 @
14a7cfb3
...
...
@@ -89,7 +89,7 @@ static const char rnd_seed[] = "string to make the random number generator think
ECDSA_SIG
*
signatures
[
ECDSA_NIST_TESTS
];
unsigned
char
digest
[
ECDSA_NIST_TESTS
][
20
];
void
clear_ecdsa
(
EC
DSA
*
ecdsa
)
void
clear_ecdsa
(
EC
_KEY
*
ecdsa
)
{
if
(
!
ecdsa
)
return
;
...
...
@@ -110,7 +110,7 @@ void clear_ecdsa(ECDSA *ecdsa)
}
}
int
set_p192_param
(
EC
DSA
*
ecdsa
)
int
set_p192_param
(
EC
_KEY
*
ecdsa
)
{
BN_CTX
*
ctx
=
NULL
;
int
ret
=
0
;
...
...
@@ -143,7 +143,7 @@ err : if (ctx) BN_CTX_free(ctx);
return
ret
;
}
int
set_p239_param
(
EC
DSA
*
ecdsa
)
int
set_p239_param
(
EC
_KEY
*
ecdsa
)
{
BN_CTX
*
ctx
=
NULL
;
int
ret
=
0
;
...
...
@@ -176,7 +176,7 @@ err : if (ctx) BN_CTX_free(ctx);
return
ret
;
}
int
test_sig_vrf
(
EC
DSA
*
ecdsa
,
const
unsigned
char
*
dgst
)
int
test_sig_vrf
(
EC
_KEY
*
ecdsa
,
const
unsigned
char
*
dgst
)
{
int
ret
=
0
,
type
=
0
;
unsigned
char
*
buffer
=
NULL
;
...
...
@@ -216,7 +216,7 @@ err: OPENSSL_free(buffer);
return
(
ret
==
1
);
}
int
test_x962_sig_vrf
(
EC
DSA
*
ecdsa
,
const
unsigned
char
*
dgst
,
int
test_x962_sig_vrf
(
EC
_KEY
*
eckey
,
const
unsigned
char
*
dgst
,
const
char
*
k_in
,
const
char
*
r_in
,
const
char
*
s_in
)
{
int
ret
=
0
;
...
...
@@ -225,23 +225,28 @@ int test_x962_sig_vrf(ECDSA *ecdsa, const unsigned char *dgst,
BIGNUM
*
r
=
NULL
,
*
s
=
NULL
,
*
k
=
NULL
,
*
x
=
NULL
,
*
y
=
NULL
,
*
m
=
NULL
,
*
ord
=
NULL
;
BN_CTX
*
ctx
=
NULL
;
char
*
tmp_char
=
NULL
;
if
(
!
ecdsa
||
!
ecdsa
->
group
||
!
ecdsa
->
pub_key
||
!
ecdsa
->
priv_key
)
ECDSA_DATA
*
ecdsa
=
ecdsa_check
(
eckey
);;
if
(
!
eckey
||
!
eckey
->
group
||
!
eckey
->
pub_key
||
!
eckey
->
priv_key
||
!
ecdsa
)
return
0
;
if
((
point
=
EC_POINT_new
(
ecdsa
->
group
))
==
NULL
)
goto
err
;
if
((
r
=
BN_new
())
==
NULL
||
(
s
=
BN_new
())
==
NULL
||
(
k
=
BN_new
())
==
NULL
||
(
x
=
BN_new
())
==
NULL
||
(
y
=
BN_new
())
==
NULL
||
(
m
=
BN_new
())
==
NULL
||
(
ord
=
BN_new
())
==
NULL
)
goto
err
;
if
((
point
=
EC_POINT_new
(
eckey
->
group
))
==
NULL
)
goto
err
;
if
((
r
=
BN_new
())
==
NULL
||
(
s
=
BN_new
())
==
NULL
||
(
k
=
BN_new
())
==
NULL
||
(
x
=
BN_new
())
==
NULL
||
(
y
=
BN_new
())
==
NULL
||
(
m
=
BN_new
())
==
NULL
||
(
ord
=
BN_new
())
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
(
!
BN_bin2bn
(
dgst
,
20
,
m
))
goto
err
;
if
(
!
BN_dec2bn
(
&
k
,
k_in
))
goto
err
;
if
(
!
EC_POINT_mul
(
ecdsa
->
group
,
point
,
k
,
NULL
,
NULL
,
ctx
))
goto
err
;
if
(
!
EC_POINT_get_affine_coordinates_GFp
(
ecdsa
->
group
,
point
,
x
,
y
,
ctx
))
goto
err
;
if
(
!
EC_GROUP_get_order
(
ecdsa
->
group
,
ord
,
ctx
))
goto
err
;
if
(
!
EC_POINT_mul
(
eckey
->
group
,
point
,
k
,
NULL
,
NULL
,
ctx
))
goto
err
;
if
(
!
EC_POINT_get_affine_coordinates_GFp
(
eckey
->
group
,
point
,
x
,
y
,
ctx
))
goto
err
;
if
(
!
EC_GROUP_get_order
(
eckey
->
group
,
ord
,
ctx
))
goto
err
;
if
((
ecdsa
->
r
=
BN_dup
(
x
))
==
NULL
)
goto
err
;
if
((
ecdsa
->
kinv
=
BN_mod_inverse
(
NULL
,
k
,
ord
,
ctx
))
==
NULL
)
goto
err
;
if
((
ecdsa
->
kinv
=
BN_mod_inverse
(
NULL
,
k
,
ord
,
ctx
))
==
NULL
)
goto
err
;
if
((
sig
=
ECDSA_do_sign
(
dgst
,
20
,
ec
dsa
))
==
NULL
)
if
((
sig
=
ECDSA_do_sign
(
dgst
,
20
,
ec
key
))
==
NULL
)
{
BIO_printf
(
bio_err
,
"ECDSA_do_sign() failed
\n
"
);
goto
err
;
...
...
@@ -260,7 +265,7 @@ int test_x962_sig_vrf(ECDSA *ecdsa, const unsigned char *dgst,
BIO_printf
(
bio_err
,
"sig->s = %s
\n
"
,
tmp_char
);
goto
err
;
}
ret
=
ECDSA_do_verify
(
dgst
,
20
,
sig
,
ec
dsa
);
ret
=
ECDSA_do_verify
(
dgst
,
20
,
sig
,
ec
key
);
if
(
ret
!=
1
)
{
BIO_printf
(
bio_err
,
"ECDSA_do_verify : signature verification failed
\n
"
);
...
...
@@ -282,7 +287,7 @@ err : if (r) BN_free(r);
return
(
ret
==
1
);
}
int
ecdsa_cmp
(
const
EC
DSA
*
a
,
const
ECDSA
*
b
)
int
ecdsa_cmp
(
const
EC
_KEY
*
a
,
const
EC_KEY
*
b
)
{
int
ret
=
1
;
BN_CTX
*
ctx
=
NULL
;
...
...
@@ -316,7 +321,7 @@ err: if (tmp_a1) BN_free(tmp_a1);
int
main
(
void
)
{
EC
DSA
*
ecdsa
=
NULL
,
*
ret_ecdsa
=
NULL
;
EC
_KEY
*
ecdsa
=
NULL
,
*
ret_ecdsa
=
NULL
;
BIGNUM
*
d
=
NULL
;
X509_PUBKEY
*
x509_pubkey
=
NULL
;
PKCS8_PRIV_KEY_INFO
*
pkcs8
=
NULL
;
...
...
@@ -351,41 +356,41 @@ int main(void)
RAND_seed
(
rnd_seed
,
sizeof
(
rnd_seed
));
if
((
ecdsa
=
EC
DSA
_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
=
EC
_KEY
_new
())
==
NULL
)
goto
err
;
set_p192_param
(
ecdsa
);
EC
DSA
_print
(
bio_err
,
ecdsa
,
0
);
EC
_KEY
_print
(
bio_err
,
ecdsa
,
0
);
/* en- decode tests */
/* i2d_ - d2i_EC
DSA
Parameters() */
/* i2d_ - d2i_ECParameters() */
BIO_printf
(
bio_err
,
"
\n
Testing i2d_ - d2i_ECDSAParameters
\n
"
);
buf_len
=
i2d_EC
DSA
Parameters
(
ecdsa
,
NULL
);
buf_len
=
i2d_ECParameters
(
ecdsa
,
NULL
);
if
(
!
buf_len
||
(
buffer
=
OPENSSL_malloc
(
buf_len
))
==
NULL
)
goto
err
;
pp
=
buffer
;
if
(
!
i2d_EC
DSA
Parameters
(
ecdsa
,
&
pp
))
goto
err
;
if
(
!
i2d_ECParameters
(
ecdsa
,
&
pp
))
goto
err
;
pp
=
buffer
;
if
((
ret_ecdsa
=
d2i_EC
DSA
Parameters
(
&
ret_ecdsa
,
(
const
unsigned
char
**
)
&
pp
,
if
((
ret_ecdsa
=
d2i_ECParameters
(
&
ret_ecdsa
,
(
const
unsigned
char
**
)
&
pp
,
buf_len
))
==
NULL
)
goto
err
;
EC
DSA
Parameters_print
(
bio_err
,
ret_ecdsa
);
ECParameters_print
(
bio_err
,
ret_ecdsa
);
if
(
ecdsa_cmp
(
ecdsa
,
ret_ecdsa
))
goto
err
;
OPENSSL_free
(
buffer
);
buffer
=
NULL
;
EC
DSA
_free
(
ret_ecdsa
);
EC
_KEY
_free
(
ret_ecdsa
);
ret_ecdsa
=
NULL
;
/* i2d_ - d2i_EC
DSA
PrivateKey() */
/* i2d_ - d2i_ECPrivateKey() */
BIO_printf
(
bio_err
,
"
\n
Testing i2d_ - d2i_ECDSAPrivateKey
\n
"
);
buf_len
=
i2d_EC
DSA
PrivateKey
(
ecdsa
,
NULL
);
buf_len
=
i2d_ECPrivateKey
(
ecdsa
,
NULL
);
if
(
!
buf_len
||
(
buffer
=
OPENSSL_malloc
(
buf_len
))
==
NULL
)
goto
err
;
pp
=
buffer
;
if
(
!
i2d_EC
DSA
PrivateKey
(
ecdsa
,
&
pp
))
goto
err
;
if
(
!
i2d_ECPrivateKey
(
ecdsa
,
&
pp
))
goto
err
;
pp
=
buffer
;
if
((
ret_ecdsa
=
d2i_EC
DSA
PrivateKey
(
&
ret_ecdsa
,
(
const
unsigned
char
**
)
&
pp
,
if
((
ret_ecdsa
=
d2i_ECPrivateKey
(
&
ret_ecdsa
,
(
const
unsigned
char
**
)
&
pp
,
buf_len
))
==
NULL
)
goto
err
;
EC
DSA
_print
(
bio_err
,
ret_ecdsa
,
0
);
EC
_KEY
_print
(
bio_err
,
ret_ecdsa
,
0
);
if
(
ecdsa_cmp
(
ecdsa
,
ret_ecdsa
))
goto
err
;
EC
DSA
_free
(
ret_ecdsa
);
EC
_KEY
_free
(
ret_ecdsa
);
ret_ecdsa
=
NULL
;
OPENSSL_free
(
buffer
);
buffer
=
NULL
;
...
...
@@ -394,12 +399,12 @@ int main(void)
BIO_printf
(
bio_err
,
"
\n
Testing X509_PUBKEY_{get,set} : "
);
if
((
pkey
=
EVP_PKEY_new
())
==
NULL
)
goto
err
;
EVP_PKEY_assign_EC
DSA
(
pkey
,
ecdsa
);
EVP_PKEY_assign_EC
_KEY
(
pkey
,
ecdsa
);
if
((
x509_pubkey
=
X509_PUBKEY_new
())
==
NULL
)
goto
err
;
if
(
!
X509_PUBKEY_set
(
&
x509_pubkey
,
pkey
))
goto
err
;
if
((
ret_pkey
=
X509_PUBKEY_get
(
x509_pubkey
))
==
NULL
)
goto
err
;
ret_ecdsa
=
EVP_PKEY_get1_EC
DSA
(
ret_pkey
);
ret_ecdsa
=
EVP_PKEY_get1_EC
_KEY
(
ret_pkey
);
EVP_PKEY_free
(
ret_pkey
);
ret_pkey
=
NULL
;
...
...
@@ -411,7 +416,7 @@ int main(void)
else
BIO_printf
(
bio_err
,
"TEST OK
\n
"
);
X509_PUBKEY_free
(
x509_pubkey
);
x509_pubkey
=
NULL
;
EC
DSA
_free
(
ret_ecdsa
);
EC
_KEY
_free
(
ret_ecdsa
);
ret_ecdsa
=
NULL
;
/* Testing PKCS8_PRIV_KEY_INFO <-> EVP_PKEY */
...
...
@@ -419,7 +424,7 @@ int main(void)
BIO_printf
(
bio_err
,
"PKCS8_OK : "
);
if
((
pkcs8
=
EVP_PKEY2PKCS8_broken
(
pkey
,
PKCS8_OK
))
==
NULL
)
goto
err
;
if
((
ret_pkey
=
EVP_PKCS82PKEY
(
pkcs8
))
==
NULL
)
goto
err
;
ret_ecdsa
=
EVP_PKEY_get1_EC
DSA
(
ret_pkey
);
ret_ecdsa
=
EVP_PKEY_get1_EC
_KEY
(
ret_pkey
);
if
(
ecdsa_cmp
(
ecdsa
,
ret_ecdsa
))
{
BIO_printf
(
bio_err
,
"TEST FAILED
\n
"
);
...
...
@@ -428,13 +433,13 @@ int main(void)
else
BIO_printf
(
bio_err
,
"TEST OK
\n
"
);
EVP_PKEY_free
(
ret_pkey
);
ret_pkey
=
NULL
;
EC
DSA
_free
(
ret_ecdsa
);
EC
_KEY
_free
(
ret_ecdsa
);
ret_ecdsa
=
NULL
;
PKCS8_PRIV_KEY_INFO_free
(
pkcs8
);
BIO_printf
(
bio_err
,
"PKCS8_NO_OCTET : "
);
if
((
pkcs8
=
EVP_PKEY2PKCS8_broken
(
pkey
,
PKCS8_NO_OCTET
))
==
NULL
)
goto
err
;
if
((
ret_pkey
=
EVP_PKCS82PKEY
(
pkcs8
))
==
NULL
)
goto
err
;
ret_ecdsa
=
EVP_PKEY_get1_EC
DSA
(
ret_pkey
);
ret_ecdsa
=
EVP_PKEY_get1_EC
_KEY
(
ret_pkey
);
if
(
ecdsa_cmp
(
ecdsa
,
ret_ecdsa
))
{
BIO_printf
(
bio_err
,
"TEST FAILED
\n
"
);
...
...
@@ -443,13 +448,13 @@ int main(void)
else
BIO_printf
(
bio_err
,
"TEST OK
\n
"
);
EVP_PKEY_free
(
ret_pkey
);
ret_pkey
=
NULL
;
EC
DSA
_free
(
ret_ecdsa
);
EC
_KEY
_free
(
ret_ecdsa
);
ret_ecdsa
=
NULL
;
PKCS8_PRIV_KEY_INFO_free
(
pkcs8
);
BIO_printf
(
bio_err
,
"PKCS8_EMBEDDED_PARAM : "
);
if
((
pkcs8
=
EVP_PKEY2PKCS8_broken
(
pkey
,
PKCS8_EMBEDDED_PARAM
))
==
NULL
)
goto
err
;
if
((
ret_pkey
=
EVP_PKCS82PKEY
(
pkcs8
))
==
NULL
)
goto
err
;
ret_ecdsa
=
EVP_PKEY_get1_EC
DSA
(
ret_pkey
);
ret_ecdsa
=
EVP_PKEY_get1_EC
_KEY
(
ret_pkey
);
if
(
ecdsa_cmp
(
ecdsa
,
ret_ecdsa
))
{
BIO_printf
(
bio_err
,
"TEST FAILED
\n
"
);
...
...
@@ -458,13 +463,13 @@ int main(void)
else
BIO_printf
(
bio_err
,
"TEST OK
\n
"
);
EVP_PKEY_free
(
ret_pkey
);
ret_pkey
=
NULL
;
EC
DSA
_free
(
ret_ecdsa
);
EC
_KEY
_free
(
ret_ecdsa
);
ret_ecdsa
=
NULL
;
PKCS8_PRIV_KEY_INFO_free
(
pkcs8
);
BIO_printf
(
bio_err
,
"PKCS8_NS_DB : "
);
if
((
pkcs8
=
EVP_PKEY2PKCS8_broken
(
pkey
,
PKCS8_NS_DB
))
==
NULL
)
goto
err
;
if
((
ret_pkey
=
EVP_PKCS82PKEY
(
pkcs8
))
==
NULL
)
goto
err
;
ret_ecdsa
=
EVP_PKEY_get1_EC
DSA
(
ret_pkey
);
ret_ecdsa
=
EVP_PKEY_get1_EC
_KEY
(
ret_pkey
);
if
(
ecdsa_cmp
(
ecdsa
,
ret_ecdsa
))
{
BIO_printf
(
bio_err
,
"TEST FAILED
\n
"
);
...
...
@@ -473,7 +478,7 @@ int main(void)
else
BIO_printf
(
bio_err
,
"TEST OK
\n
"
);
EVP_PKEY_free
(
ret_pkey
);
ret_pkey
=
NULL
;
EC
DSA
_free
(
ret_ecdsa
);
EC
_KEY
_free
(
ret_ecdsa
);
ret_ecdsa
=
NULL
;
EVP_PKEY_free
(
pkey
);
pkey
=
NULL
;
...
...
@@ -492,7 +497,7 @@ int main(void)
BIO_printf
(
bio_err
,
"Performing tests based on examples H.3.1 and H.3.2 of X9.62
\n
"
);
BIO_printf
(
bio_err
,
"PRIME_192_V1 : "
);
if
((
ecdsa
=
EC
DSA
_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
=
EC
_KEY
_new
())
==
NULL
)
goto
err
;
if
(
!
set_p192_param
(
ecdsa
))
goto
err
;
if
(
!
test_x962_sig_vrf
(
ecdsa
,
dgst
,
"6140507067065001063065065565667405560006161556565665656654"
,
"3342403536405981729393488334694600415596881826869351677613"
,
...
...
@@ -510,7 +515,7 @@ int main(void)
else
BIO_printf
(
bio_err
,
"OK
\n
"
);
EC
DSA
_free
(
ecdsa
);
EC
_KEY
_free
(
ecdsa
);
ecdsa
=
NULL
;
OPENSSL_free
(
dgst
);
dgst
=
NULL
;
...
...
@@ -522,10 +527,11 @@ int main(void)
if
(
!
RAND_bytes
(
digest
[
i
],
20
))
goto
err
;
BIO_printf
(
bio_err
,
"
\n
Testing sign & verify with NIST Prime-Curve P-192 :
\n
"
);
ECDSA_free
(
ecdsa
);
if
((
ecdsa
=
ECDSA_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
->
group
=
EC_GROUP_new_by_name
(
EC_GROUP_NIST_PRIME_192
))
==
NULL
)
goto
err
;
if
(
!
ECDSA_generate_key
(
ecdsa
))
goto
err
;
EC_KEY_free
(
ecdsa
);
if
((
ecdsa
=
EC_KEY_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
->
group
=
EC_GROUP_new_by_name
(
EC_GROUP_NIST_PRIME_192
))
==
NULL
)
goto
err
;
if
(
!
EC_KEY_generate_key
(
ecdsa
))
goto
err
;
tim
=
clock
();
for
(
i
=
0
;
i
<
ECDSA_NIST_TESTS
;
i
++
)
if
((
signatures
[
i
]
=
ECDSA_do_sign
(
digest
[
i
],
20
,
ecdsa
))
==
NULL
)
goto
err
;
...
...
@@ -548,10 +554,10 @@ int main(void)
/* EC_GROUP_NIST_PRIME_224 */
BIO_printf
(
bio_err
,
"Testing sign & verify with NIST Prime-Curve P-224 :
\n
"
);
EC
DSA
_free
(
ecdsa
);
if
((
ecdsa
=
EC
DSA
_new
())
==
NULL
)
goto
err
;
EC
_KEY
_free
(
ecdsa
);
if
((
ecdsa
=
EC
_KEY
_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
->
group
=
EC_GROUP_new_by_name
(
EC_GROUP_NIST_PRIME_224
))
==
NULL
)
goto
err
;
if
(
!
EC
DSA
_generate_key
(
ecdsa
))
goto
err
;
if
(
!
EC
_KEY
_generate_key
(
ecdsa
))
goto
err
;
tim
=
clock
();
for
(
i
=
0
;
i
<
ECDSA_NIST_TESTS
;
i
++
)
if
((
signatures
[
i
]
=
ECDSA_do_sign
(
digest
[
i
],
20
,
ecdsa
))
==
NULL
)
goto
err
;
...
...
@@ -574,10 +580,10 @@ int main(void)
/* EC_GROUP_NIST_PRIME_256 */
BIO_printf
(
bio_err
,
"Testing sign & verify with NIST Prime-Curve P-256 :
\n
"
);
EC
DSA
_free
(
ecdsa
);
if
((
ecdsa
=
EC
DSA
_new
())
==
NULL
)
goto
err
;
EC
_KEY
_free
(
ecdsa
);
if
((
ecdsa
=
EC
_KEY
_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
->
group
=
EC_GROUP_new_by_name
(
EC_GROUP_NIST_PRIME_256
))
==
NULL
)
goto
err
;
if
(
!
EC
DSA
_generate_key
(
ecdsa
))
goto
err
;
if
(
!
EC
_KEY
_generate_key
(
ecdsa
))
goto
err
;
tim
=
clock
();
for
(
i
=
0
;
i
<
ECDSA_NIST_TESTS
;
i
++
)
if
((
signatures
[
i
]
=
ECDSA_do_sign
(
digest
[
i
],
20
,
ecdsa
))
==
NULL
)
goto
err
;
...
...
@@ -600,10 +606,10 @@ int main(void)
/* EC_GROUP_NIST_PRIME_384 */
BIO_printf
(
bio_err
,
"Testing sign & verify with NIST Prime-Curve P-384 :
\n
"
);
EC
DSA
_free
(
ecdsa
);
if
((
ecdsa
=
EC
DSA
_new
())
==
NULL
)
goto
err
;
EC
_KEY
_free
(
ecdsa
);
if
((
ecdsa
=
EC
_KEY
_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
->
group
=
EC_GROUP_new_by_name
(
EC_GROUP_NIST_PRIME_384
))
==
NULL
)
goto
err
;
if
(
!
EC
DSA
_generate_key
(
ecdsa
))
goto
err
;
if
(
!
EC
_KEY
_generate_key
(
ecdsa
))
goto
err
;
tim
=
clock
();
for
(
i
=
0
;
i
<
ECDSA_NIST_TESTS
;
i
++
)
if
((
signatures
[
i
]
=
ECDSA_do_sign
(
digest
[
i
],
20
,
ecdsa
))
==
NULL
)
goto
err
;
...
...
@@ -626,10 +632,10 @@ int main(void)
/* EC_GROUP_NIST_PRIME_521 */
BIO_printf
(
bio_err
,
"Testing sign & verify with NIST Prime-Curve P-521 :
\n
"
);
EC
DSA
_free
(
ecdsa
);
if
((
ecdsa
=
EC
DSA
_new
())
==
NULL
)
goto
err
;
EC
_KEY
_free
(
ecdsa
);
if
((
ecdsa
=
EC
_KEY
_new
())
==
NULL
)
goto
err
;
if
((
ecdsa
->
group
=
EC_GROUP_new_by_name
(
EC_GROUP_NIST_PRIME_521
))
==
NULL
)
goto
err
;
if
(
!
EC
DSA
_generate_key
(
ecdsa
))
goto
err
;
if
(
!
EC
_KEY
_generate_key
(
ecdsa
))
goto
err
;
tim
=
clock
();
for
(
i
=
0
;
i
<
ECDSA_NIST_TESTS
;
i
++
)
if
((
signatures
[
i
]
=
ECDSA_do_sign
(
digest
[
i
],
20
,
ecdsa
))
==
NULL
)
goto
err
;
...
...
@@ -644,7 +650,7 @@ int main(void)
tim_d
=
(
double
)
tim
/
CLOCKS_PER_SEC
;
BIO_printf
(
bio_err
,
"%d x ECDSA_do_verify() in %.2f"
UNIT
" => average time for ECDSA_do_verify() %.4f"
UNIT
"
\n
"
,
ECDSA_NIST_TESTS
,
tim_d
,
tim_d
/
ECDSA_NIST_TESTS
);
EC
DSA
_free
(
ecdsa
);
EC
_KEY
_free
(
ecdsa
);
ecdsa
=
NULL
;
for
(
i
=
0
;
i
<
ECDSA_NIST_TESTS
;
i
++
)
{
...
...
@@ -665,7 +671,7 @@ err: if (!ret)
BIO_printf
(
bio_err
,
"TEST PASSED
\n
"
);
if
(
!
ret
)
ERR_print_errors
(
bio_err
);
if
(
ecdsa
)
EC
DSA
_free
(
ecdsa
);
if
(
ecdsa
)
EC
_KEY
_free
(
ecdsa
);
if
(
d
)
BN_free
(
d
);
if
(
dgst
)
OPENSSL_free
(
dgst
);
if
(
md_ctx
)
EVP_MD_CTX_destroy
(
md_ctx
);
...
...
crypto/ecdsa/ecs_asn1.c
浏览文件 @
14a7cfb3
...
...
@@ -65,324 +65,3 @@ ASN1_SEQUENCE(ECDSA_SIG) = {
DECLARE_ASN1_FUNCTIONS_const
(
ECDSA_SIG
)
DECLARE_ASN1_ENCODE_FUNCTIONS_const
(
ECDSA_SIG
,
ECDSA_SIG
)
IMPLEMENT_ASN1_FUNCTIONS_const
(
ECDSA_SIG
)
int
i2d_ECDSAParameters
(
ECDSA
*
a
,
unsigned
char
**
out
)
{
if
(
a
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPARAMETERS
,
ERR_R_PASSED_NULL_PARAMETER
);
return
0
;
}
return
i2d_ECPKParameters
(
a
->
group
,
out
);
}
ECDSA
*
d2i_ECDSAParameters
(
ECDSA
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
EC_GROUP
*
group
;
ECDSA
*
ret
;
if
(
in
==
NULL
||
*
in
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPARAMETERS
,
ERR_R_PASSED_NULL_PARAMETER
);
return
NULL
;
}
group
=
d2i_ECPKParameters
(
NULL
,
in
,
len
);
if
(
group
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPARAMETERS
,
ERR_R_EC_LIB
);
return
NULL
;
}
if
(
a
==
NULL
||
*
a
==
NULL
)
{
if
((
ret
=
ECDSA_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPARAMETERS
,
ERR_R_MALLOC_FAILURE
);
return
NULL
;
}
if
(
a
)
*
a
=
ret
;
}
else
ret
=
*
a
;
if
(
ret
->
group
)
EC_GROUP_clear_free
(
ret
->
group
);
ret
->
group
=
group
;
return
ret
;
}
ECDSA
*
d2i_ECDSAPrivateKey
(
ECDSA
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
int
ok
=
0
;
ECDSA
*
ret
=
NULL
;
EC_PRIVATEKEY
*
priv_key
=
NULL
;
if
((
priv_key
=
EC_PRIVATEKEY_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
return
NULL
;
}
if
((
priv_key
=
d2i_EC_PRIVATEKEY
(
&
priv_key
,
in
,
len
))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
EC_PRIVATEKEY_free
(
priv_key
);
return
NULL
;
}
if
(
a
==
NULL
||
*
a
==
NULL
)
{
if
((
ret
=
ECDSA_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
if
(
a
)
*
a
=
ret
;
}
else
ret
=
*
a
;
if
(
priv_key
->
parameters
)
{
if
(
ret
->
group
)
EC_GROUP_clear_free
(
ret
->
group
);
ret
->
group
=
EC_ASN1_pkparameters2group
(
priv_key
->
parameters
);
}
if
(
ret
->
group
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
ret
->
version
=
priv_key
->
version
;
if
(
priv_key
->
privateKey
)
{
ret
->
priv_key
=
BN_bin2bn
(
M_ASN1_STRING_data
(
priv_key
->
privateKey
),
M_ASN1_STRING_length
(
priv_key
->
privateKey
),
ret
->
priv_key
);
if
(
ret
->
priv_key
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_BN_LIB
);
goto
err
;
}
}
else
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ECDSA_R_MISSING_PRIVATE_KEY
);
goto
err
;
}
if
(
priv_key
->
publicKey
)
{
if
(
ret
->
pub_key
)
EC_POINT_clear_free
(
ret
->
pub_key
);
ret
->
pub_key
=
EC_POINT_new
(
ret
->
group
);
if
(
ret
->
pub_key
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
EC_POINT_oct2point
(
ret
->
group
,
ret
->
pub_key
,
M_ASN1_STRING_data
(
priv_key
->
publicKey
),
M_ASN1_STRING_length
(
priv_key
->
publicKey
),
NULL
))
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
}
ok
=
1
;
err:
if
(
!
ok
)
{
if
(
ret
)
ECDSA_free
(
ret
);
ret
=
NULL
;
}
if
(
priv_key
)
EC_PRIVATEKEY_free
(
priv_key
);
return
(
ret
);
}
int
i2d_ECDSAPrivateKey
(
ECDSA
*
a
,
unsigned
char
**
out
)
{
int
ret
=
0
,
ok
=
0
;
unsigned
char
*
buffer
=
NULL
;
size_t
buf_len
=
0
,
tmp_len
;
EC_PRIVATEKEY
*
priv_key
=
NULL
;
if
(
a
==
NULL
||
a
->
group
==
NULL
||
a
->
priv_key
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_PASSED_NULL_PARAMETER
);
goto
err
;
}
if
((
priv_key
=
EC_PRIVATEKEY_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
priv_key
->
version
=
a
->
version
;
buf_len
=
(
size_t
)
BN_num_bytes
(
a
->
priv_key
);
buffer
=
OPENSSL_malloc
(
buf_len
);
if
(
buffer
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
if
(
!
BN_bn2bin
(
a
->
priv_key
,
buffer
))
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_BN_LIB
);
goto
err
;
}
if
(
!
M_ASN1_OCTET_STRING_set
(
priv_key
->
privateKey
,
buffer
,
buf_len
))
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_ASN1_LIB
);
goto
err
;
}
if
(
!
(
ECDSA_get_enc_flag
(
a
)
&
ECDSA_PKEY_NO_PARAMETERS
))
{
if
((
priv_key
->
parameters
=
EC_ASN1_group2pkparameters
(
a
->
group
,
priv_key
->
parameters
))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
}
if
(
!
(
ECDSA_get_enc_flag
(
a
)
&
ECDSA_PKEY_NO_PUBKEY
))
{
priv_key
->
publicKey
=
M_ASN1_BIT_STRING_new
();
if
(
priv_key
->
publicKey
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
tmp_len
=
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
ECDSA_get_conversion_form
(
a
),
NULL
,
0
,
NULL
);
if
(
tmp_len
>
buf_len
)
buffer
=
OPENSSL_realloc
(
buffer
,
tmp_len
);
if
(
buffer
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
buf_len
=
tmp_len
;
if
(
!
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
ECDSA_get_conversion_form
(
a
),
buffer
,
buf_len
,
NULL
))
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
M_ASN1_BIT_STRING_set
(
priv_key
->
publicKey
,
buffer
,
buf_len
))
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_ASN1_LIB
);
goto
err
;
}
}
if
((
ret
=
i2d_EC_PRIVATEKEY
(
priv_key
,
out
))
==
0
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
ok
=
1
;
err:
if
(
buffer
)
OPENSSL_free
(
buffer
);
if
(
priv_key
)
EC_PRIVATEKEY_free
(
priv_key
);
return
(
ok
?
ret
:
0
);
}
ECDSA
*
ECDSAPublicKey_set_octet_string
(
ECDSA
**
a
,
const
unsigned
char
**
in
,
long
len
)
{
ECDSA
*
ret
=
NULL
;
if
(
a
==
NULL
||
(
*
a
)
==
NULL
||
(
*
a
)
->
group
==
NULL
)
{
/* sorry, but a EC_GROUP-structur is necessary
* to set the public key */
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ECDSA_R_MISSING_PARAMETERS
);
return
0
;
}
ret
=
*
a
;
if
(
ret
->
pub_key
==
NULL
&&
(
ret
->
pub_key
=
EC_POINT_new
(
ret
->
group
))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_MALLOC_FAILURE
);
return
0
;
}
if
(
!
EC_POINT_oct2point
(
ret
->
group
,
ret
->
pub_key
,
*
in
,
len
,
NULL
))
{
ECDSAerr
(
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
ERR_R_EC_LIB
);
return
0
;
}
ECDSA_set_conversion_form
(
ret
,
(
point_conversion_form_t
)(
*
in
[
0
]
&
~
0x01
));
return
ret
;
}
int
ECDSAPublicKey_get_octet_string
(
ECDSA
*
a
,
unsigned
char
**
out
)
{
size_t
buf_len
=
0
;
if
(
a
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPUBLICKEY
,
ECDSA_R_MISSING_PARAMETERS
);
return
0
;
}
buf_len
=
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
ECDSA_get_conversion_form
(
a
),
NULL
,
0
,
NULL
);
if
(
out
==
NULL
||
buf_len
==
0
)
/* out == NULL => just return the length of the octet string */
return
buf_len
;
if
(
*
out
==
NULL
)
if
((
*
out
=
OPENSSL_malloc
(
buf_len
))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPUBLICKEY
,
ERR_R_MALLOC_FAILURE
);
return
0
;
}
if
(
!
EC_POINT_point2oct
(
a
->
group
,
a
->
pub_key
,
ECDSA_get_conversion_form
(
a
),
*
out
,
buf_len
,
NULL
))
{
ECDSAerr
(
ECDSA_F_I2D_ECDSAPUBLICKEY
,
ERR_R_EC_LIB
);
OPENSSL_free
(
*
out
);
*
out
=
NULL
;
return
0
;
}
return
buf_len
;
}
crypto/ecdsa/ecs_err.c
浏览文件 @
14a7cfb3
...
...
@@ -66,75 +66,21 @@
#ifndef OPENSSL_NO_ERR
static
ERR_STRING_DATA
ECDSA_str_functs
[]
=
{
{
ERR_PACK
(
0
,
ECDSA_F_D2I_ECDSAPARAMETERS
,
0
),
"d2i_ECDSAParameters"
},
{
ERR_PACK
(
0
,
ECDSA_F_D2I_ECDSAPRIVATEKEY
,
0
),
"d2i_ECDSAPrivateKey"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSAPARAMETERS_PRINT
,
0
),
"ECDSAParameters_print"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSAPARAMETERS_PRINT_FP
,
0
),
"ECDSAParameters_print_fp"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_DATA_NEW
,
0
),
"ECDSA_DATA_new"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_DO_SIGN
,
0
),
"ECDSA_do_sign"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_DO_VERIFY
,
0
),
"ECDSA_do_verify"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GENERATE_KEY
,
0
),
"ECDSA_generate_key"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GET
,
0
),
"ECDSA_GET"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GET_CURVE_NID
,
0
),
"ECDSA_GET_CURVE_NID"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GET_ECDSA
,
0
),
"ECDSA_GET_ECDSA"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GET_EC_PARAMETERS
,
0
),
"ECDSA_GET_EC_PARAMETERS"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GET_X9_62_CURVE
,
0
),
"ECDSA_GET_X9_62_CURVE"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GET_X9_62_EC_PARAMETERS
,
0
),
"ECDSA_GET_X9_62_EC_PARAMETERS"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_GET_X9_62_FIELDID
,
0
),
"ECDSA_GET_X9_62_FIELDID"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_NEW
,
0
),
"ECDSA_new"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_PRINT
,
0
),
"ECDSA_print"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_PRINT_FP
,
0
),
"ECDSA_print_fp"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_SET_GROUP_P
,
0
),
"ECDSA_SET_GROUP_P"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_SET_PRIME_GROUP
,
0
),
"ECDSA_SET_PRIME_GROUP"
},
{
ERR_PACK
(
0
,
ECDSA_F_ECDSA_SIGN_SETUP
,
0
),
"ECDSA_sign_setup"
},
{
ERR_PACK
(
0
,
ECDSA_F_I2D_ECDSAPARAMETERS
,
0
),
"i2d_ECDSAParameters"
},
{
ERR_PACK
(
0
,
ECDSA_F_I2D_ECDSAPRIVATEKEY
,
0
),
"i2d_ECDSAPrivateKey"
},
{
ERR_PACK
(
0
,
ECDSA_F_I2D_ECDSAPUBLICKEY
,
0
),
"I2D_ECDSAPUBLICKEY"
},
{
ERR_PACK
(
0
,
ECDSA_F_SIG_CB
,
0
),
"SIG_CB"
},
{
0
,
NULL
}
};
static
ERR_STRING_DATA
ECDSA_str_reasons
[]
=
{
{
ECDSA_R_BAD_SIGNATURE
,
"bad signature"
},
{
ECDSA_R_CAN_NOT_GET_GENERATOR
,
"can not get generator"
},
{
ECDSA_R_D2I_ECDSAPRIVATEKEY_MISSING_PRIVATE_KEY
,
"d2i ecdsaprivatekey missing private key"
},
{
ECDSA_R_D2I_ECDSA_PRIVATEKEY_FAILURE
,
"d2i ecdsa privatekey failure"
},
{
ECDSA_R_D2I_EC_PARAMETERS_FAILURE
,
"d2i ec parameters failure"
},
{
ECDSA_R_D2I_X9_62_EC_PARAMETERS_FAILURE
,
"d2i x9 62 ec parameters failure"
},
{
ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE
,
"data too large for key size"
},
{
ECDSA_R_ECDSAPRIVATEKEY_NEW_FAILURE
,
"ecdsaprivatekey new failure"
},
{
ECDSA_R_ECDSA_F_ECDSA_NEW
,
"ecdsa f ecdsa new"
},
{
ECDSA_R_ECDSA_GET_EC_PARAMETERS_FAILURE
,
"ecdsa get ec parameters failure"
},
{
ECDSA_R_ECDSA_GET_FAILURE
,
"ecdsa get failure"
},
{
ECDSA_R_ECDSA_GET_X9_62_CURVE_FAILURE
,
"ecdsa get x9 62 curve failure"
},
{
ECDSA_R_ECDSA_GET_X9_62_EC_PARAMETERS_FAILURE
,
"ecdsa get x9 62 ec parameters failure"
},
{
ECDSA_R_ECDSA_GET_X9_62_FIELDID_FAILURE
,
"ecdsa get x9 62 fieldid failure"
},
{
ECDSA_R_ECDSA_NEW_FAILURE
,
"ecdsa new failure"
},
{
ECDSA_R_ECDSA_R_D2I_EC_PARAMETERS_FAILURE
,
"ecdsa r d2i ec parameters failure"
},
{
ECDSA_R_ECDSA_R_D2I_X9_62_EC_PARAMETERS_FAILURE
,
"ecdsa r d2i x9 62 ec parameters failure"
},
{
ECDSA_R_ECPARAMETERS2ECDSA_FAILURE
,
"ecparameters2ecdsa failure"
},
{
ECDSA_R_EC_GROUP_NID2CURVE_FAILURE
,
"ec group nid2curve failure"
},
{
ECDSA_R_ERR_EC_LIB
,
"err ec lib"
},
{
ECDSA_R_I2D_ECDSA_PRIVATEKEY
,
"i2d ecdsa privatekey"
},
{
ECDSA_R_I2D_ECDSA_PUBLICKEY
,
"i2d ecdsa publickey"
},
{
ECDSA_R_MISSING_PARAMETERS
,
"missing parameters"
},
{
ECDSA_R_MISSING_PRIVATE_KEY
,
"missing private key"
},
{
ECDSA_R_NOT_SUPPORTED
,
"not supported"
},
{
ECDSA_R_NO_CURVE_PARAMETER_A_SPECIFIED
,
"no curve parameter a specified"
},
{
ECDSA_R_NO_CURVE_PARAMETER_B_SPECIFIED
,
"no curve parameter b specified"
},
{
ECDSA_R_NO_CURVE_SPECIFIED
,
"no curve specified"
},
{
ECDSA_R_NO_FIELD_SPECIFIED
,
"no field specified"
},
{
ECDSA_R_PRIME_MISSING
,
"prime missing"
},
{
ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED
,
"random number generation failed"
},
{
ECDSA_R_SIGNATURE_MALLOC_FAILED
,
"signature malloc failed"
},
{
ECDSA_R_UNEXPECTED_ASN1_TYPE
,
"unexpected asn1 type"
},
{
ECDSA_R_UNEXPECTED_PARAMETER
,
"unexpected parameter"
},
{
ECDSA_R_UNEXPECTED_PARAMETER_LENGTH
,
"unexpected parameter length"
},
{
ECDSA_R_UNEXPECTED_VERSION_NUMER
,
"unexpected version numer"
},
{
ECDSA_R_UNKNOWN_PARAMETERS_TYPE
,
"unknown parameters type"
},
{
ECDSA_R_WRONG_FIELD_IDENTIFIER
,
"wrong field identifier"
},
{
ECDSA_R_X9_62_CURVE_NEW_FAILURE
,
"x9 62 curve new failure"
},
{
ECDSA_R_X9_62_EC_PARAMETERS_NEW_FAILURE
,
"x9 62 ec parameters new failure"
},
{
0
,
NULL
}
};
...
...
crypto/ecdsa/ecs_gen.c
已删除
100644 → 0
浏览文件 @
7a8645d1
/* crypto/ecdsa/ecs_gen.c */
/* ====================================================================
* Copyright (c) 1998-2002 The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. All advertising materials mentioning features or use of this
* software must display the following acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
*
* 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
* endorse or promote products derived from this software without
* prior written permission. For written permission, please contact
* openssl-core@OpenSSL.org.
*
* 5. Products derived from this software may not be called "OpenSSL"
* nor may "OpenSSL" appear in their names without prior written
* permission of the OpenSSL Project.
*
* 6. Redistributions of any form whatsoever must retain the following
* acknowledgment:
* "This product includes software developed by the OpenSSL Project
* for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
*
* THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
* EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
* STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
* ====================================================================
*
* This product includes cryptographic software written by Eric Young
* (eay@cryptsoft.com). This product includes software written by Tim
* Hudson (tjh@cryptsoft.com).
*
*/
/* TODO: implementation of ecdsa parameter generation
*/
#if 0
#include <stdio.h>
#include <time.h>
#include "cryptlib.h"
#include <openssl/evp.h>
#include <openssl/bn.h>
#include <openssl/ecdsa.h>
#include <openssl/rand.h>
#include <openssl/sha.h>
#ifdef __cplusplus
extern "C" {
#endif
ECDSA *ECDSA_generate_parameters(int bits,
unsigned char *seed_in, int seed_len,
int *counter_ret, unsigned long *h_ret,
void (*callback)(int, int, void *),
void *cb_arg)
{
return NULL;
}
#ifdef __cplusplus
}
#endif
#else
static
void
*
dummy
=&
dummy
;
#endif
crypto/ecdsa/ecs_lib.c
浏览文件 @
14a7cfb3
...
...
@@ -58,6 +58,8 @@
const
char
*
ECDSA_version
=
"ECDSA"
OPENSSL_VERSION_PTEXT
;
static
void
ecdsa_finish
(
EC_KEY
*
);
static
const
ECDSA_METHOD
*
default_ECDSA_method
=
NULL
;
void
ECDSA_set_default_method
(
const
ECDSA_METHOD
*
meth
)
...
...
@@ -72,37 +74,56 @@ const ECDSA_METHOD *ECDSA_get_default_method(void)
return
default_ECDSA_method
;
}
ECDSA
*
ECDSA_new
(
void
)
{
return
ECDSA_new_method
(
NULL
);
}
int
ECDSA_set_method
(
ECDSA
*
ecdsa
,
const
ECDSA_METHOD
*
meth
)
int
ECDSA_set_method
(
EC_KEY
*
eckey
,
const
ECDSA_METHOD
*
meth
)
{
const
ECDSA_METHOD
*
mtmp
;
ECDSA_DATA
*
ecdsa
;
ecdsa
=
ecdsa_check
(
eckey
);
if
(
ecdsa
==
NULL
)
return
0
;
mtmp
=
ecdsa
->
meth
;
if
(
mtmp
->
finish
)
mtmp
->
finish
(
ecdsa
);
#if 0
if (mtmp->finish)
mtmp->finish(eckey);
#endif
if
(
ecdsa
->
engine
)
{
ENGINE_finish
(
ecdsa
->
engine
);
ecdsa
->
engine
=
NULL
;
}
ecdsa
->
meth
=
meth
;
if
(
meth
->
init
)
meth
->
init
(
ecdsa
);
#if 0
if (meth->init)
meth->init(eckey);
#endif
return
1
;
}
ECDSA
*
ECDSA_new_method
(
ENGINE
*
engine
)
ECDSA_DATA
*
ECDSA_DATA_new
(
void
)
{
return
ECDSA_DATA_new_method
(
NULL
);
}
ECDSA_DATA
*
ECDSA_DATA_new_method
(
ENGINE
*
engine
)
{
ECDSA
*
ret
;
ECDSA
_DATA
*
ret
;
ret
=
(
ECDSA
*
)
OPENSSL_malloc
(
sizeof
(
ECDS
A
));
ret
=
(
ECDSA
_DATA
*
)
OPENSSL_malloc
(
sizeof
(
ECDSA_DAT
A
));
if
(
ret
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_
NEW
,
ERR_R_MALLOC_FAILURE
);
ECDSAerr
(
ECDSA_F_ECDSA_
DATA_NEW
,
ERR_R_MALLOC_FAILURE
);
return
(
NULL
);
}
ret
->
init
=
NULL
;
ret
->
finish
=
ecdsa_finish
;
ret
->
kinv
=
NULL
;
ret
->
r
=
NULL
;
ret
->
meth
=
ECDSA_get_default_method
();
ret
->
engine
=
engine
;
if
(
!
ret
->
engine
)
...
...
@@ -112,73 +133,69 @@ ECDSA *ECDSA_new_method(ENGINE *engine)
ret
->
meth
=
ENGINE_get_ECDSA
(
ret
->
engine
);
if
(
!
ret
->
meth
)
{
ECDSAerr
(
ECDSA_
R_ECDSA_F_ECDS
A_NEW
,
ERR_R_ENGINE_LIB
);
ECDSAerr
(
ECDSA_
F_ECDSA_DAT
A_NEW
,
ERR_R_ENGINE_LIB
);
ENGINE_finish
(
ret
->
engine
);
OPENSSL_free
(
ret
);
return
NULL
;
}
}
ret
->
version
=
1
;
ret
->
conversion_form
=
ECDSA_get_default_conversion_form
();
ret
->
group
=
NULL
;
ret
->
pub_key
=
NULL
;
ret
->
priv_key
=
NULL
;
ret
->
kinv
=
NULL
;
ret
->
r
=
NULL
;
ret
->
enc_flag
=
0
;
ret
->
references
=
1
;
ret
->
flags
=
ret
->
meth
->
flags
;
CRYPTO_new_ex_data
(
CRYPTO_EX_INDEX_ECDSA
,
ret
,
&
ret
->
ex_data
);
#if 0
if ((ret->meth->init != NULL) && !ret->meth->init(ret))
{
CRYPTO_free_ex_data(CRYPTO_EX_INDEX_ECDSA, ret, &ret->ex_data);
OPENSSL_free(ret);
ret=NULL;
}
#endif
return
(
ret
);
}
void
ECDSA_
free
(
ECDS
A
*
r
)
void
ECDSA_
DATA_free
(
ECDSA_DAT
A
*
r
)
{
int
i
;
if
(
r
==
NULL
)
return
;
i
=
CRYPTO_add
(
&
r
->
references
,
-
1
,
CRYPTO_LOCK_ECDSA
);
#ifdef REF_PRINT
REF_PRINT
(
"ECDSA"
,
r
);
#endif
if
(
i
>
0
)
return
;
#ifdef REF_CHECK
if
(
i
<
0
)
{
fprintf
(
stderr
,
"ECDSA_free, bad reference count
\n
"
);
abort
();
}
#endif
if
(
r
->
kinv
)
BN_clear_free
(
r
->
kinv
);
if
(
r
->
r
)
BN_clear_free
(
r
->
r
);
#if 0
if (r->meth->finish)
r->meth->finish(r);
#endif
if
(
r
->
engine
)
ENGINE_finish
(
r
->
engine
);
CRYPTO_free_ex_data
(
CRYPTO_EX_INDEX_ECDSA
,
r
,
&
r
->
ex_data
);
if
(
r
->
group
!=
NULL
)
EC_GROUP_free
(
r
->
group
);
if
(
r
->
pub_key
!=
NULL
)
EC_POINT_free
(
r
->
pub_key
);
if
(
r
->
priv_key
!=
NULL
)
BN_clear_free
(
r
->
priv_key
);
if
(
r
->
kinv
!=
NULL
)
BN_clear_free
(
r
->
kinv
);
if
(
r
->
r
!=
NULL
)
BN_clear_free
(
r
->
r
);
memset
((
void
*
)
r
,
0x0
,
sizeof
(
ECDSA_DATA
));
OPENSSL_free
(
r
);
}
int
ECDSA_size
(
const
ECDSA
*
r
)
ECDSA_DATA
*
ecdsa_check
(
EC_KEY
*
key
)
{
if
(
key
->
meth_data
)
{
if
(
key
->
meth_data
->
finish
!=
ecdsa_finish
)
{
key
->
meth_data
->
finish
(
key
);
key
->
meth_data
=
(
EC_KEY_METH_DATA
*
)
ECDSA_DATA_new
();
}
}
else
key
->
meth_data
=
(
EC_KEY_METH_DATA
*
)
ECDSA_DATA_new
();
return
(
ECDSA_DATA
*
)
key
->
meth_data
;
}
static
void
ecdsa_finish
(
EC_KEY
*
key
)
{
if
(
key
->
meth_data
&&
key
->
meth_data
->
finish
==
ecdsa_finish
)
ECDSA_DATA_free
((
ECDSA_DATA
*
)
key
->
meth_data
);
}
int
ECDSA_size
(
const
EC_KEY
*
r
)
{
int
ret
,
i
;
ASN1_INTEGER
bs
;
...
...
@@ -207,6 +224,7 @@ int ECDSA_size(const ECDSA *r)
return
(
ret
);
}
int
ECDSA_get_ex_new_index
(
long
argl
,
void
*
argp
,
CRYPTO_EX_new
*
new_func
,
CRYPTO_EX_dup
*
dup_func
,
CRYPTO_EX_free
*
free_func
)
{
...
...
@@ -214,60 +232,20 @@ int ECDSA_get_ex_new_index(long argl, void *argp, CRYPTO_EX_new *new_func,
new_func
,
dup_func
,
free_func
);
}
int
ECDSA_set_ex_data
(
EC
DSA
*
d
,
int
idx
,
void
*
arg
)
int
ECDSA_set_ex_data
(
EC
_KEY
*
d
,
int
idx
,
void
*
arg
)
{
return
(
CRYPTO_set_ex_data
(
&
d
->
ex_data
,
idx
,
arg
));
}
void
*
ECDSA_get_ex_data
(
ECDSA
*
d
,
int
idx
)
{
return
(
CRYPTO_get_ex_data
(
&
d
->
ex_data
,
idx
));
}
int
ECDSA_up_ref
(
ECDSA
*
ecdsa
)
{
int
i
=
CRYPTO_add
(
&
ecdsa
->
references
,
1
,
CRYPTO_LOCK_ECDSA
);
#ifdef REF_PRINT
REF_PRINT
(
"ECDSA"
,
r
);
#endif
#ifdef REF_CHECK
if
(
i
<
2
)
{
fprintf
(
stderr
,
"ECDSA_up_ref, bad reference count
\n
"
);
abort
();
}
#endif
return
((
i
>
1
)
?
1
:
0
);
}
void
ECDSA_set_conversion_form
(
ECDSA
*
ecdsa
,
const
point_conversion_form_t
form
)
{
if
(
ecdsa
)
ecdsa
->
conversion_form
=
form
;
}
point_conversion_form_t
ECDSA_get_conversion_form
(
const
ECDSA
*
ecdsa
)
{
return
ecdsa
?
ecdsa
->
conversion_form
:
0
;
}
static
point_conversion_form_t
default_conversion_form
=
POINT_CONVERSION_UNCOMPRESSED
;
void
ECDSA_set_default_conversion_form
(
const
point_conversion_form_t
form
)
{
default_conversion_form
=
form
;
}
point_conversion_form_t
ECDSA_get_default_conversion_form
(
void
)
{
return
default_conversion_form
;
}
unsigned
int
ECDSA_get_enc_flag
(
const
ECDSA
*
ecdsa
)
{
return
ecdsa
->
enc_flag
;
ECDSA_DATA
*
ecdsa
;
ecdsa
=
ecdsa_check
(
d
);
if
(
ecdsa
==
NULL
)
return
0
;
return
(
CRYPTO_set_ex_data
(
&
ecdsa
->
ex_data
,
idx
,
arg
));
}
void
ECDSA_set_enc_flag
(
ECDSA
*
ecdsa
,
unsigned
int
flag
)
void
*
ECDSA_get_ex_data
(
EC_KEY
*
d
,
int
idx
)
{
ecdsa
->
enc_flag
=
flag
;
ECDSA_DATA
*
ecdsa
;
ecdsa
=
ecdsa_check
(
d
);
if
(
ecdsa
==
NULL
)
return
NULL
;
return
(
CRYPTO_get_ex_data
(
&
ecdsa
->
ex_data
,
idx
));
}
crypto/ecdsa/ecs_ossl.c
浏览文件 @
14a7cfb3
...
...
@@ -55,22 +55,26 @@
#include "ecdsa.h"
#include <openssl/err.h>
#include <openssl/obj_mac.h>
/* TODO : general case */
#define EC_POINT_get_affine_coordinates EC_POINT_get_affine_coordinates_GFp
static
ECDSA_SIG
*
ecdsa_do_sign
(
const
unsigned
char
*
dgst
,
int
dlen
,
ECDSA
*
ecdsa
);
static
int
ecdsa_sign_setup
(
ECDSA
*
ecdsa
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
);
static
int
ecdsa_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
ECDSA
*
ecdsa
);
static
ECDSA_SIG
*
ecdsa_do_sign
(
const
unsigned
char
*
dgst
,
int
dlen
,
EC_KEY
*
eckey
);
static
int
ecdsa_sign_setup
(
EC_KEY
*
eckey
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
);
static
int
ecdsa_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
);
static
ECDSA_METHOD
openssl_ecdsa_meth
=
{
"OpenSSL ECDSA method"
,
ecdsa_do_sign
,
ecdsa_sign_setup
,
ecdsa_do_verify
,
0
,
NULL
"OpenSSL ECDSA method"
,
ecdsa_do_sign
,
ecdsa_sign_setup
,
ecdsa_do_verify
,
#if 0
NULL, /* init */
NULL, /* finish */
#endif
0
,
/* flags */
NULL
/* app_data */
};
const
ECDSA_METHOD
*
ECDSA_OpenSSL
(
void
)
...
...
@@ -78,35 +82,52 @@ const ECDSA_METHOD *ECDSA_OpenSSL(void)
return
&
openssl_ecdsa_meth
;
}
static
int
ecdsa_sign_setup
(
ECDSA
*
ecdsa
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
)
static
int
ecdsa_sign_setup
(
EC_KEY
*
eckey
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
)
{
BN_CTX
*
ctx
=
NULL
;
BIGNUM
k
,
*
kinv
=
NULL
,
*
r
=
NULL
,
*
order
=
NULL
,
*
X
=
NULL
;
EC_POINT
*
tmp_point
=
NULL
;
int
ret
=
0
,
reason
=
ERR_R_BN_LIB
;
if
(
!
ec
dsa
||
!
ecdsa
->
group
||
!
ecdsa
->
pub_key
||
!
ecdsa
->
priv_key
)
int
ret
=
0
;
if
(
!
ec
key
||
!
eckey
->
group
||
!
eckey
->
pub_key
||
!
eckey
->
priv_key
)
{
reason
=
ECDSA_R_MISSING_PARAMETERS
;
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_PASSED_NULL_PARAMETER
)
;
return
0
;
}
if
(
ctx_in
==
NULL
)
{
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
}
else
ctx
=
ctx_in
;
if
((
r
=
BN_new
())
==
NULL
)
goto
err
;
if
((
order
=
BN_new
())
==
NULL
)
goto
err
;
if
((
X
=
BN_new
())
==
NULL
)
goto
err
;
if
((
tmp_point
=
EC_POINT_new
(
ecdsa
->
group
))
==
NULL
)
if
((
r
=
BN_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_BN_LIB
);
goto
err
;
}
if
((
order
=
BN_new
())
==
NULL
)
{
reason
=
ERR_R_EC_LIB
;
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_BN_LIB
);
goto
err
;
}
if
((
X
=
BN_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_BN_LIB
);
goto
err
;
}
if
((
tmp_point
=
EC_POINT_new
(
eckey
->
group
))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
EC_GROUP_get_order
(
ec
dsa
->
group
,
order
,
ctx
))
if
(
!
EC_GROUP_get_order
(
ec
key
->
group
,
order
,
ctx
))
{
reason
=
ERR_R_EC_LIB
;
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_EC_LIB
)
;
goto
err
;
}
...
...
@@ -117,24 +138,53 @@ static int ecdsa_sign_setup(ECDSA *ecdsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM
do
if
(
!
BN_rand_range
(
&
k
,
order
))
{
reason
=
ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED
;
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ECDSA_R_RANDOM_NUMBER_GENERATION_FAILED
);
goto
err
;
}
while
(
BN_is_zero
(
&
k
));
/* compute r the x-coordinate of generator * k */
if
(
!
EC_POINT_mul
(
ecdsa
->
group
,
tmp_point
,
&
k
,
NULL
,
NULL
,
ctx
)
||
!
EC_POINT_get_affine_coordinates
(
ecdsa
->
group
,
tmp_point
,
X
,
NULL
,
ctx
))
if
(
!
EC_POINT_mul
(
eckey
->
group
,
tmp_point
,
&
k
,
NULL
,
NULL
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
EC_METHOD_get_field_type
(
EC_GROUP_method_of
(
eckey
->
group
))
==
NID_X9_62_prime_field
)
{
if
(
!
EC_POINT_get_affine_coordinates_GFp
(
eckey
->
group
,
tmp_point
,
X
,
NULL
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_EC_LIB
);
goto
err
;
}
}
else
/* NID_X9_62_characteristic_two_field */
{
if
(
!
EC_POINT_get_affine_coordinates_GF2m
(
eckey
->
group
,
tmp_point
,
X
,
NULL
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_EC_LIB
);
goto
err
;
}
}
if
(
!
BN_nnmod
(
r
,
X
,
order
,
ctx
))
{
reason
=
ERR_R_EC_LIB
;
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_BN_LIB
)
;
goto
err
;
}
if
(
!
BN_nnmod
(
r
,
X
,
order
,
ctx
))
goto
err
;
}
while
(
BN_is_zero
(
r
));
/* compute the inverse of k */
if
((
kinv
=
BN_mod_inverse
(
NULL
,
&
k
,
order
,
ctx
))
==
NULL
)
goto
err
;
if
((
kinv
=
BN_mod_inverse
(
NULL
,
&
k
,
order
,
ctx
))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_BN_LIB
);
goto
err
;
}
if
(
*
rp
==
NULL
)
BN_clear_free
(
*
rp
);
...
...
@@ -147,7 +197,6 @@ static int ecdsa_sign_setup(ECDSA *ecdsa, BN_CTX *ctx_in, BIGNUM **kinvp, BIGNUM
err:
if
(
!
ret
)
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
reason
);
if
(
kinv
!=
NULL
)
BN_clear_free
(
kinv
);
if
(
r
!=
NULL
)
BN_clear_free
(
r
);
}
...
...
@@ -165,44 +214,60 @@ err:
}
static
ECDSA_SIG
*
ecdsa_do_sign
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA
*
ecdsa
)
static
ECDSA_SIG
*
ecdsa_do_sign
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
EC_KEY
*
eckey
)
{
BIGNUM
*
kinv
=
NULL
,
*
r
=
NULL
,
*
s
=
NULL
,
*
m
=
NULL
,
*
tmp
=
NULL
,
*
order
=
NULL
;
BIGNUM
xr
;
BN_CTX
*
ctx
=
NULL
;
int
reason
=
ERR_R_BN_LIB
;
ECDSA_SIG
*
ret
=
NULL
;
ECDSA_DATA
*
ecdsa
;
ecdsa
=
ecdsa_check
(
eckey
);
if
(
!
ecdsa
||
!
ecdsa
->
group
||
!
ecdsa
->
pub_key
||
!
ecdsa
->
priv_key
)
if
(
!
eckey
||
!
eckey
->
group
||
!
eckey
->
pub_key
||
!
eckey
->
priv_key
||
!
ecdsa
)
{
reason
=
ECDSA_R_MISSING_PARAMETERS
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_PASSED_NULL_PARAMETER
)
;
goto
err
;
}
BN_init
(
&
xr
);
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
order
=
BN_new
())
==
NULL
)
goto
err
;
if
((
tmp
=
BN_new
())
==
NULL
)
goto
err
;
if
((
m
=
BN_new
())
==
NULL
)
goto
err
;
if
((
s
=
BN_new
())
==
NULL
)
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
||
(
order
=
BN_new
())
==
NULL
||
(
tmp
=
BN_new
())
==
NULL
||
(
m
=
BN_new
())
==
NULL
||
(
s
=
BN_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
if
(
!
EC_GROUP_get_order
(
ec
dsa
->
group
,
order
,
ctx
))
if
(
!
EC_GROUP_get_order
(
ec
key
->
group
,
order
,
ctx
))
{
reason
=
ECDSA_R_ERR_EC_LIB
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_EC_LIB
)
;
goto
err
;
}
if
(
dgst_len
>
BN_num_bytes
(
order
))
{
reason
=
ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ECDSA_R_DATA_TOO_LARGE_FOR_KEY_SIZE
);
goto
err
;
}
if
(
BN_bin2bn
(
dgst
,
dgst_len
,
m
)
==
NULL
)
goto
err
;
if
(
BN_bin2bn
(
dgst
,
dgst_len
,
m
)
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_BN_LIB
);
goto
err
;
}
do
{
if
(
(
ecdsa
->
kinv
==
NULL
)
||
(
ecdsa
->
r
==
NULL
)
)
if
(
ecdsa
->
kinv
==
NULL
||
ecdsa
->
r
==
NULL
)
{
if
(
!
ECDSA_sign_setup
(
ecdsa
,
ctx
,
&
kinv
,
&
r
))
goto
err
;
if
(
!
ECDSA_sign_setup
(
eckey
,
ctx
,
&
kinv
,
&
r
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_ECDSA_LIB
);
goto
err
;
}
}
else
{
...
...
@@ -212,109 +277,174 @@ static ECDSA_SIG *ecdsa_do_sign(const unsigned char *dgst, int dgst_len, ECDSA *
ecdsa
->
r
=
NULL
;
}
if
(
!
BN_mod_mul
(
tmp
,
ecdsa
->
priv_key
,
r
,
order
,
ctx
))
goto
err
;
if
(
!
BN_add
(
s
,
tmp
,
m
))
goto
err
;
if
(
!
BN_mod_mul
(
tmp
,
eckey
->
priv_key
,
r
,
order
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_BN_LIB
);
goto
err
;
}
if
(
!
BN_add
(
s
,
tmp
,
m
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_BN_LIB
);
goto
err
;
}
if
(
BN_cmp
(
s
,
order
)
>
0
)
BN_sub
(
s
,
s
,
order
);
if
(
!
BN_mod_mul
(
s
,
s
,
kinv
,
order
,
ctx
))
goto
err
;
if
(
!
BN_mod_mul
(
s
,
s
,
kinv
,
order
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_BN_LIB
);
goto
err
;
}
}
while
(
BN_is_zero
(
s
));
if
((
ret
=
ECDSA_SIG_new
())
==
NULL
)
{
reason
=
ECDSA_R_SIGNATURE_MALLOC_FAILED
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_MALLOC_FAILURE
)
;
goto
err
;
}
if
(
BN_copy
(
ret
->
r
,
r
)
==
NULL
||
BN_copy
(
ret
->
s
,
s
)
==
NULL
)
{
ECDSA_SIG_free
(
ret
);
ret
=
NULL
;
reason
=
ERR_R_BN_LIB
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
ERR_R_BN_LIB
)
;
}
err:
if
(
!
ret
)
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_SIGN
,
reason
);
}
if
(
r
!=
NULL
)
BN_clear_free
(
r
);
if
(
s
!=
NULL
)
BN_clear_free
(
s
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
m
!=
NULL
)
BN_clear_free
(
m
);
if
(
tmp
!=
NULL
)
BN_clear_free
(
tmp
);
if
(
order
!=
NULL
)
BN_clear_free
(
order
);
if
(
kinv
!=
NULL
)
BN_clear_free
(
kinv
);
if
(
r
)
BN_clear_free
(
r
);
if
(
s
)
BN_clear_free
(
s
);
if
(
ctx
)
BN_CTX_free
(
ctx
);
if
(
m
)
BN_clear_free
(
m
);
if
(
tmp
)
BN_clear_free
(
tmp
);
if
(
order
)
BN_clear_free
(
order
);
if
(
kinv
)
BN_clear_free
(
kinv
);
return
(
ret
);
}
static
int
ecdsa_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
ECDSA
*
ecdsa
)
static
int
ecdsa_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
)
{
BN_CTX
*
ctx
;
BIGNUM
*
order
=
NULL
,
*
u1
=
NULL
,
*
u2
=
NULL
,
*
m
=
NULL
,
*
X
=
NULL
;
EC_POINT
*
point
=
NULL
;
int
ret
=
-
1
,
reason
=
ERR_R_BN_LIB
;
if
(
!
ec
dsa
||
!
ecdsa
->
group
||
!
ecdsa
->
pub_key
||
!
sig
)
int
ret
=
-
1
;
if
(
!
ec
key
||
!
eckey
->
group
||
!
eckey
->
pub_key
||
!
sig
)
{
reason
=
ECDSA_R_MISSING_PARAMETERS
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ECDSA_R_MISSING_PARAMETERS
)
;
return
-
1
;
}
if
((
ctx
=
BN_CTX_new
())
==
NULL
)
goto
err
;
if
((
order
=
BN_new
())
==
NULL
)
goto
err
;
if
((
u1
=
BN_new
())
==
NULL
)
goto
err
;
if
((
u2
=
BN_new
())
==
NULL
)
goto
err
;
if
((
m
=
BN_new
())
==
NULL
)
goto
err
;
if
((
X
=
BN_new
())
==
NULL
)
goto
err
;
if
(
!
EC_GROUP_get_order
(
ecdsa
->
group
,
order
,
ctx
))
goto
err
;
if
((
ctx
=
BN_CTX_new
())
==
NULL
||
(
order
=
BN_new
())
==
NULL
||
(
u1
=
BN_new
())
==
NULL
||
(
u2
=
BN_new
())
==
NULL
||
(
m
=
BN_new
())
==
NULL
||
(
X
=
BN_new
())
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_MALLOC_FAILURE
);
goto
err
;
}
if
(
!
EC_GROUP_get_order
(
eckey
->
group
,
order
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_BN_LIB
);
goto
err
;
}
if
(
BN_is_zero
(
sig
->
r
)
||
sig
->
r
->
neg
||
BN_ucmp
(
sig
->
r
,
order
)
>=
0
)
{
reason
=
ECDSA_R_BAD_SIGNATURE
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ECDSA_R_BAD_SIGNATURE
)
;
ret
=
0
;
goto
err
;
}
if
(
BN_is_zero
(
sig
->
s
)
||
sig
->
s
->
neg
||
BN_ucmp
(
sig
->
s
,
order
)
>=
0
)
{
reason
=
ECDSA_R_BAD_SIGNATURE
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ECDSA_R_BAD_SIGNATURE
)
;
ret
=
0
;
goto
err
;
}
/* calculate tmp1 = inv(S) mod order */
if
((
BN_mod_inverse
(
u2
,
sig
->
s
,
order
,
ctx
))
==
NULL
)
goto
err
;
if
((
BN_mod_inverse
(
u2
,
sig
->
s
,
order
,
ctx
))
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_BN_LIB
);
goto
err
;
}
/* digest -> m */
if
(
BN_bin2bn
(
dgst
,
dgst_len
,
m
)
==
NULL
)
goto
err
;
if
(
BN_bin2bn
(
dgst
,
dgst_len
,
m
)
==
NULL
)
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_BN_LIB
);
goto
err
;
}
/* u1 = m * tmp mod order */
if
(
!
BN_mod_mul
(
u1
,
m
,
u2
,
order
,
ctx
))
goto
err
;
if
(
!
BN_mod_mul
(
u1
,
m
,
u2
,
order
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_BN_LIB
);
goto
err
;
}
/* u2 = r * w mod q */
if
(
!
BN_mod_mul
(
u2
,
sig
->
r
,
u2
,
order
,
ctx
))
goto
err
;
if
(
!
BN_mod_mul
(
u2
,
sig
->
r
,
u2
,
order
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_BN_LIB
);
goto
err
;
}
if
((
point
=
EC_POINT_new
(
ec
dsa
->
group
))
==
NULL
)
if
((
point
=
EC_POINT_new
(
ec
key
->
group
))
==
NULL
)
{
reason
=
ERR_R_EC_LIB
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_MALLOC_FAILURE
)
;
goto
err
;
}
if
(
!
EC_POINT_mul
(
ecdsa
->
group
,
point
,
u1
,
ecdsa
->
pub_key
,
u2
,
ctx
)
||
!
EC_POINT_get_affine_coordinates
(
ecdsa
->
group
,
point
,
X
,
NULL
,
ctx
))
if
(
!
EC_POINT_mul
(
eckey
->
group
,
point
,
u1
,
eckey
->
pub_key
,
u2
,
ctx
))
{
reason
=
ERR_R_EC_LIB
;
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
EC_METHOD_get_field_type
(
EC_GROUP_method_of
(
eckey
->
group
))
==
NID_X9_62_prime_field
)
{
if
(
!
EC_POINT_get_affine_coordinates_GFp
(
eckey
->
group
,
point
,
X
,
NULL
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_EC_LIB
);
goto
err
;
}
}
else
/* NID_X9_62_characteristic_two_field */
{
if
(
!
EC_POINT_get_affine_coordinates_GF2m
(
eckey
->
group
,
point
,
X
,
NULL
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_SIGN_SETUP
,
ERR_R_EC_LIB
);
goto
err
;
}
}
if
(
!
BN_nnmod
(
u1
,
X
,
order
,
ctx
))
{
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
ERR_R_BN_LIB
);
goto
err
;
}
if
(
!
BN_nnmod
(
u1
,
X
,
order
,
ctx
))
goto
err
;
/* is now in u1. If the signature is correct, it will be
* equal to R. */
ret
=
(
BN_ucmp
(
u1
,
sig
->
r
)
==
0
);
err:
if
(
ret
!=
1
)
ECDSAerr
(
ECDSA_F_ECDSA_DO_VERIFY
,
reason
);
if
(
ctx
!=
NULL
)
BN_CTX_free
(
ctx
);
if
(
u1
!=
NULL
)
BN_clear_free
(
u1
);
if
(
u2
!=
NULL
)
BN_clear_free
(
u2
);
if
(
m
!=
NULL
)
BN_clear_free
(
m
);
if
(
X
!=
NULL
)
BN_clear_free
(
X
);
if
(
order
!=
NULL
)
BN_clear_free
(
order
);
if
(
point
!=
NULL
)
EC_POINT_free
(
point
);
if
(
ctx
)
BN_CTX_free
(
ctx
);
if
(
u1
)
BN_clear_free
(
u1
);
if
(
u2
)
BN_clear_free
(
u2
);
if
(
m
)
BN_clear_free
(
m
);
if
(
X
)
BN_clear_free
(
X
);
if
(
order
)
BN_clear_free
(
order
);
if
(
point
)
EC_POINT_free
(
point
);
return
(
ret
);
}
crypto/ecdsa/ecs_sign.c
浏览文件 @
14a7cfb3
...
...
@@ -56,16 +56,19 @@
#include "ecdsa.h"
#include <openssl/engine.h>
ECDSA_SIG
*
ECDSA_do_sign
(
const
unsigned
char
*
dgst
,
int
dlen
,
EC
DSA
*
ecdsa
)
ECDSA_SIG
*
ECDSA_do_sign
(
const
unsigned
char
*
dgst
,
int
dlen
,
EC
_KEY
*
eckey
)
{
return
ecdsa
->
meth
->
ecdsa_do_sign
(
dgst
,
dlen
,
ecdsa
);
ECDSA_DATA
*
ecdsa
=
ecdsa_check
(
eckey
);
if
(
ecdsa
==
NULL
)
return
NULL
;
return
ecdsa
->
meth
->
ecdsa_do_sign
(
dgst
,
dlen
,
eckey
);
}
int
ECDSA_sign
(
int
type
,
const
unsigned
char
*
dgst
,
int
dlen
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
ECDSA
*
ecdsa
)
int
ECDSA_sign
(
int
type
,
const
unsigned
char
*
dgst
,
int
dlen
,
unsigned
char
*
sig
,
unsigned
int
*
siglen
,
EC_KEY
*
eckey
)
{
ECDSA_SIG
*
s
;
s
=
ECDSA_do_sign
(
dgst
,
dlen
,
ec
dsa
);
s
=
ECDSA_do_sign
(
dgst
,
dlen
,
ec
key
);
if
(
s
==
NULL
)
{
*
siglen
=
0
;
...
...
@@ -76,7 +79,11 @@ int ECDSA_sign(int type, const unsigned char *dgst, int dlen, unsigned char *sig
return
(
1
);
}
int
ECDSA_sign_setup
(
ECDSA
*
ecdsa
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
)
int
ECDSA_sign_setup
(
EC_KEY
*
eckey
,
BN_CTX
*
ctx_in
,
BIGNUM
**
kinvp
,
BIGNUM
**
rp
)
{
return
ecdsa
->
meth
->
ecdsa_sign_setup
(
ecdsa
,
ctx_in
,
kinvp
,
rp
);
ECDSA_DATA
*
ecdsa
=
ecdsa_check
(
eckey
);
if
(
ecdsa
==
NULL
)
return
0
;
return
ecdsa
->
meth
->
ecdsa_sign_setup
(
eckey
,
ctx_in
,
kinvp
,
rp
);
}
crypto/ecdsa/ecs_vrf.c
浏览文件 @
14a7cfb3
...
...
@@ -61,9 +61,13 @@
* 0: incorrect signature
* -1: error
*/
int
ECDSA_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
ECDSA
*
ecdsa
)
int
ECDSA_do_verify
(
const
unsigned
char
*
dgst
,
int
dgst_len
,
ECDSA_SIG
*
sig
,
EC_KEY
*
eckey
)
{
return
ecdsa
->
meth
->
ecdsa_do_verify
(
dgst
,
dgst_len
,
sig
,
ecdsa
);
ECDSA_DATA
*
ecdsa
=
ecdsa_check
(
eckey
);
if
(
ecdsa
==
NULL
)
return
0
;
return
ecdsa
->
meth
->
ecdsa_do_verify
(
dgst
,
dgst_len
,
sig
,
eckey
);
}
/* returns
...
...
@@ -71,15 +75,16 @@ int ECDSA_do_verify(const unsigned char *dgst, int dgst_len, ECDSA_SIG *sig, ECD
* 0: incorrect signature
* -1: error
*/
int
ECDSA_verify
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sigbuf
,
int
sig_len
,
ECDSA
*
ecdsa
)
int
ECDSA_verify
(
int
type
,
const
unsigned
char
*
dgst
,
int
dgst_len
,
const
unsigned
char
*
sigbuf
,
int
sig_len
,
EC_KEY
*
eckey
)
{
ECDSA_SIG
*
s
;
int
ret
=-
1
;
s
=
ECDSA_SIG_new
();
if
(
s
==
NULL
)
return
(
ret
);
if
(
d2i_ECDSA_SIG
(
&
s
,
&
sigbuf
,
sig_len
)
==
NULL
)
goto
err
;
ret
=
ECDSA_do_verify
(
dgst
,
dgst_len
,
s
,
ecdsa
);
if
(
d2i_ECDSA_SIG
(
&
s
,
&
sigbuf
,
sig_len
)
==
NULL
)
goto
err
;
ret
=
ECDSA_do_verify
(
dgst
,
dgst_len
,
s
,
eckey
);
err:
ECDSA_SIG_free
(
s
);
return
(
ret
);
...
...
crypto/evp/evp.h
浏览文件 @
14a7cfb3
...
...
@@ -168,7 +168,8 @@
#define EVP_PKEY_DSA3 NID_dsaWithSHA1
#define EVP_PKEY_DSA4 NID_dsaWithSHA1_2
#define EVP_PKEY_DH NID_dhKeyAgreement
#define EVP_PKEY_ECDSA NID_X9_62_id_ecPublicKey
#define EVP_PKEY_EC NID_X9_62_id_ecPublicKey
#define EVP_PKEY_ECDSA EVP_PKEY_EC
#ifdef __cplusplus
extern
"C"
{
...
...
@@ -193,8 +194,8 @@ struct evp_pkey_st
#ifndef OPENSSL_NO_DH
struct
dh_st
*
dh
;
/* DH */
#endif
#ifndef OPENSSL_NO_EC
DSA
struct
ec
dsa_st
*
ecdsa
;
/* ECDSA
*/
#ifndef OPENSSL_NO_EC
struct
ec
_key_st
*
eckey
;
/* ECC
*/
#endif
}
pkey
;
int
save_parameters
;
...
...
@@ -454,9 +455,9 @@ typedef int (EVP_PBE_KEYGEN)(EVP_CIPHER_CTX *ctx, const char *pass, int passlen,
(char *)(dh))
#endif
#ifndef OPENSSL_NO_EC
DSA
#define EVP_PKEY_assign_EC
DSA(pkey,ecdsa) EVP_PKEY_assign((pkey),EVP_PKEY_ECDSA
,\
(char *)(ec
dsa
))
#ifndef OPENSSL_NO_EC
#define EVP_PKEY_assign_EC
_KEY(pkey,eckey) EVP_PKEY_assign((pkey),EVP_PKEY_EC
,\
(char *)(ec
key
))
#endif
/* Add some extra combinations */
...
...
@@ -785,10 +786,10 @@ struct dh_st;
int
EVP_PKEY_set1_DH
(
EVP_PKEY
*
pkey
,
struct
dh_st
*
key
);
struct
dh_st
*
EVP_PKEY_get1_DH
(
EVP_PKEY
*
pkey
);
#endif
#ifndef OPENSSL_NO_EC
DSA
struct
ec
dsa
_st
;
int
EVP_PKEY_set1_EC
DSA
(
EVP_PKEY
*
pkey
,
struct
ecdsa
_st
*
key
);
struct
ec
dsa_st
*
EVP_PKEY_get1_ECDSA
(
EVP_PKEY
*
pkey
);
#ifndef OPENSSL_NO_EC
struct
ec
_key
_st
;
int
EVP_PKEY_set1_EC
_KEY
(
EVP_PKEY
*
pkey
,
struct
ec_key
_st
*
key
);
struct
ec
_key_st
*
EVP_PKEY_get1_EC_KEY
(
EVP_PKEY
*
pkey
);
#endif
EVP_PKEY
*
EVP_PKEY_new
(
void
);
...
...
@@ -848,6 +849,7 @@ void ERR_load_EVP_strings(void);
/* Function codes. */
#define EVP_F_D2I_PKEY 100
#define EVP_F_ECDSA_PKEY2PKCS8 129
#define EVP_F_EC_KEY_PKEY2PKCS8 132
#define EVP_F_EVP_CIPHERINIT 123
#define EVP_F_EVP_CIPHER_CTX_CTRL 124
#define EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH 122
...
...
@@ -867,6 +869,7 @@ void ERR_load_EVP_strings(void);
#define EVP_F_EVP_PKEY_GET1_DH 119
#define EVP_F_EVP_PKEY_GET1_DSA 120
#define EVP_F_EVP_PKEY_GET1_ECDSA 130
#define EVP_F_EVP_PKEY_GET1_EC_KEY 131
#define EVP_F_EVP_PKEY_GET1_RSA 121
#define EVP_F_EVP_PKEY_NEW 106
#define EVP_F_EVP_RIJNDAEL 126
...
...
@@ -896,6 +899,7 @@ void ERR_load_EVP_strings(void);
#define EVP_R_EXPECTING_A_DH_KEY 128
#define EVP_R_EXPECTING_A_DSA_KEY 129
#define EVP_R_EXPECTING_A_ECDSA_KEY 141
#define EVP_R_EXPECTING_A_EC_KEY 142
#define EVP_R_INITIALIZATION_ERROR 134
#define EVP_R_INPUT_NOT_INITIALIZED 111
#define EVP_R_INVALID_KEY_LENGTH 130
...
...
crypto/evp/evp_err.c
浏览文件 @
14a7cfb3
/* crypto/evp/evp_err.c */
/* ====================================================================
* Copyright (c) 1999 The OpenSSL Project. All rights reserved.
* Copyright (c) 1999
-2002
The OpenSSL Project. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
...
...
@@ -68,6 +68,7 @@ static ERR_STRING_DATA EVP_str_functs[]=
{
{
ERR_PACK
(
0
,
EVP_F_D2I_PKEY
,
0
),
"D2I_PKEY"
},
{
ERR_PACK
(
0
,
EVP_F_ECDSA_PKEY2PKCS8
,
0
),
"ECDSA_PKEY2PKCS8"
},
{
ERR_PACK
(
0
,
EVP_F_EC_KEY_PKEY2PKCS8
,
0
),
"EC_KEY_PKEY2PKCS8"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_CIPHERINIT
,
0
),
"EVP_CipherInit"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_CIPHER_CTX_CTRL
,
0
),
"EVP_CIPHER_CTX_ctrl"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_CIPHER_CTX_SET_KEY_LENGTH
,
0
),
"EVP_CIPHER_CTX_set_key_length"
},
...
...
@@ -86,7 +87,8 @@ static ERR_STRING_DATA EVP_str_functs[]=
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_ENCRYPT
,
0
),
"EVP_PKEY_encrypt"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_GET1_DH
,
0
),
"EVP_PKEY_get1_DH"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_GET1_DSA
,
0
),
"EVP_PKEY_get1_DSA"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_GET1_ECDSA
,
0
),
"EVP_PKEY_get1_ECDSA"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_GET1_ECDSA
,
0
),
"EVP_PKEY_GET1_ECDSA"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_GET1_EC_KEY
,
0
),
"EVP_PKEY_get1_EC_KEY"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_GET1_RSA
,
0
),
"EVP_PKEY_get1_RSA"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_PKEY_NEW
,
0
),
"EVP_PKEY_new"
},
{
ERR_PACK
(
0
,
EVP_F_EVP_RIJNDAEL
,
0
),
"EVP_RIJNDAEL"
},
...
...
@@ -119,6 +121,7 @@ static ERR_STRING_DATA EVP_str_reasons[]=
{
EVP_R_EXPECTING_A_DH_KEY
,
"expecting a dh key"
},
{
EVP_R_EXPECTING_A_DSA_KEY
,
"expecting a dsa key"
},
{
EVP_R_EXPECTING_A_ECDSA_KEY
,
"expecting a ecdsa key"
},
{
EVP_R_EXPECTING_A_EC_KEY
,
"expecting a ec key"
},
{
EVP_R_INITIALIZATION_ERROR
,
"initialization error"
},
{
EVP_R_INPUT_NOT_INITIALIZED
,
"input not initialized"
},
{
EVP_R_INVALID_KEY_LENGTH
,
"invalid key length"
},
...
...
crypto/evp/evp_pkey.c
浏览文件 @
14a7cfb3
...
...
@@ -65,8 +65,8 @@
#ifndef OPENSSL_NO_DSA
static
int
dsa_pkey2pkcs8
(
PKCS8_PRIV_KEY_INFO
*
p8inf
,
EVP_PKEY
*
pkey
);
#endif
#ifndef OPENSSL_NO_EC
DSA
static
int
ec
dsa
_pkey2pkcs8
(
PKCS8_PRIV_KEY_INFO
*
p8inf
,
EVP_PKEY
*
pkey
);
#ifndef OPENSSL_NO_EC
static
int
ec
key
_pkey2pkcs8
(
PKCS8_PRIV_KEY_INFO
*
p8inf
,
EVP_PKEY
*
pkey
);
#endif
/* Extract a private key from a PKCS8 structure */
...
...
@@ -80,8 +80,8 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
#ifndef OPENSSL_NO_DSA
DSA
*
dsa
=
NULL
;
#endif
#ifndef OPENSSL_NO_EC
DSA
EC
DSA
*
ecdsa
=
NULL
;
#ifndef OPENSSL_NO_EC
EC
_KEY
*
eckey
=
NULL
;
#endif
#if !defined(OPENSSL_NO_DSA) || !defined(OPENSSL_NO_ECDSA)
ASN1_INTEGER
*
privkey
;
...
...
@@ -236,34 +236,37 @@ EVP_PKEY *EVP_PKCS82PKEY (PKCS8_PRIV_KEY_INFO *p8)
else
/* nid == NID_ecdsa_with_SHA1 */
{
#ifndef OPENSSL_NO_ECDSA
if
((
ecdsa
=
d2i_ECDSAParameters
(
NULL
,
&
cp
,
plen
))
==
NULL
)
if
((
eckey
=
d2i_ECParameters
(
NULL
,
&
cp
,
plen
))
==
NULL
)
{
EVPerr
(
EVP_F_EVP_PKCS82PKEY
,
EVP_R_DECODE_ERROR
);
goto
err
;
}
if
((
ecdsa
->
priv_key
=
ASN1_INTEGER_to_BN
(
privkey
,
NULL
))
==
NULL
)
if
((
eckey
->
priv_key
=
ASN1_INTEGER_to_BN
(
privkey
,
NULL
))
==
NULL
)
{
EVPerr
(
EVP_F_EVP_PKCS82PKEY
,
EVP_R_DECODE_ERROR
);
goto
err
;
}
if
((
ec
dsa
->
pub_key
=
EC_POINT_new
(
ecdsa
->
group
))
==
NULL
)
if
((
ec
key
->
pub_key
=
EC_POINT_new
(
eckey
->
group
))
==
NULL
)
{
EVPerr
(
EVP_F_EVP_PKCS82PKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
EC_POINT_copy
(
ecdsa
->
pub_key
,
EC_GROUP_get0_generator
(
ecdsa
->
group
)))
if
(
!
EC_POINT_copy
(
eckey
->
pub_key
,
EC_GROUP_get0_generator
(
eckey
->
group
)))
{
EVPerr
(
EVP_F_EVP_PKCS82PKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
if
(
!
EC_POINT_mul
(
ec
dsa
->
group
,
ecdsa
->
pub_key
,
ecdsa
->
priv_key
,
NULL
,
NULL
,
ctx
))
if
(
!
EC_POINT_mul
(
ec
key
->
group
,
eckey
->
pub_key
,
eckey
->
priv_key
,
NULL
,
NULL
,
ctx
))
{
EVPerr
(
EVP_F_EVP_PKCS82PKEY
,
ERR_R_EC_LIB
);
goto
err
;
}
EVP_PKEY_assign_EC
DSA
(
pkey
,
ecdsa
);
EVP_PKEY_assign_EC
_KEY
(
pkey
,
eckey
);
BN_CTX_free
(
ctx
);
if
(
n_stack
)
sk_ASN1_TYPE_pop_free
(
n_stack
,
ASN1_TYPE_free
);
else
...
...
@@ -280,8 +283,9 @@ err:
#ifndef OPENSSL_NO_DSA
if
(
dsa
)
DSA_free
(
dsa
);
#endif
#ifndef OPENSSL_NO_ECDSA
if
(
ecdsa
)
ECDSA_free
(
ecdsa
);
#ifndef OPENSSL_NO_EC
if
(
eckey
)
EC_KEY_free
(
eckey
);
#endif
if
(
pkey
)
EVP_PKEY_free
(
pkey
);
return
NULL
;
...
...
@@ -348,7 +352,7 @@ PKCS8_PRIV_KEY_INFO *EVP_PKEY2PKCS8_broken(EVP_PKEY *pkey, int broken)
#endif
#ifndef OPENSSL_NO_ECDSA
case
EVP_PKEY_ECDSA
:
if
(
!
ec
dsa
_pkey2pkcs8
(
p8
,
pkey
))
if
(
!
ec
key
_pkey2pkcs8
(
p8
,
pkey
))
{
PKCS8_PRIV_KEY_INFO_free
(
p8
);
return
(
NULL
);
...
...
@@ -499,53 +503,54 @@ static int dsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
}
#endif
#ifndef OPENSSL_NO_EC
DSA
static
int
ec
dsa
_pkey2pkcs8
(
PKCS8_PRIV_KEY_INFO
*
p8
,
EVP_PKEY
*
pkey
)
#ifndef OPENSSL_NO_EC
static
int
ec
key
_pkey2pkcs8
(
PKCS8_PRIV_KEY_INFO
*
p8
,
EVP_PKEY
*
pkey
)
{
ASN1_STRING
*
params
=
NULL
;
ASN1_INTEGER
*
prkey
=
NULL
;
ASN1_TYPE
*
ttmp
=
NULL
;
STACK_OF
(
ASN1_TYPE
)
*
nec
dsa
=
NULL
;
STACK_OF
(
ASN1_TYPE
)
*
nec
key
=
NULL
;
unsigned
char
*
p
=
NULL
,
*
q
=
NULL
;
int
len
=
0
;
EC_POINT
*
point
=
NULL
;
if
(
pkey
->
pkey
.
ec
dsa
==
NULL
||
pkey
->
pkey
.
ecdsa
->
group
==
NULL
)
if
(
pkey
->
pkey
.
ec
key
==
NULL
||
pkey
->
pkey
.
eckey
->
group
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
EVP_R_MISSING_PARAMETERS
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
EVP_R_MISSING_PARAMETERS
);
return
0
;
}
p8
->
pkeyalg
->
algorithm
=
OBJ_nid2obj
(
NID_ecdsa_with_SHA1
);
len
=
i2d_EC
DSAParameters
(
pkey
->
pkey
.
ecdsa
,
NULL
);
len
=
i2d_EC
Parameters
(
pkey
->
pkey
.
eckey
,
NULL
);
if
((
p
=
OPENSSL_malloc
(
len
))
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
return
0
;
}
q
=
p
;
if
(
!
i2d_EC
DSAParameters
(
pkey
->
pkey
.
ecdsa
,
&
q
))
if
(
!
i2d_EC
Parameters
(
pkey
->
pkey
.
eckey
,
&
q
))
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_ECDSA_LIB
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_ECDSA_LIB
);
OPENSSL_free
(
p
);
return
0
;
}
if
((
params
=
ASN1_STRING_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
OPENSSL_free
(
p
);
return
0
;
}
if
(
!
ASN1_STRING_set
(
params
,
p
,
len
))
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_ASN1_LIB
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_ASN1_LIB
);
OPENSSL_free
(
p
);
return
0
;
}
OPENSSL_free
(
p
);
if
((
prkey
=
BN_to_ASN1_INTEGER
(
pkey
->
pkey
.
ecdsa
->
priv_key
,
NULL
))
==
NULL
)
if
((
prkey
=
BN_to_ASN1_INTEGER
(
pkey
->
pkey
.
eckey
->
priv_key
,
NULL
))
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_ASN1_LIB
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_ASN1_LIB
);
return
0
;
}
...
...
@@ -557,7 +562,7 @@ static int ecdsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
if
(
!
ASN1_pack_string
((
char
*
)
prkey
,
i2d_ASN1_INTEGER
,
&
p8
->
pkey
->
value
.
octet_string
))
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
M_ASN1_INTEGER_free
(
prkey
);
return
0
;
}
...
...
@@ -572,134 +577,137 @@ static int ecdsa_pkey2pkcs8(PKCS8_PRIV_KEY_INFO *p8, EVP_PKEY *pkey)
p8
->
pkeyalg
->
parameter
->
value
.
sequence
=
params
;
p8
->
pkeyalg
->
parameter
->
type
=
V_ASN1_SEQUENCE
;
nec
dsa
=
sk_ASN1_TYPE_new_null
();
if
(
nec
dsa
==
NULL
||
(
ttmp
=
ASN1_TYPE_new
())
==
NULL
)
nec
key
=
sk_ASN1_TYPE_new_null
();
if
(
nec
key
==
NULL
||
(
ttmp
=
ASN1_TYPE_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
return
0
;
}
if
((
point
=
EC_GROUP_get0_generator
(
pkey
->
pkey
.
ecdsa
->
group
))
==
NULL
)
if
((
point
=
EC_GROUP_get0_generator
(
pkey
->
pkey
.
eckey
->
group
))
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_EC_LIB
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_EC_LIB
);
return
0
;
}
len
=
EC_POINT_point2oct
(
pkey
->
pkey
.
ec
dsa
->
group
,
point
,
ECDSA_get_conversion_form
(
pkey
->
pkey
.
ecdsa
),
NULL
,
0
,
NULL
);
len
=
EC_POINT_point2oct
(
pkey
->
pkey
.
ec
key
->
group
,
point
,
pkey
->
pkey
.
eckey
->
conv_form
,
NULL
,
0
,
NULL
);
p
=
OPENSSL_malloc
(
len
);
if
(
!
len
||
!
p
||
!
EC_POINT_point2oct
(
pkey
->
pkey
.
ec
dsa
->
group
,
point
,
ECDSA_get_conversion_form
(
pkey
->
pkey
.
ecdsa
)
,
p
,
len
,
NULL
))
if
(
!
len
||
!
p
||
!
EC_POINT_point2oct
(
pkey
->
pkey
.
ec
key
->
group
,
point
,
pkey
->
pkey
.
eckey
->
conv_form
,
p
,
len
,
NULL
))
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_EC_LIB
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_EC_LIB
);
OPENSSL_free
(
p
);
return
0
;
}
if
((
ttmp
->
value
.
octet_string
=
ASN1_OCTET_STRING_new
())
==
NULL
)
if
((
ttmp
->
value
.
octet_string
=
ASN1_OCTET_STRING_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
return
0
;
}
if
(
!
ASN1_OCTET_STRING_set
(
ttmp
->
value
.
octet_string
,
p
,
len
))
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
EVP_R_ASN1_LIB
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
EVP_R_ASN1_LIB
);
return
0
;
}
OPENSSL_free
(
p
);
ttmp
->
type
=
V_ASN1_OCTET_STRING
;
if
(
!
sk_ASN1_TYPE_push
(
nec
dsa
,
ttmp
))
if
(
!
sk_ASN1_TYPE_push
(
nec
key
,
ttmp
))
{
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
ASN1_INTEGER_free
(
prkey
);
return
0
;
}
if
((
ttmp
=
ASN1_TYPE_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
return
0
;
}
ttmp
->
value
.
integer
=
prkey
;
ttmp
->
type
=
V_ASN1_INTEGER
;
if
(
!
sk_ASN1_TYPE_push
(
nec
dsa
,
ttmp
))
if
(
!
sk_ASN1_TYPE_push
(
nec
key
,
ttmp
))
{
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
ASN1_INTEGER_free
(
prkey
);
return
0
;
}
if
((
p8
->
pkey
->
value
.
octet_string
=
ASN1_OCTET_STRING_new
())
==
NULL
)
if
((
p8
->
pkey
->
value
.
octet_string
=
ASN1_OCTET_STRING_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
return
0
;
}
if
(
!
ASN1_seq_pack_ASN1_TYPE
(
nec
dsa
,
i2d_ASN1_TYPE
,
if
(
!
ASN1_seq_pack_ASN1_TYPE
(
nec
key
,
i2d_ASN1_TYPE
,
&
p8
->
pkey
->
value
.
octet_string
->
data
,
&
p8
->
pkey
->
value
.
octet_string
->
length
))
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
return
0
;
}
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
break
;
case
PKCS8_EMBEDDED_PARAM
:
p8
->
pkeyalg
->
parameter
->
type
=
V_ASN1_NULL
;
nec
dsa
=
sk_ASN1_TYPE_new_null
();
nec
key
=
sk_ASN1_TYPE_new_null
();
if
((
ttmp
=
ASN1_TYPE_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
ASN1_INTEGER_free
(
prkey
);
return
0
;
}
ttmp
->
value
.
sequence
=
params
;
ttmp
->
type
=
V_ASN1_SEQUENCE
;
if
(
!
sk_ASN1_TYPE_push
(
nec
dsa
,
ttmp
))
if
(
!
sk_ASN1_TYPE_push
(
nec
key
,
ttmp
))
{
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
ASN1_INTEGER_free
(
prkey
);
return
0
;
}
if
((
ttmp
=
ASN1_TYPE_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
ASN1_INTEGER_free
(
prkey
);
return
0
;
}
ttmp
->
value
.
integer
=
prkey
;
ttmp
->
type
=
V_ASN1_INTEGER
;
if
(
!
sk_ASN1_TYPE_push
(
nec
dsa
,
ttmp
))
if
(
!
sk_ASN1_TYPE_push
(
nec
key
,
ttmp
))
{
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
ASN1_INTEGER_free
(
prkey
);
return
0
;
}
if
((
p8
->
pkey
->
value
.
octet_string
=
ASN1_OCTET_STRING_new
())
==
NULL
)
if
((
p8
->
pkey
->
value
.
octet_string
=
ASN1_OCTET_STRING_new
())
==
NULL
)
{
EVPerr
(
EVP_F_EC
DSA
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
EVPerr
(
EVP_F_EC
_KEY
_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
return
0
;
}
if
(
!
ASN1_seq_pack_ASN1_TYPE
(
nec
dsa
,
i2d_ASN1_TYPE
,
if
(
!
ASN1_seq_pack_ASN1_TYPE
(
nec
key
,
i2d_ASN1_TYPE
,
&
p8
->
pkey
->
value
.
octet_string
->
data
,
&
p8
->
pkey
->
value
.
octet_string
->
length
))
{
EVPerr
(
EVP_F_ECDSA_PKEY2PKCS8
,
ERR_R_MALLOC_FAILURE
);
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
return
0
;
}
sk_ASN1_TYPE_pop_free
(
nec
dsa
,
ASN1_TYPE_free
);
sk_ASN1_TYPE_pop_free
(
nec
key
,
ASN1_TYPE_free
);
break
;
}
return
1
;
...
...
crypto/evp/p_lib.c
浏览文件 @
14a7cfb3
...
...
@@ -79,8 +79,8 @@ int EVP_PKEY_bits(EVP_PKEY *pkey)
else
if
(
pkey
->
type
==
EVP_PKEY_DSA
)
return
(
BN_num_bits
(
pkey
->
pkey
.
dsa
->
p
));
#endif
#ifndef OPENSSL_NO_EC
DSA
else
if
(
pkey
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
else
if
(
pkey
->
type
==
EVP_PKEY_EC
)
{
BIGNUM
*
order
=
BN_new
();
int
ret
;
...
...
@@ -90,7 +90,7 @@ int EVP_PKEY_bits(EVP_PKEY *pkey)
ERR_clear_error
();
return
0
;
}
if
(
!
EC_GROUP_get_order
(
pkey
->
pkey
.
ec
dsa
->
group
,
order
,
NULL
))
if
(
!
EC_GROUP_get_order
(
pkey
->
pkey
.
ec
key
->
group
,
order
,
NULL
))
{
ERR_clear_error
();
return
0
;
...
...
@@ -117,9 +117,9 @@ int EVP_PKEY_size(EVP_PKEY *pkey)
if
(
pkey
->
type
==
EVP_PKEY_DSA
)
return
(
DSA_size
(
pkey
->
pkey
.
dsa
));
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
pkey
->
type
==
EVP_PKEY_EC
DSA
)
return
(
ECDSA_size
(
pkey
->
pkey
.
ec
dsa
));
#ifndef OPENSSL_NO_EC
if
(
pkey
->
type
==
EVP_PKEY_EC
)
return
(
ECDSA_size
(
pkey
->
pkey
.
ec
key
));
#endif
return
(
0
);
...
...
@@ -181,13 +181,16 @@ int EVP_PKEY_copy_parameters(EVP_PKEY *to, EVP_PKEY *from)
to
->
pkey
.
dsa
->
g
=
a
;
}
#endif
#ifndef OPENSSL_NO_EC
DSA
#ifndef OPENSSL_NO_EC
if
(
to
->
type
==
EVP_PKEY_ECDSA
)
{
if
(
to
->
pkey
.
ecdsa
->
group
!=
NULL
)
EC_GROUP_free
(
to
->
pkey
.
ecdsa
->
group
);
if
((
to
->
pkey
.
ecdsa
->
group
=
EC_GROUP_new
(
EC_GROUP_method_of
(
from
->
pkey
.
ecdsa
->
group
)))
==
NULL
)
goto
err
;
if
(
!
EC_GROUP_copy
(
to
->
pkey
.
ecdsa
->
group
,
from
->
pkey
.
ecdsa
->
group
))
goto
err
;
if
(
to
->
pkey
.
eckey
->
group
!=
NULL
)
EC_GROUP_free
(
to
->
pkey
.
eckey
->
group
);
if
((
to
->
pkey
.
eckey
->
group
=
EC_GROUP_new
(
EC_GROUP_method_of
(
from
->
pkey
.
eckey
->
group
)))
==
NULL
)
goto
err
;
if
(
!
EC_GROUP_copy
(
to
->
pkey
.
eckey
->
group
,
from
->
pkey
.
eckey
->
group
))
goto
err
;
}
#endif
return
(
1
);
...
...
@@ -207,10 +210,10 @@ int EVP_PKEY_missing_parameters(EVP_PKEY *pkey)
return
(
1
);
}
#endif
#ifndef OPENSSL_NO_EC
DSA
if
(
pkey
->
type
==
EVP_PKEY_EC
DSA
)
#ifndef OPENSSL_NO_EC
if
(
pkey
->
type
==
EVP_PKEY_EC
)
{
if
(
pkey
->
pkey
.
ec
dsa
->
group
==
NULL
)
if
(
pkey
->
pkey
.
ec
key
->
group
==
NULL
)
return
(
1
);
}
#endif
...
...
@@ -303,24 +306,24 @@ DSA *EVP_PKEY_get1_DSA(EVP_PKEY *pkey)
}
#endif
#ifndef OPENSSL_NO_EC
DSA
#ifndef OPENSSL_NO_EC
int
EVP_PKEY_set1_EC
DSA
(
EVP_PKEY
*
pkey
,
ECDSA
*
key
)
int
EVP_PKEY_set1_EC
_KEY
(
EVP_PKEY
*
pkey
,
EC_KEY
*
key
)
{
int
ret
=
EVP_PKEY_assign_EC
DSA
(
pkey
,
key
);
if
(
ret
)
CRYPTO_add
(
&
key
->
references
,
1
,
CRYPTO_LOCK_ECDSA
);
int
ret
=
EVP_PKEY_assign_EC
_KEY
(
pkey
,
key
);
if
(
ret
)
CRYPTO_add
(
&
key
->
references
,
1
,
CRYPTO_LOCK_EC
);
return
ret
;
}
EC
DSA
*
EVP_PKEY_get1_ECDSA
(
EVP_PKEY
*
pkey
)
EC
_KEY
*
EVP_PKEY_get1_EC_KEY
(
EVP_PKEY
*
pkey
)
{
if
(
pkey
->
type
!=
EVP_PKEY_EC
DSA
)
if
(
pkey
->
type
!=
EVP_PKEY_EC
)
{
EVPerr
(
EVP_F_EVP_PKEY_GET1_EC
DSA
,
EVP_R_EXPECTING_A_ECDSA
_KEY
);
EVPerr
(
EVP_F_EVP_PKEY_GET1_EC
_KEY
,
EVP_R_EXPECTING_A_EC
_KEY
);
return
NULL
;
}
CRYPTO_add
(
&
pkey
->
pkey
.
ec
dsa
->
references
,
1
,
CRYPTO_LOCK_ECDSA
);
return
pkey
->
pkey
.
ec
dsa
;
CRYPTO_add
(
&
pkey
->
pkey
.
ec
key
->
references
,
1
,
CRYPTO_LOCK_EC
);
return
pkey
->
pkey
.
ec
key
;
}
#endif
...
...
@@ -361,8 +364,8 @@ int EVP_PKEY_type(int type)
return
(
EVP_PKEY_DSA
);
case
EVP_PKEY_DH
:
return
(
EVP_PKEY_DH
);
case
EVP_PKEY_EC
DSA
:
return
(
EVP_PKEY_EC
DSA
);
case
EVP_PKEY_EC
:
return
(
EVP_PKEY_EC
);
default:
return
(
NID_undef
);
}
...
...
@@ -408,9 +411,9 @@ static void EVP_PKEY_free_it(EVP_PKEY *x)
DSA_free
(
x
->
pkey
.
dsa
);
break
;
#endif
#ifndef OPENSSL_NO_EC
DSA
case
EVP_PKEY_EC
DSA
:
EC
DSA_free
(
x
->
pkey
.
ecdsa
);
#ifndef OPENSSL_NO_EC
case
EVP_PKEY_EC
:
EC
_KEY_free
(
x
->
pkey
.
eckey
);
break
;
#endif
#ifndef OPENSSL_NO_DH
...
...
crypto/pem/pem.h
浏览文件 @
14a7cfb3
...
...
@@ -578,13 +578,10 @@ DECLARE_PEM_rw(DSAparams, DSA)
#endif
#ifndef OPENSSL_NO_ECDSA
DECLARE_PEM_rw_cb
(
ECDSAPrivateKey
,
ECDSA
)
DECLARE_PEM_rw
(
ECDSA_PUBKEY
,
ECDSA
)
#endif
#ifndef OPENSSL_NO_EC
DECLARE_PEM_rw
(
ECPKParameters
,
EC_GROUP
)
DECLARE_PEM_rw_cb
(
ECPrivateKey
,
EC_KEY
)
DECLARE_PEM_rw
(
EC_PUBKEY
,
EC_KEY
)
#endif
#ifndef OPENSSL_NO_DH
...
...
crypto/pem/pem_all.c
浏览文件 @
14a7cfb3
...
...
@@ -125,8 +125,8 @@ static RSA *pkey_get_rsa(EVP_PKEY *key, RSA **rsa);
static
DSA
*
pkey_get_dsa
(
EVP_PKEY
*
key
,
DSA
**
dsa
);
#endif
#ifndef OPENSSL_NO_EC
DSA
static
EC
DSA
*
pkey_get_ecdsa
(
EVP_PKEY
*
key
,
ECDSA
**
ecdsa
);
#ifndef OPENSSL_NO_EC
static
EC
_KEY
*
pkey_get_eckey
(
EVP_PKEY
*
key
,
EC_KEY
**
eckey
);
#endif
IMPLEMENT_PEM_rw
(
X509_REQ
,
X509_REQ
,
PEM_STRING_X509_REQ
,
X509_REQ
)
...
...
@@ -234,52 +234,51 @@ IMPLEMENT_PEM_rw(DSAparams, DSA, PEM_STRING_DSAPARAMS, DSAparams)
#endif
#ifndef OPENSSL_NO_ECDSA
static
ECDSA
*
pkey_get_ecdsa
(
EVP_PKEY
*
key
,
ECDSA
**
ecdsa
)
#ifndef OPENSSL_NO_EC
static
EC_KEY
*
pkey_get_eckey
(
EVP_PKEY
*
key
,
EC_KEY
**
eckey
)
{
EC
DSA
*
dtmp
;
EC
_KEY
*
dtmp
;
if
(
!
key
)
return
NULL
;
dtmp
=
EVP_PKEY_get1_EC
DSA
(
key
);
dtmp
=
EVP_PKEY_get1_EC
_KEY
(
key
);
EVP_PKEY_free
(
key
);
if
(
!
dtmp
)
return
NULL
;
if
(
ec
dsa
)
if
(
ec
key
)
{
EC
DSA_free
(
*
ecdsa
);
*
ec
dsa
=
dtmp
;
EC
_KEY_free
(
*
eckey
);
*
ec
key
=
dtmp
;
}
return
dtmp
;
}
EC
DSA
*
PEM_read_bio_ECDSAPrivateKey
(
BIO
*
bp
,
ECDSA
**
ecdsa
,
pem_password_cb
*
cb
,
EC
_KEY
*
PEM_read_bio_ECPrivateKey
(
BIO
*
bp
,
EC_KEY
**
key
,
pem_password_cb
*
cb
,
void
*
u
)
{
EVP_PKEY
*
pktmp
;
pktmp
=
PEM_read_bio_PrivateKey
(
bp
,
NULL
,
cb
,
u
);
return
pkey_get_ec
dsa
(
pktmp
,
ecdsa
);
return
pkey_get_ec
key
(
pktmp
,
key
);
}
IMPLEMENT_PEM_write_cb
(
ECDSAPrivateKey
,
ECDSA
,
PEM_STRING_ECPRIVATEKEY
,
ECDSAPrivateKey
)
IMPLEMENT_PEM_rw
(
ECDSA_PUBKEY
,
ECDSA
,
PEM_STRING_PUBLIC
,
ECDSA_PUBKEY
)
IMPLEMENT_PEM_rw
(
ECPKParameters
,
EC_GROUP
,
PEM_STRING_ECPARAMETERS
,
ECPKParameters
)
IMPLEMENT_PEM_write_cb
(
ECPrivateKey
,
EC_KEY
,
PEM_STRING_ECPRIVATEKEY
,
ECPrivateKey
)
IMPLEMENT_PEM_rw
(
EC_PUBKEY
,
EC_KEY
,
PEM_STRING_PUBLIC
,
EC_PUBKEY
)
#ifndef OPENSSL_NO_FP_API
EC
DSA
*
PEM_read_ECDSAPrivateKey
(
FILE
*
fp
,
ECDSA
**
ecdsa
,
pem_password_cb
*
cb
,
EC
_KEY
*
PEM_read_ECPrivateKey
(
FILE
*
fp
,
EC_KEY
**
eckey
,
pem_password_cb
*
cb
,
void
*
u
)
{
EVP_PKEY
*
pktmp
;
pktmp
=
PEM_read_PrivateKey
(
fp
,
NULL
,
cb
,
u
);
return
pkey_get_ec
dsa
(
pktmp
,
ecdsa
);
return
pkey_get_ec
key
(
pktmp
,
eckey
);
}
#endif
#endif
#ifndef OPENSSL_NO_EC
IMPLEMENT_PEM_rw
(
ECPKParameters
,
EC_GROUP
,
PEM_STRING_ECPARAMETERS
,
ECPKParameters
)
#endif
#ifndef OPENSSL_NO_DH
IMPLEMENT_PEM_rw
(
DHparams
,
DH
,
PEM_STRING_DHPARAMS
,
DHparams
)
...
...
crypto/pem/pem_info.c
浏览文件 @
14a7cfb3
...
...
@@ -203,10 +203,10 @@ start:
}
else
#endif
#ifndef OPENSSL_NO_EC
DSA
#ifndef OPENSSL_NO_EC
if
(
strcmp
(
name
,
PEM_STRING_ECPRIVATEKEY
)
==
0
)
{
d2i
=
(
char
*
(
*
)())
d2i_EC
DSA
PrivateKey
;
d2i
=
(
char
*
(
*
)())
d2i_ECPrivateKey
;
if
(
xi
->
x_pkey
!=
NULL
)
{
if
(
!
sk_X509_INFO_push
(
ret
,
xi
))
goto
err
;
...
...
@@ -220,8 +220,8 @@ start:
xi
->
x_pkey
=
X509_PKEY_new
();
if
((
xi
->
x_pkey
->
dec_pkey
=
EVP_PKEY_new
())
==
NULL
)
goto
err
;
xi
->
x_pkey
->
dec_pkey
->
type
=
EVP_PKEY_EC
DSA
;
pp
=
(
char
**
)
&
(
xi
->
x_pkey
->
dec_pkey
->
pkey
.
ec
dsa
);
xi
->
x_pkey
->
dec_pkey
->
type
=
EVP_PKEY_EC
;
pp
=
(
char
**
)
&
(
xi
->
x_pkey
->
dec_pkey
->
pkey
.
ec
key
);
if
((
int
)
strlen
(
header
)
>
10
)
/* assume encrypted */
raw
=
1
;
}
...
...
crypto/x509/x509.h
浏览文件 @
14a7cfb3
...
...
@@ -81,6 +81,10 @@
#include <openssl/dsa.h>
#endif
#ifndef OPENSSL_NO_EC
#include <openssl/ec.h>
#endif
#ifndef OPENSSL_NO_ECDSA
#include <openssl/ecdsa.h>
#endif
...
...
@@ -656,15 +660,15 @@ extern "C" {
#define i2d_DSAPrivateKey_bio(bp,dsa) ASN1_i2d_bio(i2d_DSAPrivateKey,bp, \
(unsigned char *)dsa)
#define d2i_EC
DSAPrivateKey_fp(fp,ecdsa) (ECDSA
*)ASN1_d2i_fp((char *(*)())\
EC
DSA_new,(char *(*)())d2i_ECDSA
PrivateKey, (fp), \
#define d2i_EC
PrivateKey_fp(fp,ecdsa) (EC_KEY
*)ASN1_d2i_fp((char *(*)())\
EC
_KEY_new,(char *(*)())d2i_EC
PrivateKey, (fp), \
(unsigned char **)(ecdsa))
#define i2d_EC
DSAPrivateKey_fp(fp,ecdsa) ASN1_i2d_fp(i2d_ECDSA
PrivateKey,fp, \
#define i2d_EC
PrivateKey_fp(fp,ecdsa) ASN1_i2d_fp(i2d_EC
PrivateKey,fp, \
(unsigned char *)ecdsa)
#define d2i_EC
DSAPrivateKey_bio(bp,ecdsa) (ECDSA
*)ASN1_d2i_bio((char *(*)())\
EC
DSA_new,(char *(*)())d2i_ECDSA
PrivateKey, (bp), \
#define d2i_EC
PrivateKey_bio(bp,ecdsa) (EC_KEY
*)ASN1_d2i_bio((char *(*)())\
EC
_KEY_new,(char *(*)())d2i_EC
PrivateKey, (bp), \
(unsigned char **)(ecdsa))
#define i2d_EC
DSAPrivateKey_bio(bp,ecdsa) ASN1_i2d_bio(i2d_ECDSA
PrivateKey,bp, \
#define i2d_EC
PrivateKey_bio(bp,ecdsa) ASN1_i2d_bio(i2d_EC
PrivateKey,bp, \
(unsigned char *)ecdsa)
#define X509_ALGOR_dup(xn) (X509_ALGOR *)ASN1_dup((int (*)())i2d_X509_ALGOR,\
...
...
@@ -770,11 +774,11 @@ int i2d_DSA_PUBKEY_fp(FILE *fp, DSA *dsa);
DSA
*
d2i_DSAPrivateKey_fp
(
FILE
*
fp
,
DSA
**
dsa
);
int
i2d_DSAPrivateKey_fp
(
FILE
*
fp
,
DSA
*
dsa
);
#endif
#ifndef OPENSSL_NO_EC
DSA
EC
DSA
*
d2i_ECDSA_PUBKEY_fp
(
FILE
*
fp
,
ECDSA
**
ecdsa
);
int
i2d_EC
DSA_PUBKEY_fp
(
FILE
*
fp
,
ECDSA
*
ecdsa
);
EC
DSA
*
d2i_ECDSAPrivateKey_fp
(
FILE
*
fp
,
ECDSA
**
ecdsa
);
int
i2d_EC
DSAPrivateKey_fp
(
FILE
*
fp
,
ECDSA
*
ecdsa
);
#ifndef OPENSSL_NO_EC
EC
_KEY
*
d2i_EC_PUBKEY_fp
(
FILE
*
fp
,
EC_KEY
**
eckey
);
int
i2d_EC
_PUBKEY_fp
(
FILE
*
fp
,
EC_KEY
*
eckey
);
EC
_KEY
*
d2i_ECPrivateKey_fp
(
FILE
*
fp
,
EC_KEY
**
eckey
);
int
i2d_EC
PrivateKey_fp
(
FILE
*
fp
,
EC_KEY
*
eckey
);
#endif
X509_SIG
*
d2i_PKCS8_fp
(
FILE
*
fp
,
X509_SIG
**
p8
);
int
i2d_PKCS8_fp
(
FILE
*
fp
,
X509_SIG
*
p8
);
...
...
@@ -809,11 +813,11 @@ int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa);
DSA
*
d2i_DSAPrivateKey_bio
(
BIO
*
bp
,
DSA
**
dsa
);
int
i2d_DSAPrivateKey_bio
(
BIO
*
bp
,
DSA
*
dsa
);
#endif
#ifndef OPENSSL_NO_EC
DSA
EC
DSA
*
d2i_ECDSA_PUBKEY_bio
(
BIO
*
bp
,
ECDSA
**
ecdsa
);
int
i2d_EC
DSA_PUBKEY_bio
(
BIO
*
bp
,
ECDSA
*
ecdsa
);
EC
DSA
*
d2i_ECDSAPrivateKey_bio
(
BIO
*
bp
,
ECDSA
**
ecdsa
);
int
i2d_EC
DSAPrivateKey_bio
(
BIO
*
bp
,
ECDSA
*
ecdsa
);
#ifndef OPENSSL_NO_EC
EC
_KEY
*
d2i_EC_PUBKEY_bio
(
BIO
*
bp
,
EC_KEY
**
eckey
);
int
i2d_EC
_PUBKEY_bio
(
BIO
*
bp
,
EC_KEY
*
eckey
);
EC
_KEY
*
d2i_ECPrivateKey_bio
(
BIO
*
bp
,
EC_KEY
**
eckey
);
int
i2d_EC
PrivateKey_bio
(
BIO
*
bp
,
EC_KEY
*
eckey
);
#endif
X509_SIG
*
d2i_PKCS8_bio
(
BIO
*
bp
,
X509_SIG
**
p8
);
int
i2d_PKCS8_bio
(
BIO
*
bp
,
X509_SIG
*
p8
);
...
...
@@ -879,9 +883,9 @@ int i2d_DSA_PUBKEY(DSA *a,unsigned char **pp);
DSA
*
d2i_DSA_PUBKEY
(
DSA
**
a
,
unsigned
char
**
pp
,
long
length
);
#endif
#ifndef OPENSSL_NO_EC
DSA
int
i2d_EC
DSA_PUBKEY
(
ECDSA
*
a
,
unsigned
char
**
pp
);
EC
DSA
*
d2i_ECDSA_PUBKEY
(
ECDSA
**
a
,
unsigned
char
**
pp
,
#ifndef OPENSSL_NO_EC
int
i2d_EC
_PUBKEY
(
EC_KEY
*
a
,
unsigned
char
**
pp
);
EC
_KEY
*
d2i_EC_PUBKEY
(
EC_KEY
**
a
,
unsigned
char
**
pp
,
long
length
);
#endif
...
...
crypto/x509/x509_cmp.c
浏览文件 @
14a7cfb3
...
...
@@ -295,10 +295,11 @@ int X509_check_private_key(X509 *x, EVP_PKEY *k)
}
break
;
#endif
#ifndef OPENSSL_NO_EC
DSA
case
EVP_PKEY_EC
DSA
:
#ifndef OPENSSL_NO_EC
case
EVP_PKEY_EC
:
{
int
r
=
EC_POINT_cmp
(
xk
->
pkey
.
ecdsa
->
group
,
xk
->
pkey
.
ecdsa
->
pub_key
,
k
->
pkey
.
ecdsa
->
pub_key
,
NULL
);
int
r
=
EC_POINT_cmp
(
xk
->
pkey
.
eckey
->
group
,
xk
->
pkey
.
eckey
->
pub_key
,
k
->
pkey
.
eckey
->
pub_key
,
NULL
);
if
(
r
!=
0
)
{
if
(
r
==
1
)
...
...
crypto/x509/x_all.c
浏览文件 @
14a7cfb3
...
...
@@ -325,59 +325,58 @@ int i2d_DSA_PUBKEY_bio(BIO *bp, DSA *dsa)
#endif
#ifndef OPENSSL_NO_EC
DSA
#ifndef OPENSSL_NO_EC
#ifndef OPENSSL_NO_FP_API
EC
DSA
*
d2i_ECDSAPrivateKey_fp
(
FILE
*
fp
,
ECDSA
**
ecdsa
)
EC
_KEY
*
d2i_EC_PUBKEY_fp
(
FILE
*
fp
,
EC_KEY
**
eckey
)
{
return
((
EC
DSA
*
)
ASN1_d2i_fp
((
char
*
(
*
)())
EC
DSA_new
,(
char
*
(
*
)())
d2i_ECDSAPrivateKey
,
(
fp
),
(
unsigned
char
**
)(
ec
dsa
)));
return
((
EC
_KEY
*
)
ASN1_d2i_fp
((
char
*
(
*
)())
EC
_KEY_new
,(
char
*
(
*
)())
d2i_EC_PUBKEY
,
(
fp
),
(
unsigned
char
**
)(
ec
key
)));
}
int
i2d_EC
DSAPrivateKey_fp
(
FILE
*
fp
,
ECDSA
*
ecdsa
)
int
i2d_EC
_PUBKEY_fp
(
FILE
*
fp
,
EC_KEY
*
eckey
)
{
return
(
ASN1_i2d_fp
(
i2d_EC
DSAPrivateKey
,
fp
,(
unsigned
char
*
)
ecdsa
));
return
(
ASN1_i2d_fp
(
i2d_EC
_PUBKEY
,
fp
,(
unsigned
char
*
)
eckey
));
}
EC
DSA
*
d2i_ECDSA_PUBKEY_fp
(
FILE
*
fp
,
ECDSA
**
ecdsa
)
EC
_KEY
*
d2i_ECPrivateKey_fp
(
FILE
*
fp
,
EC_KEY
**
eckey
)
{
return
((
EC
DSA
*
)
ASN1_d2i_fp
((
char
*
(
*
)())
EC
DSA_new
,(
char
*
(
*
)())
d2i_ECDSA_PUBKEY
,
(
fp
),
(
unsigned
char
**
)(
ec
dsa
)));
return
((
EC
_KEY
*
)
ASN1_d2i_fp
((
char
*
(
*
)())
EC
_KEY_new
,(
char
*
(
*
)())
d2i_ECPrivateKey
,
(
fp
),
(
unsigned
char
**
)(
ec
key
)));
}
int
i2d_EC
DSA_PUBKEY_fp
(
FILE
*
fp
,
ECDSA
*
ecdsa
)
int
i2d_EC
PrivateKey_fp
(
FILE
*
fp
,
EC_KEY
*
eckey
)
{
return
(
ASN1_i2d_fp
(
i2d_EC
DSA_PUBKEY
,
fp
,(
unsigned
char
*
)
ecdsa
));
return
(
ASN1_i2d_fp
(
i2d_EC
PrivateKey
,
fp
,(
unsigned
char
*
)
eckey
));
}
#endif
ECDSA
*
d2i_ECDSAPrivateKey_bio
(
BIO
*
bp
,
ECDSA
**
ecdsa
)
EC_KEY
*
d2i_EC_PUBKEY_bio
(
BIO
*
bp
,
EC_KEY
**
eckey
)
{
return
((
EC
DSA
*
)
ASN1_d2i_bio
((
char
*
(
*
)())
EC
DSA_new
,(
char
*
(
*
)())
d2i_ECDSAPrivateKey
,
(
bp
),
(
unsigned
char
**
)(
ec
dsa
)));
return
((
EC
_KEY
*
)
ASN1_d2i_bio
((
char
*
(
*
)())
EC
_KEY_new
,(
char
*
(
*
)())
d2i_EC_PUBKEY
,
(
bp
),
(
unsigned
char
**
)(
ec
key
)));
}
int
i2d_EC
DSAPrivateKey_bio
(
BIO
*
bp
,
ECDSA
*
ecdsa
)
int
i2d_EC
_PUBKEY_bio
(
BIO
*
bp
,
EC_KEY
*
ecdsa
)
{
return
(
ASN1_i2d_bio
(
i2d_EC
DSAPrivateKey
,
bp
,(
unsigned
char
*
)
ecdsa
));
return
(
ASN1_i2d_bio
(
i2d_EC
_PUBKEY
,
bp
,(
unsigned
char
*
)
ecdsa
));
}
EC
DSA
*
d2i_ECDSA_PUBKEY_bio
(
BIO
*
bp
,
ECDSA
**
ecdsa
)
EC
_KEY
*
d2i_ECPrivateKey_bio
(
BIO
*
bp
,
EC_KEY
**
eckey
)
{
return
((
EC
DSA
*
)
ASN1_d2i_bio
((
char
*
(
*
)())
EC
DSA_new
,(
char
*
(
*
)())
d2i_ECDSA_PUBKEY
,
(
bp
),
(
unsigned
char
**
)(
ec
dsa
)));
return
((
EC
_KEY
*
)
ASN1_d2i_bio
((
char
*
(
*
)())
EC
_KEY_new
,(
char
*
(
*
)())
d2i_ECPrivateKey
,
(
bp
),
(
unsigned
char
**
)(
ec
key
)));
}
int
i2d_EC
DSA_PUBKEY_bio
(
BIO
*
bp
,
ECDSA
*
ecdsa
)
int
i2d_EC
PrivateKey_bio
(
BIO
*
bp
,
EC_KEY
*
eckey
)
{
return
(
ASN1_i2d_bio
(
i2d_EC
DSA_PUBKEY
,
bp
,(
unsigned
char
*
)
ecdsa
));
return
(
ASN1_i2d_bio
(
i2d_EC
PrivateKey
,
bp
,(
unsigned
char
*
)
eckey
));
}
#endif
int
X509_pubkey_digest
(
const
X509
*
data
,
const
EVP_MD
*
type
,
unsigned
char
*
md
,
unsigned
int
*
len
)
{
...
...
util/libeay.num
浏览文件 @
14a7cfb3
...
...
@@ -2784,69 +2784,69 @@ CONF_modules_free 3226 EXIST::FUNCTION:
NCONF_default 3227 EXIST::FUNCTION:
OPENSSL_no_config 3228 EXIST::FUNCTION:
NCONF_WIN32 3229 EXIST::FUNCTION:
ECDSA_set_conversion_form 3230
EXIST::FUNCTION:ECDSA
ECDSA_set_conversion_form 3230
NOEXIST::FUNCTION:
EC_GROUP_new_by_name 3231 EXIST::FUNCTION:EC
d2i_ECDSA_PUBKEY 3232
EXIST::FUNCTION:ECDSA
PEM_read_bio_ECDSAPrivateKey 3233
EXIST::FUNCTION:ECDSA
d2i_ECDSA_PUBKEY 3232
NOEXIST::FUNCTION:
PEM_read_bio_ECDSAPrivateKey 3233
NOEXIST::FUNCTION:
EC_GROUP_get_asn1_flag 3234 EXIST::FUNCTION:EC
ECDSA_SIG_new 3235 EXIST::FUNCTION:ECDSA
ECDSA_verify 3236 EXIST::FUNCTION:ECDSA
EC_POINT_point2hex 3237 EXIST::FUNCTION:EC
i2d_ECDSAParameters 3238
EXIST::FUNCTION:ECDSA
i2d_ECDSAPrivateKey_bio 3239
EXIST::FUNCTION:BIO,ECDSA
EC_ASN1_group2pkparameters 3240
EXIST::FUNCTION:EC
i2d_ECDSAParameters 3238
NOEXIST::FUNCTION:
i2d_ECDSAPrivateKey_bio 3239
NOEXIST::FUNCTION:
EC_ASN1_group2pkparameters 3240
NOEXIST::FUNCTION:
PEM_write_bio_ECDSAParameters 3241 NOEXIST::FUNCTION:
ECDSAParameters_print_fp 3242
EXIST::FUNCTION:ECDSA,FP_API
ECDSAParameters_print_fp 3242
NOEXIST::FUNCTION:
EC_GROUP_check 3243 EXIST::FUNCTION:EC
ENGINE_set_default_ECDSA 3244 EXIST::FUNCTION:
PEM_read_bio_ECDSA_PUBKEY 3245
EXIST::FUNCTION:ECDSA
ECDSA_check_key 3246
EXIST::FUNCTION:ECDSA
ECDSA_new_method 3247
EXIST::FUNCTION:ECDSA
d2i_ECPARAMETERS 3248
EXIST::FUNCTION:EC
d2i_ECDSAPrivateKey_bio 3249
EXIST::FUNCTION:BIO,ECDSA
i2d_ECDSA_PUBKEY 3250
EXIST::FUNCTION:ECDSA
PEM_read_bio_ECDSA_PUBKEY 3245
NOEXIST::FUNCTION:
ECDSA_check_key 3246
NOEXIST::FUNCTION:
ECDSA_new_method 3247
NOEXIST::FUNCTION:
d2i_ECPARAMETERS 3248
NOEXIST::FUNCTION:
d2i_ECDSAPrivateKey_bio 3249
NOEXIST::FUNCTION:
i2d_ECDSA_PUBKEY 3250
NOEXIST::FUNCTION:
EC_POINT_hex2point 3251 EXIST::FUNCTION:EC
i2d_ECDSA_PUBKEY_fp 3252
EXIST::FUNCTION:ECDSA,FP_API
i2d_ECDSA_PUBKEY_fp 3252
NOEXIST::FUNCTION:
ENGINE_unregister_ECDSA 3253 EXIST::FUNCTION:
ECDSA_free 3254
EXIST::FUNCTION:ECDSA
ECDSAParameters_print 3255
EXIST::FUNCTION:BIO,ECDSA
ECDSA_free 3254
NOEXIST::FUNCTION:
ECDSAParameters_print 3255
NOEXIST::FUNCTION:
EC_POINT_bn2point 3256 EXIST::FUNCTION:EC
PEM_write_bio_ECDSA_PUBKEY 3257
EXIST::FUNCTION:ECDSA
PEM_write_bio_ECDSA_PUBKEY 3257
NOEXIST::FUNCTION:
ECDSA_set_method 3258 EXIST::FUNCTION:ECDSA
ECDSA_print 3259
EXIST::FUNCTION:BIO,ECDSA
i2d_ECPARAMETERS 3260
EXIST::FUNCTION:EC
d2i_ECPKPARAMETERS 3261
EXIST::FUNCTION:EC
EVP_PKEY_get1_ECDSA 3262
EXIST::FUNCTION:ECDSA
ECDSA_print 3259
NOEXIST::FUNCTION:
i2d_ECPARAMETERS 3260
NOEXIST::FUNCTION:
d2i_ECPKPARAMETERS 3261
NOEXIST::FUNCTION:
EVP_PKEY_get1_ECDSA 3262
NOEXIST::FUNCTION:
ECDSA_SIG_free 3263 EXIST::FUNCTION:ECDSA
ENGINE_get_default_ECDSA 3264 EXIST::FUNCTION:
PEM_write_ECDSAPrivateKey 3265
EXIST:!WIN16:FUNCTION:ECDSA
PEM_write_ECDSAPrivateKey 3265
NOEXIST::FUNCTION:
ECDSA_sign_setup 3266 EXIST::FUNCTION:ECDSA
ENGINE_get_ECDSA 3267 EXIST::FUNCTION:
ECDSA_get_default_method 3268 EXIST::FUNCTION:ECDSA
d2i_ECDSA_PUBKEY_bio 3269
EXIST::FUNCTION:BIO,ECDSA
d2i_ECDSA_PUBKEY_bio 3269
NOEXIST::FUNCTION:
ECDSA_sign 3270 EXIST::FUNCTION:ECDSA
ENGINE_register_ECDSA 3271 EXIST::FUNCTION:
d2i_ECDSAPrivateKey_fp 3272
EXIST::FUNCTION:ECDSA,FP_API
d2i_ECDSAPrivateKey_fp 3272
NOEXIST::FUNCTION:
EC_GROUP_set_asn1_flag 3273 EXIST::FUNCTION:EC
ECPKPARAMETERS_it 3274
EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:EC
ECPKPARAMETERS_it 3274
EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:EC
ECDSA_print_fp 3275
EXIST::FUNCTION:ECDSA,FP_API
i2d_ECDSAPrivateKey 3276
EXIST::FUNCTION:ECDSA
d2i_ECDSAParameters 3277
EXIST::FUNCTION:ECDSA
PEM_write_bio_ECDSAPrivateKey 3278
EXIST::FUNCTION:ECDSA
ECPKPARAMETERS_it 3274
NOEXIST::FUNCTION:
ECPKPARAMETERS_it 3274
NOEXIST::FUNCTION:
ECDSA_print_fp 3275
NOEXIST::FUNCTION:
i2d_ECDSAPrivateKey 3276
NOEXIST::FUNCTION:
d2i_ECDSAParameters 3277
NOEXIST::FUNCTION:
PEM_write_bio_ECDSAPrivateKey 3278
NOEXIST::FUNCTION:
ERR_load_ECDSA_strings 3279 EXIST::FUNCTION:ECDSA
d2i_ECParameters 3280 EXIST::FUNCTION:EC
d2i_ECDSA_SIG 3281 EXIST::FUNCTION:ECDSA
ECDSA_size 3282 EXIST::FUNCTION:ECDSA
EC_GROUP_set_nid 3283 EXIST::FUNCTION:EC
EVP_PKEY_set1_ECDSA 3284
EXIST::FUNCTION:ECDSA
EVP_PKEY_set1_ECDSA 3284
NOEXIST::FUNCTION:
EC_GROUP_get_nid 3285 EXIST::FUNCTION:EC
d2i_ECDSA_PUBKEY_fp 3286
EXIST::FUNCTION:ECDSA,FP_API
d2i_ECDSA_PUBKEY_fp 3286
NOEXIST::FUNCTION:
EC_METHOD_get_field_type 3287 EXIST::FUNCTION:EC
EC_GROUP_get_point_conversion_form 3288 EXIST:!VMS:FUNCTION:EC
EC_GROUP_get_point_conv_form 3288 EXIST:VMS:FUNCTION:EC
ECDSA_OpenSSL 3289 EXIST::FUNCTION:ECDSA
i2d_ECPKPARAMETERS 3290
EXIST::FUNCTION:EC
i2d_ECPKPARAMETERS 3290
NOEXIST::FUNCTION:
PEM_read_ECDSAParameters 3291 NOEXIST::FUNCTION:
ECDSA_get_ex_data 3292 EXIST::FUNCTION:ECDSA
ECDSA_do_verify 3293 EXIST::FUNCTION:ECDSA
...
...
@@ -2856,35 +2856,35 @@ i2d_ECParameters 3296 EXIST::FUNCTION:EC
d2i_ECPKParameters 3297 EXIST::FUNCTION:EC
i2d_ECDSA_SIG 3298 EXIST::FUNCTION:ECDSA
PEM_read_bio_ECDSAParameters 3299 NOEXIST::FUNCTION:
ECDSAPublicKey_get_octet_string 3300
EXIST::FUNCTION:ECDSA
ECDSA_new 3301
EXIST::FUNCTION:ECDSA
ECDSAPublicKey_get_octet_string 3300
NOEXIST::FUNCTION:
ECDSA_new 3301
NOEXIST::FUNCTION:
EVP_ecdsa 3302 EXIST::FUNCTION:SHA
ECPARAMETERS_it 3303
EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:EC
ECPARAMETERS_it 3303
EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:EC
ECPARAMETERS_it 3303
NOEXIST::FUNCTION:
ECPARAMETERS_it 3303
NOEXIST::FUNCTION:
ECDSA_set_default_method 3304 EXIST::FUNCTION:ECDSA
ENGINE_set_ECDSA 3305 EXIST::FUNCTION:
ECDSA_get_ex_new_index 3306 EXIST::FUNCTION:ECDSA
EC_GROUP_set_point_conversion_form 3307 EXIST:!VMS:FUNCTION:EC
EC_GROUP_set_point_conv_form 3307 EXIST:VMS:FUNCTION:EC
PEM_write_ECDSA_PUBKEY 3308
EXIST:!WIN16:FUNCTION:ECDSA
PEM_write_ECDSA_PUBKEY 3308
NOEXIST::FUNCTION:
EC_GROUP_check_discriminant 3309 EXIST::FUNCTION:EC
ECDSA_set_default_conversion_form 3310
EXIST::FUNCTION:ECDSA
ECDSA_set_default_conversion_form 3310
NOEXIST::FUNCTION:
ECDSA_set_ex_data 3311 EXIST::FUNCTION:ECDSA
ECDSA_get_default_conversion_form 3312
EXIST::FUNCTION:ECDSA
i2d_ECDSA_PUBKEY_bio 3313
EXIST::FUNCTION:BIO,ECDSA
EC_ASN1_pkparameters2group 3314
EXIST::FUNCTION:EC
d2i_ECDSAPrivateKey 3315
EXIST::FUNCTION:ECDSA
ECDSA_get_default_conversion_form 3312
NOEXIST::FUNCTION:
i2d_ECDSA_PUBKEY_bio 3313
NOEXIST::FUNCTION:
EC_ASN1_pkparameters2group 3314
NOEXIST::FUNCTION:
d2i_ECDSAPrivateKey 3315
NOEXIST::FUNCTION:
EC_GROUP_new_by_nid 3316 EXIST::FUNCTION:EC
PEM_read_ECDSA_PUBKEY 3317
EXIST:!WIN16:FUNCTION:ECDSA
ECDSA_up_ref 3318
EXIST::FUNCTION:ECDSA
PEM_read_ECDSA_PUBKEY 3317
NOEXIST::FUNCTION:
ECDSA_up_ref 3318
NOEXIST::FUNCTION:
ENGINE_register_all_ECDSA 3319 EXIST::FUNCTION:
ECDSA_get_conversion_form 3320
EXIST::FUNCTION:ECDSA
ECDSA_get_conversion_form 3320
NOEXIST::FUNCTION:
i2d_ECPKParameters 3321 EXIST::FUNCTION:EC
ECDSA_generate_key 3322
EXIST::FUNCTION:ECDSA
ECDSA_generate_key 3322
NOEXIST::FUNCTION:
PEM_write_ECDSAParameters 3323 NOEXIST::FUNCTION:
i2d_ECDSAPrivateKey_fp 3324
EXIST::FUNCTION:ECDSA,FP_API
PEM_read_ECDSAPrivateKey 3325
EXIST:!WIN16:FUNCTION:ECDSA
ECDSAPublicKey_set_octet_string 3326
EXIST::FUNCTION:ECDSA
i2d_ECDSAPrivateKey_fp 3324
NOEXIST::FUNCTION:
PEM_read_ECDSAPrivateKey 3325
NOEXIST::FUNCTION:
ECDSAPublicKey_set_octet_string 3326
NOEXIST::FUNCTION:
ECPKParameters_print_fp 3327 EXIST::FUNCTION:EC,FP_API
EVP_des_ede3_ecb 3328 EXIST::FUNCTION:DES
EC_GROUP_set_seed 3329 EXIST::FUNCTION:EC
...
...
@@ -2902,15 +2902,15 @@ EVP_des_ede_ecb 3339 EXIST::FUNCTION:DES
d2i_ASN1_UNIVERSALSTRING 3340 EXIST::FUNCTION:
PEM_read_bio_ECPKParameters 3341 EXIST::FUNCTION:EC
ASN1_UNIVERSALSTRING_new 3342 EXIST::FUNCTION:
EC_PRIVATEKEY_new 3343
EXIST::FUNCTION:EC
EC_PRIVATEKEY_it 3344
EXIST:!EXPORT_VAR_AS_FUNCTION:VARIABLE:EC
EC_PRIVATEKEY_it 3344
EXIST:EXPORT_VAR_AS_FUNCTION:FUNCTION:EC
EC_PRIVATEKEY_new 3343
NOEXIST::FUNCTION:
EC_PRIVATEKEY_it 3344
NOEXIST::FUNCTION:
EC_PRIVATEKEY_it 3344
NOEXIST::FUNCTION:
DSO_merge 3345 EXIST::FUNCTION:
d2i_EC_PRIVATEKEY 3346
EXIST::FUNCTION:EC
ECDSA_get_enc_flag 3347
EXIST::FUNCTION:ECDSA
ECDSA_set_enc_flag 3348
EXIST::FUNCTION:ECDSA
i2d_EC_PRIVATEKEY 3349
EXIST::FUNCTION:EC
EC_PRIVATEKEY_free 3350
EXIST::FUNCTION:EC
d2i_EC_PRIVATEKEY 3346
NOEXIST::FUNCTION:
ECDSA_get_enc_flag 3347
NOEXIST::FUNCTION:
ECDSA_set_enc_flag 3348
NOEXIST::FUNCTION:
i2d_EC_PRIVATEKEY 3349
NOEXIST::FUNCTION:
EC_PRIVATEKEY_free 3350
NOEXIST::FUNCTION:
EC_POINT_get_affine_coordinates_GF2m 3351 EXIST::FUNCTION:EC
BN_GF2m_mod_sqr_arr 3352 EXIST::FUNCTION:
EC_GROUP_new_curve_GF2m 3353 EXIST::FUNCTION:EC
...
...
@@ -2940,3 +2940,41 @@ BN_GF2m_mod_exp_arr 3376 EXIST::FUNCTION:
BN_GF2m_poly2arr 3377 EXIST::FUNCTION:
EC_POINT_dup 3378 EXIST::FUNCTION:EC
EC_POINT_set_affine_coordinates_GF2m 3379 EXIST::FUNCTION:EC
i2d_EC_PUBKEY 3380 EXIST::FUNCTION:EC
i2d_ECPrivateKey 3381 EXIST::FUNCTION:EC
EC_KEY_free 3382 EXIST::FUNCTION:EC
PEM_write_bio_ECPrivateKey 3383 EXIST::FUNCTION:EC
ECDSA_DATA_new_method 3384 EXIST::FUNCTION:ECDSA
i2d_ECPrivateKey_bio 3385 EXIST::FUNCTION:BIO,EC
d2i_ECPrivateKey_fp 3386 EXIST::FUNCTION:EC,FP_API
EVP_PKEY_get1_EC_KEY 3387 EXIST::FUNCTION:EC
ECPublicKey_set_octet_string 3388 EXIST::FUNCTION:EC
PEM_write_EC_PUBKEY 3389 EXIST:!WIN16:FUNCTION:EC
EC_KEY_print_fp 3390 EXIST::FUNCTION:EC,FP_API
EC_KEY_new 3391 EXIST::FUNCTION:EC
i2d_EC_PUBKEY_bio 3392 EXIST::FUNCTION:BIO,EC
ECDSA_DATA_new 3393 EXIST::FUNCTION:ECDSA
EVP_PKEY_set1_EC_KEY 3394 EXIST::FUNCTION:EC
ECDSA_DATA_free 3395 EXIST::FUNCTION:ECDSA
EC_KEY_print 3396 EXIST::FUNCTION:BIO,EC
PEM_write_bio_EC_PUBKEY 3397 EXIST::FUNCTION:EC
ECParameters_print 3398 EXIST::FUNCTION:BIO,EC
d2i_EC_PUBKEY_fp 3399 EXIST::FUNCTION:EC,FP_API
PEM_write_ECPrivateKey 3400 EXIST:!WIN16:FUNCTION:EC
ecdsa_check 3401 EXIST::FUNCTION:ECDSA
PEM_read_ECPrivateKey 3402 EXIST:!WIN16:FUNCTION:EC
d2i_ECPrivateKey_bio 3403 EXIST::FUNCTION:BIO,EC
ECParameters_print_fp 3404 EXIST::FUNCTION:EC,FP_API
i2d_EC_PUBKEY_fp 3405 EXIST::FUNCTION:EC,FP_API
i2d_ECPrivateKey_fp 3406 EXIST::FUNCTION:EC,FP_API
d2i_EC_PUBKEY 3407 EXIST::FUNCTION:EC
d2i_ECPrivateKey 3408 EXIST::FUNCTION:EC
d2i_EC_PUBKEY_bio 3409 EXIST::FUNCTION:BIO,EC
ECPublicKey_get_octet_string 3410 EXIST::FUNCTION:EC
PEM_read_EC_PUBKEY 3411 EXIST:!WIN16:FUNCTION:EC
PEM_read_bio_EC_PUBKEY 3412 EXIST::FUNCTION:EC
PEM_read_bio_ECPrivateKey 3413 EXIST::FUNCTION:EC
EC_KEY_dup 3414 EXIST::FUNCTION:EC
EC_KEY_check_key 3415 EXIST::FUNCTION:EC
EC_KEY_generate_key 3416 EXIST::FUNCTION:EC
EC_KEY_copy 3417 EXIST::FUNCTION:EC
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录