Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
525f51f6
T
Third Party Openssl
项目概览
OpenHarmony
/
Third Party Openssl
接近 2 年 前同步成功
通知
12
Star
18
Fork
1
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
T
Third Party Openssl
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
525f51f6
编写于
12月 23, 1999
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Add PKCS#8 utility functions and add PBE options.
上级
78baa17a
变更
12
显示空白变更内容
内联
并排
Showing
12 changed file
with
303 addition
and
39 deletion
+303
-39
CHANGES
CHANGES
+6
-0
apps/pkcs12.c
apps/pkcs12.c
+25
-3
apps/pkcs8.c
apps/pkcs8.c
+11
-0
crypto/asn1/Makefile.ssl
crypto/asn1/Makefile.ssl
+7
-0
crypto/objects/obj_dat.h
crypto/objects/obj_dat.h
+31
-21
crypto/objects/objects.h
crypto/objects/objects.h
+12
-0
crypto/pem/pem.h
crypto/pem/pem.h
+27
-0
crypto/pem/pem_err.c
crypto/pem/pem_err.c
+3
-0
crypto/pem/pem_lib.c
crypto/pem/pem_lib.c
+130
-11
doc/man/pkcs8.pod
doc/man/pkcs8.pod
+38
-3
util/libeay.num
util/libeay.num
+12
-0
util/mkerr.pl
util/mkerr.pl
+1
-1
未找到文件。
CHANGES
浏览文件 @
525f51f6
...
@@ -4,6 +4,12 @@
...
@@ -4,6 +4,12 @@
Changes between 0.9.4 and 0.9.5 [xx XXX 1999]
Changes between 0.9.4 and 0.9.5 [xx XXX 1999]
*) Add a bunch of DER and PEM functions to handle PKCS#8 format private
keys. Add some short names for PKCS#8 PBE algorithms and allow them
to be specified on the command line for the pkcs8 and pkcs12 utilities.
Update documentation.
[Steve Henson]
*) Support for ASN1 "NULL" type. This could be handled before by using
*) Support for ASN1 "NULL" type. This could be handled before by using
ASN1_TYPE but there wasn't any function that would try to read a NULL
ASN1_TYPE but there wasn't any function that would try to read a NULL
and produce an error if it couldn't. For compatibility we also have
and produce an error if it couldn't. For compatibility we also have
...
...
apps/pkcs12.c
浏览文件 @
525f51f6
...
@@ -104,6 +104,7 @@ int MAIN(int argc, char **argv)
...
@@ -104,6 +104,7 @@ int MAIN(int argc, char **argv)
int
twopass
=
0
;
int
twopass
=
0
;
int
keytype
=
0
;
int
keytype
=
0
;
int
cert_pbe
=
NID_pbe_WithSHA1And40BitRC2_CBC
;
int
cert_pbe
=
NID_pbe_WithSHA1And40BitRC2_CBC
;
int
key_pbe
=
NID_pbe_WithSHA1And3_Key_TripleDES_CBC
;
int
ret
=
1
;
int
ret
=
1
;
int
macver
=
1
;
int
macver
=
1
;
int
noprompt
=
0
;
int
noprompt
=
0
;
...
@@ -143,7 +144,27 @@ int MAIN(int argc, char **argv)
...
@@ -143,7 +144,27 @@ int MAIN(int argc, char **argv)
else
if
(
!
strcmp
(
*
args
,
"-maciter"
))
else
if
(
!
strcmp
(
*
args
,
"-maciter"
))
maciter
=
PKCS12_DEFAULT_ITER
;
maciter
=
PKCS12_DEFAULT_ITER
;
else
if
(
!
strcmp
(
*
args
,
"-nodes"
))
enc
=
NULL
;
else
if
(
!
strcmp
(
*
args
,
"-nodes"
))
enc
=
NULL
;
else
if
(
!
strcmp
(
*
args
,
"-inkey"
))
{
else
if
(
!
strcmp
(
*
args
,
"-certpbe"
))
{
if
(
args
[
1
])
{
args
++
;
cert_pbe
=
OBJ_txt2nid
(
*
args
);
if
(
cert_pbe
==
NID_undef
)
{
BIO_printf
(
bio_err
,
"Unknown PBE algorithm %s
\n
"
,
*
args
);
badarg
=
1
;
}
}
else
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-keypbe"
))
{
if
(
args
[
1
])
{
args
++
;
key_pbe
=
OBJ_txt2nid
(
*
args
);
if
(
key_pbe
==
NID_undef
)
{
BIO_printf
(
bio_err
,
"Unknown PBE algorithm %s
\n
"
,
*
args
);
badarg
=
1
;
}
}
else
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-inkey"
))
{
if
(
args
[
1
])
{
if
(
args
[
1
])
{
args
++
;
args
++
;
keyname
=
*
args
;
keyname
=
*
args
;
...
@@ -224,6 +245,8 @@ int MAIN(int argc, char **argv)
...
@@ -224,6 +245,8 @@ int MAIN(int argc, char **argv)
BIO_printf
(
bio_err
,
"-maciter use MAC iteration
\n
"
);
BIO_printf
(
bio_err
,
"-maciter use MAC iteration
\n
"
);
BIO_printf
(
bio_err
,
"-twopass separate MAC, encryption passwords
\n
"
);
BIO_printf
(
bio_err
,
"-twopass separate MAC, encryption passwords
\n
"
);
BIO_printf
(
bio_err
,
"-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)
\n
"
);
BIO_printf
(
bio_err
,
"-descert encrypt PKCS#12 certificates with triple DES (default RC2-40)
\n
"
);
BIO_printf
(
bio_err
,
"-certpbe alg specify certificate PBE algorithm (default RC2-40)
\n
"
);
BIO_printf
(
bio_err
,
"-keypbe alg specify private key PBE algorithm (default 3DES)
\n
"
);
BIO_printf
(
bio_err
,
"-keyex set MS key exchange type
\n
"
);
BIO_printf
(
bio_err
,
"-keyex set MS key exchange type
\n
"
);
BIO_printf
(
bio_err
,
"-keysig set MS key signature type
\n
"
);
BIO_printf
(
bio_err
,
"-keysig set MS key signature type
\n
"
);
BIO_printf
(
bio_err
,
"-password p set import/export password (NOT RECOMMENDED)
\n
"
);
BIO_printf
(
bio_err
,
"-password p set import/export password (NOT RECOMMENDED)
\n
"
);
...
@@ -391,8 +414,7 @@ int MAIN(int argc, char **argv)
...
@@ -391,8 +414,7 @@ int MAIN(int argc, char **argv)
p8
=
EVP_PKEY2PKCS8
(
key
);
p8
=
EVP_PKEY2PKCS8
(
key
);
EVP_PKEY_free
(
key
);
EVP_PKEY_free
(
key
);
if
(
keytype
)
PKCS8_add_keyusage
(
p8
,
keytype
);
if
(
keytype
)
PKCS8_add_keyusage
(
p8
,
keytype
);
bag
=
PKCS12_MAKE_SHKEYBAG
(
NID_pbe_WithSHA1And3_Key_TripleDES_CBC
,
bag
=
PKCS12_MAKE_SHKEYBAG
(
key_pbe
,
cpass
,
-
1
,
NULL
,
0
,
iter
,
p8
);
cpass
,
-
1
,
NULL
,
0
,
iter
,
p8
);
PKCS8_PRIV_KEY_INFO_free
(
p8
);
PKCS8_PRIV_KEY_INFO_free
(
p8
);
if
(
name
)
PKCS12_add_friendlyname
(
bag
,
name
,
-
1
);
if
(
name
)
PKCS12_add_friendlyname
(
bag
,
name
,
-
1
);
PKCS12_add_localkeyid
(
bag
,
keyid
,
keyidlen
);
PKCS12_add_localkeyid
(
bag
,
keyid
,
keyidlen
);
...
...
apps/pkcs8.c
浏览文件 @
525f51f6
...
@@ -99,6 +99,16 @@ int MAIN(int argc, char **argv)
...
@@ -99,6 +99,16 @@ int MAIN(int argc, char **argv)
badarg
=
1
;
badarg
=
1
;
}
}
}
else
badarg
=
1
;
}
else
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-v1"
))
{
if
(
args
[
1
])
{
args
++
;
pbe_nid
=
OBJ_txt2nid
(
*
args
);
if
(
pbe_nid
==
NID_undef
)
{
BIO_printf
(
bio_err
,
"Unknown PBE algorithm %s
\n
"
,
*
args
);
badarg
=
1
;
}
}
else
badarg
=
1
;
}
else
if
(
!
strcmp
(
*
args
,
"-inform"
))
{
}
else
if
(
!
strcmp
(
*
args
,
"-inform"
))
{
if
(
args
[
1
])
{
if
(
args
[
1
])
{
args
++
;
args
++
;
...
@@ -139,6 +149,7 @@ int MAIN(int argc, char **argv)
...
@@ -139,6 +149,7 @@ int MAIN(int argc, char **argv)
BIO_printf
(
bio_err
,
"-noiter use 1 as iteration count
\n
"
);
BIO_printf
(
bio_err
,
"-noiter use 1 as iteration count
\n
"
);
BIO_printf
(
bio_err
,
"-nocrypt use or expect unencrypted private key
\n
"
);
BIO_printf
(
bio_err
,
"-nocrypt use or expect unencrypted private key
\n
"
);
BIO_printf
(
bio_err
,
"-v2 alg use PKCS#5 v2.0 and cipher
\"
alg
\"\n
"
);
BIO_printf
(
bio_err
,
"-v2 alg use PKCS#5 v2.0 and cipher
\"
alg
\"\n
"
);
BIO_printf
(
bio_err
,
"-v1 obj use PKCS#5 v1.5 and cipher
\"
alg
\"\n
"
);
return
(
1
);
return
(
1
);
}
}
...
...
crypto/asn1/Makefile.ssl
浏览文件 @
525f51f6
...
@@ -223,6 +223,13 @@ a_meth.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
...
@@ -223,6 +223,13 @@ a_meth.o: ../../include/openssl/e_os2.h ../../include/openssl/err.h
a_meth.o
:
../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
a_meth.o
:
../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
a_meth.o
:
../../include/openssl/safestack.h ../../include/openssl/stack.h
a_meth.o
:
../../include/openssl/safestack.h ../../include/openssl/stack.h
a_meth.o
:
../cryptlib.h
a_meth.o
:
../cryptlib.h
a_null.o
:
../../include/openssl/asn1.h ../../include/openssl/bio.h
a_null.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
a_null.o
:
../../include/openssl/crypto.h ../../include/openssl/e_os.h
a_null.o
:
../../include/openssl/e_os2.h ../../include/openssl/err.h
a_null.o
:
../../include/openssl/opensslconf.h ../../include/openssl/opensslv.h
a_null.o
:
../../include/openssl/safestack.h ../../include/openssl/stack.h
a_null.o
:
../cryptlib.h
a_object.o
:
../../include/openssl/asn1.h ../../include/openssl/bio.h
a_object.o
:
../../include/openssl/asn1.h ../../include/openssl/bio.h
a_object.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
a_object.o
:
../../include/openssl/bn.h ../../include/openssl/buffer.h
a_object.o
:
../../include/openssl/crypto.h ../../include/openssl/e_os.h
a_object.o
:
../../include/openssl/crypto.h ../../include/openssl/e_os.h
...
...
crypto/objects/obj_dat.h
浏览文件 @
525f51f6
...
@@ -62,7 +62,7 @@
...
@@ -62,7 +62,7 @@
*/
*/
#define NUM_NID 181
#define NUM_NID 181
#define NUM_SN 1
28
#define NUM_SN 1
40
#define NUM_LN 175
#define NUM_LN 175
#define NUM_OBJ 152
#define NUM_OBJ 152
...
@@ -233,10 +233,10 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
...
@@ -233,10 +233,10 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
&
(
lvalues
[
47
]),
0
},
&
(
lvalues
[
47
]),
0
},
{
"RSA-MD5"
,
"md5WithRSAEncryption"
,
NID_md5WithRSAEncryption
,
9
,
{
"RSA-MD5"
,
"md5WithRSAEncryption"
,
NID_md5WithRSAEncryption
,
9
,
&
(
lvalues
[
56
]),
0
},
&
(
lvalues
[
56
]),
0
},
{
"
pbeWithMD2AndDES-CBC"
,
"pbeWithMD2AndDES-CBC"
,
{
"
PBE-MD2-DES"
,
"pbeWithMD2AndDES-CBC"
,
NID_pbeWithMD2AndDES_CBC
,
9
,
NID_pbeWithMD2AndDES_CBC
,
9
,
&
(
lvalues
[
65
]),
0
},
&
(
lvalues
[
65
]),
0
},
{
"
pbeWithMD5AndDES-CBC"
,
"pbeWithMD5AndDES-CBC"
,
{
"
PBE-MD5-DES"
,
"pbeWithMD5AndDES-CBC"
,
NID_pbeWithMD5AndDES_CBC
,
9
,
NID_pbeWithMD5AndDES_CBC
,
9
,
&
(
lvalues
[
74
]),
0
},
&
(
lvalues
[
74
]),
0
},
{
"X500"
,
"X500"
,
NID_X500
,
1
,
&
(
lvalues
[
83
]),
0
},
{
"X500"
,
"X500"
,
NID_X500
,
1
,
&
(
lvalues
[
83
]),
0
},
{
"X509"
,
"X509"
,
NID_X509
,
2
,
&
(
lvalues
[
84
]),
0
},
{
"X509"
,
"X509"
,
NID_X509
,
2
,
&
(
lvalues
[
84
]),
0
},
{
"CN"
,
"commonName"
,
NID_commonName
,
3
,
&
(
lvalues
[
86
]),
0
},
{
"CN"
,
"commonName"
,
NID_commonName
,
3
,
&
(
lvalues
[
86
]),
0
},
...
@@ -312,8 +312,8 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
...
@@ -312,8 +312,8 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
&
(
lvalues
[
355
]),
0
},
&
(
lvalues
[
355
]),
0
},
{
"DSA-SHA"
,
"dsaWithSHA"
,
NID_dsaWithSHA
,
5
,
&
(
lvalues
[
364
]),
0
},
{
"DSA-SHA"
,
"dsaWithSHA"
,
NID_dsaWithSHA
,
5
,
&
(
lvalues
[
364
]),
0
},
{
"DSA-old"
,
"dsaEncryption-old"
,
NID_dsa_2
,
5
,
&
(
lvalues
[
369
]),
0
},
{
"DSA-old"
,
"dsaEncryption-old"
,
NID_dsa_2
,
5
,
&
(
lvalues
[
369
]),
0
},
{
"
pbeWithSHA1AndRC2-CBC"
,
"pbeWithSHA1AndRC2-CBC"
,
{
"
PBE-SHA1-RC2-64"
,
"pbeWithSHA1AndRC2-CBC"
,
NID_pbeWithSHA1AndRC2_CBC
,
NID_pbeWithSHA1AndRC2_CBC
,
9
,
&
(
lvalues
[
374
]),
0
},
9
,
&
(
lvalues
[
374
]),
0
},
{
"PBKDF2"
,
"PBKDF2"
,
NID_id_pbkdf2
,
9
,
&
(
lvalues
[
383
]),
0
},
{
"PBKDF2"
,
"PBKDF2"
,
NID_id_pbkdf2
,
9
,
&
(
lvalues
[
383
]),
0
},
{
"DSA-SHA1-old"
,
"dsaWithSHA1-old"
,
NID_dsaWithSHA1_2
,
5
,
&
(
lvalues
[
392
]),
0
},
{
"DSA-SHA1-old"
,
"dsaWithSHA1-old"
,
NID_dsaWithSHA1_2
,
5
,
&
(
lvalues
[
392
]),
0
},
{
"nsCertType"
,
"Netscape Cert Type"
,
NID_netscape_cert_type
,
9
,
{
"nsCertType"
,
"Netscape Cert Type"
,
NID_netscape_cert_type
,
9
,
...
@@ -417,19 +417,17 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
...
@@ -417,19 +417,17 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
{
"invalidityDate"
,
"Invalidity Date"
,
NID_invalidity_date
,
3
,
{
"invalidityDate"
,
"Invalidity Date"
,
NID_invalidity_date
,
3
,
&
(
lvalues
[
733
]),
0
},
&
(
lvalues
[
733
]),
0
},
{
"SXNetID"
,
"Strong Extranet ID"
,
NID_sxnet
,
5
,
&
(
lvalues
[
736
]),
0
},
{
"SXNetID"
,
"Strong Extranet ID"
,
NID_sxnet
,
5
,
&
(
lvalues
[
736
]),
0
},
{
"
pbeWithSHA1And128BitRC4
"
,
"pbeWithSHA1And128BitRC4"
,
{
"
PBE-SHA1-RC4-128
"
,
"pbeWithSHA1And128BitRC4"
,
NID_pbe_WithSHA1And128BitRC4
,
10
,
&
(
lvalues
[
741
]),
0
},
NID_pbe_WithSHA1And128BitRC4
,
10
,
&
(
lvalues
[
741
]),
0
},
{
"
pbeWithSHA1And40BitRC4
"
,
"pbeWithSHA1And40BitRC4"
,
{
"
PBE-SHA1-RC4-40
"
,
"pbeWithSHA1And40BitRC4"
,
NID_pbe_WithSHA1And40BitRC4
,
10
,
&
(
lvalues
[
751
]),
0
},
NID_pbe_WithSHA1And40BitRC4
,
10
,
&
(
lvalues
[
751
]),
0
},
{
"pbeWithSHA1And3-KeyTripleDES-CBC"
,
{
"PBE-SHA1-3DES"
,
"pbeWithSHA1And3-KeyTripleDES-CBC"
,
"pbeWithSHA1And3-KeyTripleDES-CBC"
,
NID_pbe_WithSHA1And3_Key_TripleDES_CBC
,
10
,
&
(
lvalues
[
761
]),
0
},
NID_pbe_WithSHA1And3_Key_TripleDES_CBC
,
10
,
&
(
lvalues
[
761
]),
0
},
{
"pbeWithSHA1And2-KeyTripleDES-CBC"
,
{
"PBE-SHA1-2DES"
,
"pbeWithSHA1And2-KeyTripleDES-CBC"
,
"pbeWithSHA1And2-KeyTripleDES-CBC"
,
NID_pbe_WithSHA1And2_Key_TripleDES_CBC
,
10
,
&
(
lvalues
[
771
]),
0
},
NID_pbe_WithSHA1And2_Key_TripleDES_CBC
,
10
,
&
(
lvalues
[
771
]),
0
},
{
"
pbeWithSHA1And128BitRC2-CBC
"
,
"pbeWithSHA1And128BitRC2-CBC"
,
{
"
PBE-SHA1-RC2-128
"
,
"pbeWithSHA1And128BitRC2-CBC"
,
NID_pbe_WithSHA1And128BitRC2_CBC
,
10
,
&
(
lvalues
[
781
]),
0
},
NID_pbe_WithSHA1And128BitRC2_CBC
,
10
,
&
(
lvalues
[
781
]),
0
},
{
"
pbeWithSHA1And40BitRC2-CBC
"
,
"pbeWithSHA1And40BitRC2-CBC"
,
{
"
PBE-SHA1-RC2-40
"
,
"pbeWithSHA1And40BitRC2-CBC"
,
NID_pbe_WithSHA1And40BitRC2_CBC
,
10
,
&
(
lvalues
[
791
]),
0
},
NID_pbe_WithSHA1And40BitRC2_CBC
,
10
,
&
(
lvalues
[
791
]),
0
},
{
"keyBag"
,
"keyBag"
,
NID_keyBag
,
11
,
&
(
lvalues
[
801
]),
0
},
{
"keyBag"
,
"keyBag"
,
NID_keyBag
,
11
,
&
(
lvalues
[
801
]),
0
},
{
"pkcs8ShroudedKeyBag"
,
"pkcs8ShroudedKeyBag"
,
NID_pkcs8ShroudedKeyBag
,
{
"pkcs8ShroudedKeyBag"
,
"pkcs8ShroudedKeyBag"
,
NID_pkcs8ShroudedKeyBag
,
...
@@ -455,12 +453,12 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
...
@@ -455,12 +453,12 @@ static ASN1_OBJECT nid_objs[NUM_NID]={
{
"RC2-64-CBC"
,
"rc2-64-cbc"
,
NID_rc2_64_cbc
,
0
,
NULL
},
{
"RC2-64-CBC"
,
"rc2-64-cbc"
,
NID_rc2_64_cbc
,
0
,
NULL
},
{
"SMIME-CAPS"
,
"S/MIME Capabilities"
,
NID_SMIMECapabilities
,
9
,
{
"SMIME-CAPS"
,
"S/MIME Capabilities"
,
NID_SMIMECapabilities
,
9
,
&
(
lvalues
[
957
]),
0
},
&
(
lvalues
[
957
]),
0
},
{
"
pbeWithMD2AndRC2-CBC"
,
"pbeWithMD2AndRC2-CBC"
,
{
"
PBE-MD2-RC2-64"
,
"pbeWithMD2AndRC2-CBC"
,
NID_pbeWithMD2AndRC2_CBC
,
9
,
NID_pbeWithMD2AndRC2_CBC
,
9
,
&
(
lvalues
[
966
]),
0
},
&
(
lvalues
[
966
]),
0
},
{
"
pbeWithMD5AndRC2-CBC"
,
"pbeWithMD5AndRC2-CBC"
,
{
"
PBE-MD5-RC2-64"
,
"pbeWithMD5AndRC2-CBC"
,
NID_pbeWithMD5AndRC2_CBC
,
9
,
NID_pbeWithMD5AndRC2_CBC
,
9
,
&
(
lvalues
[
975
]),
0
},
&
(
lvalues
[
975
]),
0
},
{
"
pbeWithSHA1AndDES-CBC"
,
"pbeWithSHA1AndDES-CBC"
,
{
"
PBE-SHA1-DES"
,
"pbeWithSHA1AndDES-CBC"
,
NID_pbeWithSHA1AndDES_CBC
,
9
,
NID_pbeWithSHA1AndDES_CBC
,
9
,
&
(
lvalues
[
984
]),
0
},
&
(
lvalues
[
984
]),
0
},
{
"msExtReq"
,
"Microsoft Extension Request"
,
NID_ms_ext_req
,
10
,
{
"msExtReq"
,
"Microsoft Extension Request"
,
NID_ms_ext_req
,
10
,
&
(
lvalues
[
993
]),
0
},
&
(
lvalues
[
993
]),
0
},
{
"extReq"
,
"Extension Request"
,
NID_ext_req
,
9
,
&
(
lvalues
[
1003
]),
0
},
{
"extReq"
,
"Extension Request"
,
NID_ext_req
,
9
,
&
(
lvalues
[
1003
]),
0
},
...
@@ -522,6 +520,18 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
...
@@ -522,6 +520,18 @@ static ASN1_OBJECT *sn_objs[NUM_SN]={
&
(
nid_objs
[
17
]),
/* "O" */
&
(
nid_objs
[
17
]),
/* "O" */
&
(
nid_objs
[
178
]),
/* "OCSP" */
&
(
nid_objs
[
178
]),
/* "OCSP" */
&
(
nid_objs
[
18
]),
/* "OU" */
&
(
nid_objs
[
18
]),
/* "OU" */
&
(
nid_objs
[
9
]),
/* "PBE-MD2-DES" */
&
(
nid_objs
[
168
]),
/* "PBE-MD2-RC2-64" */
&
(
nid_objs
[
10
]),
/* "PBE-MD5-DES" */
&
(
nid_objs
[
169
]),
/* "PBE-MD5-RC2-64" */
&
(
nid_objs
[
147
]),
/* "PBE-SHA1-2DES" */
&
(
nid_objs
[
146
]),
/* "PBE-SHA1-3DES" */
&
(
nid_objs
[
170
]),
/* "PBE-SHA1-DES" */
&
(
nid_objs
[
148
]),
/* "PBE-SHA1-RC2-128" */
&
(
nid_objs
[
149
]),
/* "PBE-SHA1-RC2-40" */
&
(
nid_objs
[
68
]),
/* "PBE-SHA1-RC2-64" */
&
(
nid_objs
[
144
]),
/* "PBE-SHA1-RC4-128" */
&
(
nid_objs
[
145
]),
/* "PBE-SHA1-RC4-40" */
&
(
nid_objs
[
127
]),
/* "PKIX" */
&
(
nid_objs
[
127
]),
/* "PKIX" */
&
(
nid_objs
[
98
]),
/* "RC2-40-CBC" */
&
(
nid_objs
[
98
]),
/* "RC2-40-CBC" */
&
(
nid_objs
[
166
]),
/* "RC2-64-CBC" */
&
(
nid_objs
[
166
]),
/* "RC2-64-CBC" */
...
...
crypto/objects/objects.h
浏览文件 @
525f51f6
...
@@ -110,10 +110,12 @@ extern "C" {
...
@@ -110,10 +110,12 @@ extern "C" {
#define NID_md5WithRSAEncryption 8
#define NID_md5WithRSAEncryption 8
#define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L
#define OBJ_md5WithRSAEncryption OBJ_pkcs,1L,4L
#define SN_pbeWithMD2AndDES_CBC "PBE-MD2-DES"
#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC"
#define LN_pbeWithMD2AndDES_CBC "pbeWithMD2AndDES-CBC"
#define NID_pbeWithMD2AndDES_CBC 9
#define NID_pbeWithMD2AndDES_CBC 9
#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L
#define OBJ_pbeWithMD2AndDES_CBC OBJ_pkcs,5L,1L
#define SN_pbeWithMD5AndDES_CBC "PBE-MD5-DES"
#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC"
#define LN_pbeWithMD5AndDES_CBC "pbeWithMD5AndDES-CBC"
#define NID_pbeWithMD5AndDES_CBC 10
#define NID_pbeWithMD5AndDES_CBC 10
#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L
#define OBJ_pbeWithMD5AndDES_CBC OBJ_pkcs,5L,3L
...
@@ -380,6 +382,7 @@ extern "C" {
...
@@ -380,6 +382,7 @@ extern "C" {
#define OBJ_dsa_2 OBJ_algorithm,12L
#define OBJ_dsa_2 OBJ_algorithm,12L
/* proposed by microsoft to RSA */
/* proposed by microsoft to RSA */
#define SN_pbeWithSHA1AndRC2_CBC "PBE-SHA1-RC2-64"
#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC"
#define LN_pbeWithSHA1AndRC2_CBC "pbeWithSHA1AndRC2-CBC"
#define NID_pbeWithSHA1AndRC2_CBC 68
#define NID_pbeWithSHA1AndRC2_CBC 68
#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L
#define OBJ_pbeWithSHA1AndRC2_CBC OBJ_pkcs,5L,11L
...
@@ -767,26 +770,32 @@ extern "C" {
...
@@ -767,26 +770,32 @@ extern "C" {
#define OBJ_pkcs12 OBJ_pkcs,12L
#define OBJ_pkcs12 OBJ_pkcs,12L
#define OBJ_pkcs12_pbeids OBJ_pkcs12, 1
#define OBJ_pkcs12_pbeids OBJ_pkcs12, 1
#define SN_pbe_WithSHA1And128BitRC4 "PBE-SHA1-RC4-128"
#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4"
#define LN_pbe_WithSHA1And128BitRC4 "pbeWithSHA1And128BitRC4"
#define NID_pbe_WithSHA1And128BitRC4 144
#define NID_pbe_WithSHA1And128BitRC4 144
#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L
#define OBJ_pbe_WithSHA1And128BitRC4 OBJ_pkcs12_pbeids, 1L
#define SN_pbe_WithSHA1And40BitRC4 "PBE-SHA1-RC4-40"
#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4"
#define LN_pbe_WithSHA1And40BitRC4 "pbeWithSHA1And40BitRC4"
#define NID_pbe_WithSHA1And40BitRC4 145
#define NID_pbe_WithSHA1And40BitRC4 145
#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L
#define OBJ_pbe_WithSHA1And40BitRC4 OBJ_pkcs12_pbeids, 2L
#define SN_pbe_WithSHA1And3_Key_TripleDES_CBC "PBE-SHA1-3DES"
#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC"
#define LN_pbe_WithSHA1And3_Key_TripleDES_CBC "pbeWithSHA1And3-KeyTripleDES-CBC"
#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146
#define NID_pbe_WithSHA1And3_Key_TripleDES_CBC 146
#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L
#define OBJ_pbe_WithSHA1And3_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 3L
#define SN_pbe_WithSHA1And2_Key_TripleDES_CBC "PBE-SHA1-2DES"
#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC"
#define LN_pbe_WithSHA1And2_Key_TripleDES_CBC "pbeWithSHA1And2-KeyTripleDES-CBC"
#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147
#define NID_pbe_WithSHA1And2_Key_TripleDES_CBC 147
#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L
#define OBJ_pbe_WithSHA1And2_Key_TripleDES_CBC OBJ_pkcs12_pbeids, 4L
#define SN_pbe_WithSHA1And128BitRC2_CBC "PBE-SHA1-RC2-128"
#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC"
#define LN_pbe_WithSHA1And128BitRC2_CBC "pbeWithSHA1And128BitRC2-CBC"
#define NID_pbe_WithSHA1And128BitRC2_CBC 148
#define NID_pbe_WithSHA1And128BitRC2_CBC 148
#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L
#define OBJ_pbe_WithSHA1And128BitRC2_CBC OBJ_pkcs12_pbeids, 5L
#define SN_pbe_WithSHA1And40BitRC2_CBC "PBE-SHA1-RC2-40"
#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC"
#define LN_pbe_WithSHA1And40BitRC2_CBC "pbeWithSHA1And40BitRC2-CBC"
#define NID_pbe_WithSHA1And40BitRC2_CBC 149
#define NID_pbe_WithSHA1And40BitRC2_CBC 149
#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L
#define OBJ_pbe_WithSHA1And40BitRC2_CBC OBJ_pkcs12_pbeids, 6L
...
@@ -878,14 +887,17 @@ extern "C" {
...
@@ -878,14 +887,17 @@ extern "C" {
#define NID_SMIMECapabilities 167
#define NID_SMIMECapabilities 167
#define OBJ_SMIMECapabilities OBJ_pkcs9,15L
#define OBJ_SMIMECapabilities OBJ_pkcs9,15L
#define SN_pbeWithMD2AndRC2_CBC "PBE-MD2-RC2-64"
#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC"
#define LN_pbeWithMD2AndRC2_CBC "pbeWithMD2AndRC2-CBC"
#define NID_pbeWithMD2AndRC2_CBC 168
#define NID_pbeWithMD2AndRC2_CBC 168
#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L
#define OBJ_pbeWithMD2AndRC2_CBC OBJ_pkcs,5L,4L
#define SN_pbeWithMD5AndRC2_CBC "PBE-MD5-RC2-64"
#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC"
#define LN_pbeWithMD5AndRC2_CBC "pbeWithMD5AndRC2-CBC"
#define NID_pbeWithMD5AndRC2_CBC 169
#define NID_pbeWithMD5AndRC2_CBC 169
#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L
#define OBJ_pbeWithMD5AndRC2_CBC OBJ_pkcs,5L,6L
#define SN_pbeWithSHA1AndDES_CBC "PBE-SHA1-DES"
#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC"
#define LN_pbeWithSHA1AndDES_CBC "pbeWithSHA1AndDES-CBC"
#define NID_pbeWithSHA1AndDES_CBC 170
#define NID_pbeWithSHA1AndDES_CBC 170
#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L
#define OBJ_pbeWithSHA1AndDES_CBC OBJ_pkcs,5L,10L
...
...
crypto/pem/pem.h
浏览文件 @
525f51f6
...
@@ -574,10 +574,34 @@ DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY)
...
@@ -574,10 +574,34 @@ DECLARE_PEM_rw_cb(PrivateKey, EVP_PKEY)
DECLARE_PEM_rw
(
PUBKEY
,
EVP_PKEY
)
DECLARE_PEM_rw
(
PUBKEY
,
EVP_PKEY
)
int
PEM_write_bio_PKCS8PrivateKey_nid
(
BIO
*
bp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
int
PEM_write_bio_PKCS8PrivateKey
(
BIO
*
,
EVP_PKEY
*
,
const
EVP_CIPHER
*
,
int
PEM_write_bio_PKCS8PrivateKey
(
BIO
*
,
EVP_PKEY
*
,
const
EVP_CIPHER
*
,
char
*
,
int
,
pem_password_cb
*
,
void
*
);
char
*
,
int
,
pem_password_cb
*
,
void
*
);
int
i2d_PKCS8PrivateKey_bio
(
BIO
*
bp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
int
i2d_PKCS8PrivateKey_nid_bio
(
BIO
*
bp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
EVP_PKEY
*
d2i_PKCS8PrivateKey_bio
(
BIO
*
bp
,
EVP_PKEY
**
x
,
pem_password_cb
*
cb
,
void
*
u
);
int
i2d_PKCS8PrivateKey_fp
(
FILE
*
fp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
int
i2d_PKCS8PrivateKey_nid_fp
(
FILE
*
fp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
int
PEM_write_PKCS8PrivateKey_nid
(
FILE
*
fp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
EVP_PKEY
*
d2i_PKCS8PrivateKey_fp
(
FILE
*
fp
,
EVP_PKEY
**
x
,
pem_password_cb
*
cb
,
void
*
u
);
int
PEM_write_PKCS8PrivateKey
(
FILE
*
fp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
int
PEM_write_PKCS8PrivateKey
(
FILE
*
fp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cd
,
void
*
u
);
char
*
kstr
,
int
klen
,
pem_password_cb
*
cd
,
void
*
u
);
#endif
/* SSLEAY_MACROS */
#endif
/* SSLEAY_MACROS */
...
@@ -589,6 +613,8 @@ int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
...
@@ -589,6 +613,8 @@ int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
/* Error codes for the PEM functions. */
/* Error codes for the PEM functions. */
/* Function codes. */
/* Function codes. */
#define PEM_F_D2I_PKCS8PRIVATEKEY_BIO 120
#define PEM_F_D2I_PKCS8PRIVATEKEY_FP 121
#define PEM_F_DEF_CALLBACK 100
#define PEM_F_DEF_CALLBACK 100
#define PEM_F_LOAD_IV 101
#define PEM_F_LOAD_IV 101
#define PEM_F_PEM_ASN1_READ 102
#define PEM_F_PEM_ASN1_READ 102
...
@@ -596,6 +622,7 @@ int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
...
@@ -596,6 +622,7 @@ int PEM_write_PKCS8PrivateKey(FILE *fp,EVP_PKEY *x,const EVP_CIPHER *enc,
#define PEM_F_PEM_ASN1_WRITE 104
#define PEM_F_PEM_ASN1_WRITE 104
#define PEM_F_PEM_ASN1_WRITE_BIO 105
#define PEM_F_PEM_ASN1_WRITE_BIO 105
#define PEM_F_PEM_DO_HEADER 106
#define PEM_F_PEM_DO_HEADER 106
#define PEM_F_PEM_F_DO_PK8KEY_FP 122
#define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118
#define PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY 118
#define PEM_F_PEM_GET_EVP_CIPHER_INFO 107
#define PEM_F_PEM_GET_EVP_CIPHER_INFO 107
#define PEM_F_PEM_READ 108
#define PEM_F_PEM_READ 108
...
...
crypto/pem/pem_err.c
浏览文件 @
525f51f6
...
@@ -65,6 +65,8 @@
...
@@ -65,6 +65,8 @@
#ifndef NO_ERR
#ifndef NO_ERR
static
ERR_STRING_DATA
PEM_str_functs
[]
=
static
ERR_STRING_DATA
PEM_str_functs
[]
=
{
{
{
ERR_PACK
(
0
,
PEM_F_D2I_PKCS8PRIVATEKEY_BIO
,
0
),
"d2i_PKCS8PrivateKey_bio"
},
{
ERR_PACK
(
0
,
PEM_F_D2I_PKCS8PRIVATEKEY_FP
,
0
),
"d2i_PKCS8PrivateKey_fp"
},
{
ERR_PACK
(
0
,
PEM_F_DEF_CALLBACK
,
0
),
"DEF_CALLBACK"
},
{
ERR_PACK
(
0
,
PEM_F_DEF_CALLBACK
,
0
),
"DEF_CALLBACK"
},
{
ERR_PACK
(
0
,
PEM_F_LOAD_IV
,
0
),
"LOAD_IV"
},
{
ERR_PACK
(
0
,
PEM_F_LOAD_IV
,
0
),
"LOAD_IV"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_ASN1_READ
,
0
),
"PEM_ASN1_read"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_ASN1_READ
,
0
),
"PEM_ASN1_read"
},
...
@@ -72,6 +74,7 @@ static ERR_STRING_DATA PEM_str_functs[]=
...
@@ -72,6 +74,7 @@ static ERR_STRING_DATA PEM_str_functs[]=
{
ERR_PACK
(
0
,
PEM_F_PEM_ASN1_WRITE
,
0
),
"PEM_ASN1_write"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_ASN1_WRITE
,
0
),
"PEM_ASN1_write"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_ASN1_WRITE_BIO
,
0
),
"PEM_ASN1_write_bio"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_ASN1_WRITE_BIO
,
0
),
"PEM_ASN1_write_bio"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_DO_HEADER
,
0
),
"PEM_do_header"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_DO_HEADER
,
0
),
"PEM_do_header"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_F_DO_PK8KEY_FP
,
0
),
"PEM_F_DO_PK8KEY_FP"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY
,
0
),
"PEM_F_PEM_WRITE_PKCS8PRIVATEKEY"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_F_PEM_WRITE_PKCS8PRIVATEKEY
,
0
),
"PEM_F_PEM_WRITE_PKCS8PRIVATEKEY"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_GET_EVP_CIPHER_INFO
,
0
),
"PEM_get_EVP_CIPHER_INFO"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_GET_EVP_CIPHER_INFO
,
0
),
"PEM_get_EVP_CIPHER_INFO"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_READ
,
0
),
"PEM_read"
},
{
ERR_PACK
(
0
,
PEM_F_PEM_READ
,
0
),
"PEM_read"
},
...
...
crypto/pem/pem_lib.c
浏览文件 @
525f51f6
...
@@ -76,6 +76,14 @@ const char *PEM_version="PEM" OPENSSL_VERSION_PTEXT;
...
@@ -76,6 +76,14 @@ const char *PEM_version="PEM" OPENSSL_VERSION_PTEXT;
static
int
def_callback
(
char
*
buf
,
int
num
,
int
w
,
void
*
userdata
);
static
int
def_callback
(
char
*
buf
,
int
num
,
int
w
,
void
*
userdata
);
static
int
load_iv
(
unsigned
char
**
fromp
,
unsigned
char
*
to
,
int
num
);
static
int
load_iv
(
unsigned
char
**
fromp
,
unsigned
char
*
to
,
int
num
);
static
int
check_pem
(
const
char
*
nm
,
const
char
*
name
);
static
int
check_pem
(
const
char
*
nm
,
const
char
*
name
);
static
int
do_pk8pkey
(
BIO
*
bp
,
EVP_PKEY
*
x
,
int
isder
,
int
nid
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
static
int
do_pk8pkey_fp
(
FILE
*
bp
,
EVP_PKEY
*
x
,
int
isder
,
int
nid
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
);
static
int
def_callback
(
char
*
buf
,
int
num
,
int
w
,
void
*
userdata
)
static
int
def_callback
(
char
*
buf
,
int
num
,
int
w
,
void
*
userdata
)
{
{
...
@@ -247,7 +255,7 @@ char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
...
@@ -247,7 +255,7 @@ char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
X509_SIG
*
p8
;
X509_SIG
*
p8
;
int
klen
;
int
klen
;
char
psbuf
[
PEM_BUFSIZE
];
char
psbuf
[
PEM_BUFSIZE
];
p8
=
d2i_X509_SIG
(
(
X509_SIG
**
)
x
,
&
p
,
len
);
p8
=
d2i_X509_SIG
(
NULL
,
&
p
,
len
);
if
(
!
p8
)
goto
p8err
;
if
(
!
p8
)
goto
p8err
;
if
(
cb
)
klen
=
cb
(
psbuf
,
PEM_BUFSIZE
,
0
,
u
);
if
(
cb
)
klen
=
cb
(
psbuf
,
PEM_BUFSIZE
,
0
,
u
);
else
klen
=
def_callback
(
psbuf
,
PEM_BUFSIZE
,
0
,
u
);
else
klen
=
def_callback
(
psbuf
,
PEM_BUFSIZE
,
0
,
u
);
...
@@ -260,6 +268,10 @@ char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
...
@@ -260,6 +268,10 @@ char *PEM_ASN1_read_bio(char *(*d2i)(), const char *name, BIO *bp, char **x,
X509_SIG_free
(
p8
);
X509_SIG_free
(
p8
);
if
(
!
p8inf
)
goto
p8err
;
if
(
!
p8inf
)
goto
p8err
;
ret
=
(
char
*
)
EVP_PKCS82PKEY
(
p8inf
);
ret
=
(
char
*
)
EVP_PKCS82PKEY
(
p8inf
);
if
(
x
)
{
if
(
*
x
)
EVP_PKEY_free
((
EVP_PKEY
*
)
*
x
);
*
x
=
ret
;
}
PKCS8_PRIV_KEY_INFO_free
(
p8inf
);
PKCS8_PRIV_KEY_INFO_free
(
p8inf
);
}
}
}
else
ret
=
d2i
(
x
,
&
p
,
len
);
}
else
ret
=
d2i
(
x
,
&
p
,
len
);
...
@@ -772,15 +784,43 @@ err:
...
@@ -772,15 +784,43 @@ err:
return
(
0
);
return
(
0
);
}
}
/* Th
is function writes
a private key in PKCS#8 format: it is a "drop in"
/* Th
ese functions write
a private key in PKCS#8 format: it is a "drop in"
* replacement for PEM_write_bio_PrivateKey()
. As usual if 'enc' is NULL then
* replacement for PEM_write_bio_PrivateKey()
and friends. As usual if 'enc'
* i
t uses the unencrypted private key form. It uses PKCS#5 v2.0 password based
* i
s NULL then it uses the unencrypted private key form. The 'nid' versions
*
encryption algorithms
.
*
uses PKCS#5 v1.5 PBE algorithms whereas the others use PKCS#5 v2.0
.
*/
*/
int
PEM_write_bio_PKCS8PrivateKey_nid
(
BIO
*
bp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey
(
bp
,
x
,
0
,
nid
,
NULL
,
kstr
,
klen
,
cb
,
u
);
}
int
PEM_write_bio_PKCS8PrivateKey
(
BIO
*
bp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
int
PEM_write_bio_PKCS8PrivateKey
(
BIO
*
bp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey
(
bp
,
x
,
0
,
-
1
,
enc
,
kstr
,
klen
,
cb
,
u
);
}
int
i2d_PKCS8PrivateKey_bio
(
BIO
*
bp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey
(
bp
,
x
,
1
,
-
1
,
enc
,
kstr
,
klen
,
cb
,
u
);
}
int
i2d_PKCS8PrivateKey_nid_bio
(
BIO
*
bp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey
(
bp
,
x
,
1
,
nid
,
NULL
,
kstr
,
klen
,
cb
,
u
);
}
static
int
do_pk8pkey
(
BIO
*
bp
,
EVP_PKEY
*
x
,
int
isder
,
int
nid
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
{
X509_SIG
*
p8
;
X509_SIG
*
p8
;
PKCS8_PRIV_KEY_INFO
*
p8inf
;
PKCS8_PRIV_KEY_INFO
*
p8inf
;
...
@@ -791,7 +831,7 @@ int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
...
@@ -791,7 +831,7 @@ int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
PEM_R_ERROR_CONVERTING_PRIVATE_KEY
);
PEM_R_ERROR_CONVERTING_PRIVATE_KEY
);
return
0
;
return
0
;
}
}
if
(
enc
)
{
if
(
enc
||
(
nid
!=
-
1
)
)
{
if
(
!
kstr
)
{
if
(
!
kstr
)
{
if
(
!
cb
)
klen
=
def_callback
(
buf
,
PEM_BUFSIZE
,
1
,
u
);
if
(
!
cb
)
klen
=
def_callback
(
buf
,
PEM_BUFSIZE
,
1
,
u
);
else
klen
=
cb
(
buf
,
PEM_BUFSIZE
,
1
,
u
);
else
klen
=
cb
(
buf
,
PEM_BUFSIZE
,
1
,
u
);
...
@@ -804,30 +844,109 @@ int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
...
@@ -804,30 +844,109 @@ int PEM_write_bio_PKCS8PrivateKey(BIO *bp, EVP_PKEY *x, const EVP_CIPHER *enc,
kstr
=
buf
;
kstr
=
buf
;
}
}
p8
=
PKCS8_encrypt
(
-
1
,
enc
,
kstr
,
klen
,
NULL
,
0
,
0
,
p8inf
);
p8
=
PKCS8_encrypt
(
nid
,
enc
,
kstr
,
klen
,
NULL
,
0
,
0
,
p8inf
);
if
(
kstr
==
buf
)
memset
(
buf
,
0
,
klen
);
if
(
kstr
==
buf
)
memset
(
buf
,
0
,
klen
);
PKCS8_PRIV_KEY_INFO_free
(
p8inf
);
PKCS8_PRIV_KEY_INFO_free
(
p8inf
);
ret
=
PEM_write_bio_PKCS8
(
bp
,
p8
);
if
(
isder
)
ret
=
i2d_PKCS8_bio
(
bp
,
p8
);
else
ret
=
PEM_write_bio_PKCS8
(
bp
,
p8
);
X509_SIG_free
(
p8
);
X509_SIG_free
(
p8
);
return
ret
;
return
ret
;
}
else
{
}
else
{
ret
=
PEM_write_bio_PKCS8_PRIV_KEY_INFO
(
bp
,
p8inf
);
if
(
isder
)
ret
=
i2d_PKCS8_PRIV_KEY_INFO_bio
(
bp
,
p8inf
);
else
ret
=
PEM_write_bio_PKCS8_PRIV_KEY_INFO
(
bp
,
p8inf
);
PKCS8_PRIV_KEY_INFO_free
(
p8inf
);
PKCS8_PRIV_KEY_INFO_free
(
p8inf
);
return
ret
;
return
ret
;
}
}
}
}
/* Finally the DER version to read PKCS#8 encrypted private keys. It has to be
* here to access the default callback.
*/
EVP_PKEY
*
d2i_PKCS8PrivateKey_bio
(
BIO
*
bp
,
EVP_PKEY
**
x
,
pem_password_cb
*
cb
,
void
*
u
)
{
PKCS8_PRIV_KEY_INFO
*
p8inf
=
NULL
;
X509_SIG
*
p8
=
NULL
;
int
klen
;
EVP_PKEY
*
ret
;
char
psbuf
[
PEM_BUFSIZE
];
p8
=
d2i_PKCS8_bio
(
bp
,
NULL
);
if
(
!
p8
)
return
NULL
;
if
(
cb
)
klen
=
cb
(
psbuf
,
PEM_BUFSIZE
,
0
,
u
);
else
klen
=
def_callback
(
psbuf
,
PEM_BUFSIZE
,
0
,
u
);
if
(
klen
<=
0
)
{
PEMerr
(
PEM_F_D2I_PKCS8PRIVATEKEY_BIO
,
PEM_R_BAD_PASSWORD_READ
);
X509_SIG_free
(
p8
);
return
NULL
;
}
p8inf
=
M_PKCS8_decrypt
(
p8
,
psbuf
,
klen
);
X509_SIG_free
(
p8
);
if
(
!
p8inf
)
return
NULL
;
ret
=
EVP_PKCS82PKEY
(
p8inf
);
PKCS8_PRIV_KEY_INFO_free
(
p8inf
);
if
(
!
ret
)
return
NULL
;
if
(
x
)
{
if
(
*
x
)
EVP_PKEY_free
(
*
x
);
*
x
=
ret
;
}
return
ret
;
}
#ifndef NO_FP_API
#ifndef NO_FP_API
int
i2d_PKCS8PrivateKey_fp
(
FILE
*
fp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey_fp
(
fp
,
x
,
1
,
-
1
,
enc
,
kstr
,
klen
,
cb
,
u
);
}
int
i2d_PKCS8PrivateKey_nid_fp
(
FILE
*
fp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey_fp
(
fp
,
x
,
1
,
nid
,
NULL
,
kstr
,
klen
,
cb
,
u
);
}
int
PEM_write_PKCS8PrivateKey_nid
(
FILE
*
fp
,
EVP_PKEY
*
x
,
int
nid
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey_fp
(
fp
,
x
,
0
,
nid
,
NULL
,
kstr
,
klen
,
cb
,
u
);
}
int
PEM_write_PKCS8PrivateKey
(
FILE
*
fp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
int
PEM_write_PKCS8PrivateKey
(
FILE
*
fp
,
EVP_PKEY
*
x
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
return
do_pk8pkey_fp
(
fp
,
x
,
0
,
-
1
,
enc
,
kstr
,
klen
,
cb
,
u
);
}
static
int
do_pk8pkey_fp
(
FILE
*
fp
,
EVP_PKEY
*
x
,
int
isder
,
int
nid
,
const
EVP_CIPHER
*
enc
,
char
*
kstr
,
int
klen
,
pem_password_cb
*
cb
,
void
*
u
)
{
{
BIO
*
bp
;
BIO
*
bp
;
int
ret
;
int
ret
;
if
(
!
(
bp
=
BIO_new_fp
(
fp
,
BIO_NOCLOSE
)))
{
if
(
!
(
bp
=
BIO_new_fp
(
fp
,
BIO_NOCLOSE
)))
{
PEMerr
(
PEM_F_PEM_F_
PEM_WRITE_PKCS8PRIVATEKEY
,
ERR_R_BUF_LIB
);
PEMerr
(
PEM_F_PEM_F_
DO_PK8KEY_FP
,
ERR_R_BUF_LIB
);
return
(
0
);
return
(
0
);
}
}
ret
=
PEM_write_bio_PKCS8PrivateKey
(
bp
,
x
,
enc
,
kstr
,
klen
,
cb
,
u
);
ret
=
do_pk8pkey
(
bp
,
x
,
isder
,
nid
,
enc
,
kstr
,
klen
,
cb
,
u
);
BIO_free
(
bp
);
BIO_free
(
bp
);
return
ret
;
return
ret
;
}
}
EVP_PKEY
*
d2i_PKCS8PrivateKey_fp
(
FILE
*
fp
,
EVP_PKEY
**
x
,
pem_password_cb
*
cb
,
void
*
u
)
{
BIO
*
bp
;
EVP_PKEY
*
ret
;
if
(
!
(
bp
=
BIO_new_fp
(
fp
,
BIO_NOCLOSE
)))
{
PEMerr
(
PEM_F_D2I_PKCS8PRIVATEKEY_FP
,
ERR_R_BUF_LIB
);
return
NULL
;
}
ret
=
d2i_PKCS8PrivateKey_bio
(
bp
,
x
,
cb
,
u
);
BIO_free
(
bp
);
return
ret
;
}
#endif
#endif
doc/man/pkcs8.pod
浏览文件 @
525f51f6
...
@@ -16,6 +16,7 @@ B<openssl> B<pkcs8>
...
@@ -16,6 +16,7 @@ B<openssl> B<pkcs8>
[B<-nocrypt>]
[B<-nocrypt>]
[B<-nooct>]
[B<-nooct>]
[B<-v2 alg>]
[B<-v2 alg>]
[B<-v1 alg>]
=head1 DESCRIPTION
=head1 DESCRIPTION
...
@@ -89,6 +90,11 @@ private keys with OpenSSL then this doesn't matter.
...
@@ -89,6 +90,11 @@ private keys with OpenSSL then this doesn't matter.
The B<alg> argument is the encryption algorithm to use, valid values include
The B<alg> argument is the encryption algorithm to use, valid values include
B<des>, B<des3> and B<rc2>. It is recommended that B<des3> is used.
B<des>, B<des3> and B<rc2>. It is recommended that B<des3> is used.
=item B<-v1 alg>
This option specifies a PKCS#5 v1.5 or PKCS#12 algorithm to use. A complete
list of possible algorithms is included below.
=back
=back
=head1 NOTES
=head1 NOTES
...
@@ -120,6 +126,33 @@ It is possible to write out DER encoded encrypted private keys in
...
@@ -120,6 +126,33 @@ It is possible to write out DER encoded encrypted private keys in
PKCS#8 format because the encryption details are included at an ASN1
PKCS#8 format because the encryption details are included at an ASN1
level whereas the traditional format includes them at a PEM level.
level whereas the traditional format includes them at a PEM level.
=head1 PKCS#5 v1.5 and PKCS#12 algorithms.
Various algorithms can be used with the B<-v1> command line option,
including PKCS#5 v1.5 and PKCS#12. These are described in more detail
below.
=over 4
=item B<PBE-MD2-DES PBE-MD5-DES>
These algorithms were included in the original PKCS#5 v1.5 specification.
They only offer 56 bits of protection since they both use DES.
=item B<PBE-SHA1-RC2-64 PBE-MD2-RC2-64 PBE-MD5-RC2-64 PBE-SHA1-DES>
These algorithms are not mentioned in the original PKCS#5 v1.5 specification
but they use the same key derivation algorithm and are supported by some
software. They are mentioned in PKCS#5 v1.5. They use either 64 bit RC2 or
56 bit DES.
=item B<PBE-SHA1-RC4-128 PBE-SHA1-RC4-40 PBE-SHA1-3DES PBE-SHA1-2DES PBE-SHA1-RC2-128 PBE-SHA1-RC2-40>
These algorithms use the PKCS#12 password based encryption algorithm and
allow strong encryption algorithms like triple DES or 128 bit RC2 to be used.
=back
=head1 EXAMPLES
=head1 EXAMPLES
Convert a private from traditional to PKCS#5 v2.0 format using triple
Convert a private from traditional to PKCS#5 v2.0 format using triple
...
@@ -132,6 +165,11 @@ Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm
...
@@ -132,6 +165,11 @@ Convert a private key to PKCS#8 using a PKCS#5 1.5 compatible algorithm
openssl pkcs8 -in key.pem -topk8 -out enckey.pem
openssl pkcs8 -in key.pem -topk8 -out enckey.pem
Convert a private key to PKCS#8 using a PKCS#12 compatible algorithm
(3DES):
openssl pkcs8 -in key.pem -topk8 -out enckey.pem -v1 PBE-SHA1-3DES
Read a DER unencrypted PKCS#8 format private key:
Read a DER unencrypted PKCS#8 format private key:
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
openssl pkcs8 -inform DER -nocrypt -in key.der -out key.pem
...
@@ -150,9 +188,6 @@ reasonably accurate at least as far as these algorithms are concerned.
...
@@ -150,9 +188,6 @@ reasonably accurate at least as far as these algorithms are concerned.
=head1 BUGS
=head1 BUGS
It isn't possible to produce keys encrypted using PKCS#5 v1.5 algorithms
other than B<pbeWithMD5AndDES-CBC> using this utility.
There should be an option that prints out the encryption algorithm
There should be an option that prints out the encryption algorithm
in use and other details such as the iteration count.
in use and other details such as the iteration count.
...
...
util/libeay.num
浏览文件 @
525f51f6
...
@@ -2137,3 +2137,15 @@ CRYPTO_set_mem_debug_functions 2161
...
@@ -2137,3 +2137,15 @@ CRYPTO_set_mem_debug_functions 2161
CRYPTO_pop_info 2162
CRYPTO_pop_info 2162
CRYPTO_push_info_ 2163
CRYPTO_push_info_ 2163
CRYPTO_set_mem_debug_options 2164
CRYPTO_set_mem_debug_options 2164
PEM_write_PKCS8PrivateKey_nid 2165
PEM_write_bio_PKCS8PrivateKey_nid 2166
d2i_PKCS8PrivateKey_bio 2167
ASN1_NULL_free 2168
d2i_ASN1_NULL 2169
ASN1_NULL_new 2170
i2d_PKCS8PrivateKey_bio 2171
i2d_PKCS8PrivateKey_fp 2172
i2d_ASN1_NULL 2173
i2d_PKCS8PrivateKey_nid_fp 2174
d2i_PKCS8PrivateKey_fp 2175
i2d_PKCS8PrivateKey_nid_bio 2176
util/mkerr.pl
浏览文件 @
525f51f6
...
@@ -450,7 +450,7 @@ void ERR_load_${lib}_strings(void)
...
@@ -450,7 +450,7 @@ void ERR_load_${lib}_strings(void)
#ifdef ${lib}_LIB_NAME
#ifdef ${lib}_LIB_NAME
${lib}_lib_name->error = ERR_PACK(${lib}_lib_error_code,0,0);
${lib}_lib_name->error = ERR_PACK(${lib}_lib_error_code,0,0);
ERR_load_strings(0,${lib}_lib_name);
ERR_load_strings(0,${lib}_lib_name);
#endif
;
#endif
}
}
}
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录