Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
Third Party Openssl
提交
81025661
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看板
提交
81025661
编写于
8月 31, 2007
作者:
D
Dr. Stephen Henson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update ssl code to support digests other than MD5+SHA1 in handshake.
Submitted by: Victor B. Wagner <vitus@cryptocom.ru>
上级
4ece7eb6
变更
23
展开全部
隐藏空白更改
内联
并排
Showing
23 changed file
with
553 addition
and
346 deletion
+553
-346
CHANGES
CHANGES
+5
-0
crypto/objects/obj_dat.h
crypto/objects/obj_dat.h
+113
-111
crypto/objects/obj_mac.h
crypto/objects/obj_mac.h
+4
-4
crypto/objects/obj_mac.num
crypto/objects/obj_mac.num
+2
-0
crypto/objects/objects.txt
crypto/objects/objects.txt
+2
-1
ssl/d1_both.c
ssl/d1_both.c
+0
-2
ssl/d1_clnt.c
ssl/d1_clnt.c
+4
-2
ssl/d1_srvr.c
ssl/d1_srvr.c
+2
-2
ssl/s3_both.c
ssl/s3_both.c
+9
-4
ssl/s3_clnt.c
ssl/s3_clnt.c
+5
-2
ssl/s3_enc.c
ssl/s3_enc.c
+87
-19
ssl/s3_lib.c
ssl/s3_lib.c
+124
-123
ssl/s3_pkt.c
ssl/s3_pkt.c
+0
-2
ssl/s3_srvr.c
ssl/s3_srvr.c
+9
-2
ssl/ssl.h
ssl/ssl.h
+6
-1
ssl/ssl3.h
ssl/ssl3.h
+5
-3
ssl/ssl_ciph.c
ssl/ssl_ciph.c
+54
-13
ssl/ssl_err.c
ssl/ssl_err.c
+6
-0
ssl/ssl_lib.c
ssl/ssl_lib.c
+2
-2
ssl/ssl_locl.h
ssl/ssl_locl.h
+32
-9
ssl/t1_enc.c
ssl/t1_enc.c
+68
-31
ssl/tls1.h
ssl/tls1.h
+1
-0
util/ssleay.num
util/ssleay.num
+13
-13
未找到文件。
CHANGES
浏览文件 @
81025661
...
...
@@ -4,6 +4,11 @@
Changes between 0.9.8f and 0.9.9 [xx XXX xxxx]
*) Update ssl code to support digests other than SHA1+MD5 for handshake
MAC.
[Victor B. Wagner <vitus@cryptocom.ru>]
*) Add RFC4507 support to OpenSSL. This includes the corrections in
RFC4507bis. The encrypted ticket format is an encrypted encoded
SSL_SESSION structure, that way new session features are automatically
...
...
crypto/objects/obj_dat.h
浏览文件 @
81025661
此差异已折叠。
点击以展开。
crypto/objects/obj_mac.h
浏览文件 @
81025661
...
...
@@ -3422,10 +3422,10 @@
#define SN_gost89_cnt "gost89-cnt"
#define NID_gost89_cnt 835
#define SN_id_Gost28147_89_MAC
"id-Gost28147-89-MAC
"
#define LN_id_Gost28147_89_MAC "GOST 28147-89 MAC"
#define NID_id_Gost28147_89_MAC
787
#define OBJ_id_Gost28147_89_MAC OBJ_cryptopro,22L
#define SN_id_Gost28147_89_MAC
"gost-mac
"
#define LN_id_Gost28147_89_MAC
"GOST 28147-89 MAC"
#define NID_id_Gost28147_89_MAC
843
#define OBJ_id_Gost28147_89_MAC
OBJ_cryptopro,22L
#define SN_id_GostR3411_94_prf "prf-gostr3411-94"
#define LN_id_GostR3411_94_prf "GOST R 34.11-94 PRF"
...
...
crypto/objects/obj_mac.num
浏览文件 @
81025661
...
...
@@ -839,3 +839,5 @@ seed_ecb 838
seed_cbc 839
seed_cfb128 840
seed_ofb128 841
id_Gost28147_89_MAC 842
id_Gost28147_89_MAC 843
crypto/objects/objects.txt
浏览文件 @
81025661
...
...
@@ -1092,7 +1092,8 @@ cryptopro 20 : gost94 : GOST R 34.10-94
!Cname id-Gost28147-89
cryptopro 21 : gost89 : GOST 28147-89
: gost89-cnt
cryptopro 22 : id-Gost28147-89-MAC : GOST 28147-89 MAC
!Cname id-Gost28147-89-MAC
cryptopro 22 : gost-mac : GOST 28147-89 MAC
!Cname id-GostR3411-94-prf
cryptopro 23 : prf-gostr3411-94 : GOST R 34.11-94 PRF
cryptopro 98 : id-GostR3410-2001DH : GOST R 34.10-2001 DH
...
...
ssl/d1_both.c
浏览文件 @
81025661
...
...
@@ -768,8 +768,6 @@ int dtls1_send_finished(SSL *s, int a, int b, const char *sender, int slen)
p
=
&
(
d
[
DTLS1_HM_HEADER_LENGTH
]);
i
=
s
->
method
->
ssl3_enc
->
final_finish_mac
(
s
,
&
(
s
->
s3
->
finish_dgst1
),
&
(
s
->
s3
->
finish_dgst2
),
sender
,
slen
,
s
->
s3
->
tmp
.
finish_md
);
s
->
s3
->
tmp
.
finish_md_len
=
i
;
memcpy
(
p
,
s
->
s3
->
tmp
.
finish_md
,
i
);
...
...
ssl/d1_clnt.c
浏览文件 @
81025661
...
...
@@ -998,14 +998,16 @@ int dtls1_send_client_verify(SSL *s)
p
=
&
(
d
[
DTLS1_HM_HEADER_LENGTH
]);
pkey
=
s
->
cert
->
key
->
privatekey
;
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst2
),
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
NID_sha1
,
&
(
data
[
MD5_DIGEST_LENGTH
]));
#ifndef OPENSSL_NO_RSA
if
(
pkey
->
type
==
EVP_PKEY_RSA
)
{
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst1
),
&
(
data
[
0
]));
NID_md5
,
&
(
data
[
0
]));
if
(
RSA_sign
(
NID_md5_sha1
,
data
,
MD5_DIGEST_LENGTH
+
SHA_DIGEST_LENGTH
,
&
(
p
[
2
]),
&
u
,
pkey
->
pkey
.
rsa
)
<=
0
)
...
...
ssl/d1_srvr.c
浏览文件 @
81025661
...
...
@@ -446,10 +446,10 @@ int dtls1_accept(SSL *s)
/* We need to get hashes here so if there is
* a client cert, it can be verified */
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst1
)
,
NID_md5
,
&
(
s
->
s3
->
tmp
.
cert_verify_md
[
0
]));
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst2
)
,
NID_sha1
,
&
(
s
->
s3
->
tmp
.
cert_verify_md
[
MD5_DIGEST_LENGTH
]));
break
;
...
...
ssl/s3_both.c
浏览文件 @
81025661
...
...
@@ -160,8 +160,6 @@ int ssl3_send_finished(SSL *s, int a, int b, const char *sender, int slen)
p
=
&
(
d
[
4
]);
i
=
s
->
method
->
ssl3_enc
->
final_finish_mac
(
s
,
&
(
s
->
s3
->
finish_dgst1
),
&
(
s
->
s3
->
finish_dgst2
),
sender
,
slen
,
s
->
s3
->
tmp
.
finish_md
);
s
->
s3
->
tmp
.
finish_md_len
=
i
;
memcpy
(
p
,
s
->
s3
->
tmp
.
finish_md
,
i
);
...
...
@@ -518,9 +516,16 @@ int ssl_cert_type(X509 *x, EVP_PKEY *pkey)
else
if
(
i
==
EVP_PKEY_EC
)
{
ret
=
SSL_PKEY_ECC
;
}
}
#endif
else
if
(
i
==
NID_id_GostR3410_94
||
i
==
NID_id_GostR3410_94_cc
)
{
ret
=
SSL_PKEY_GOST94
;
}
else
if
(
i
==
NID_id_GostR3410_2001
||
i
==
NID_id_GostR3410_2001_cc
)
{
ret
=
SSL_PKEY_GOST01
;
}
err:
if
(
!
pkey
)
EVP_PKEY_free
(
pk
);
return
(
ret
);
...
...
ssl/s3_clnt.c
浏览文件 @
81025661
...
...
@@ -824,6 +824,7 @@ int ssl3_get_server_hello(SSL *s)
}
}
s
->
s3
->
tmp
.
new_cipher
=
c
;
ssl3_digest_cached_records
(
s
);
/* lets get the compression algorithm */
/* COMPRESSION */
...
...
@@ -2415,14 +2416,16 @@ int ssl3_send_client_verify(SSL *s)
p
=
&
(
d
[
4
]);
pkey
=
s
->
cert
->
key
->
privatekey
;
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst2
),
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
NID_sha1
,
&
(
data
[
MD5_DIGEST_LENGTH
]));
#ifndef OPENSSL_NO_RSA
if
(
pkey
->
type
==
EVP_PKEY_RSA
)
{
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst1
),
&
(
data
[
0
]));
NID_md5
,
&
(
data
[
0
]));
if
(
RSA_sign
(
NID_md5_sha1
,
data
,
MD5_DIGEST_LENGTH
+
SHA_DIGEST_LENGTH
,
&
(
p
[
2
]),
&
u
,
pkey
->
pkey
.
rsa
)
<=
0
)
...
...
ssl/s3_enc.c
浏览文件 @
81025661
...
...
@@ -155,10 +155,8 @@ static unsigned char ssl3_pad_2[48]={
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
,
0x5c
};
static
int
ssl3_handshake_mac
(
SSL
*
s
,
EVP_MD_CTX
*
in_ctx
,
static
int
ssl3_handshake_mac
(
SSL
*
s
,
int
md_nid
,
const
char
*
sender
,
int
len
,
unsigned
char
*
p
);
static
int
ssl3_generate_key_block
(
SSL
*
s
,
unsigned
char
*
km
,
int
num
)
{
EVP_MD_CTX
m5
;
...
...
@@ -545,46 +543,116 @@ int ssl3_enc(SSL *s, int send)
void
ssl3_init_finished_mac
(
SSL
*
s
)
{
EVP_DigestInit_ex
(
&
(
s
->
s3
->
finish_dgst1
),
s
->
ctx
->
md5
,
NULL
);
EVP_DigestInit_ex
(
&
(
s
->
s3
->
finish_dgst2
),
s
->
ctx
->
sha1
,
NULL
);
if
(
s
->
s3
->
handshake_buffer
)
BIO_free
(
s
->
s3
->
handshake_buffer
);
if
(
s
->
s3
->
handshake_dgst
)
ssl3_free_digest_list
(
s
);
s
->
s3
->
handshake_buffer
=
BIO_new
(
BIO_s_mem
());
BIO_set_close
(
s
->
s3
->
handshake_buffer
,
BIO_CLOSE
);
}
void
ssl3_free_digest_list
(
SSL
*
s
)
{
int
i
;
if
(
!
s
->
s3
->
handshake_dgst
)
return
;
for
(
i
=
0
;
i
<
SSL_MAX_DIGEST
;
i
++
)
{
if
(
s
->
s3
->
handshake_dgst
[
i
])
EVP_MD_CTX_destroy
(
s
->
s3
->
handshake_dgst
[
i
]);
}
OPENSSL_free
(
s
->
s3
->
handshake_dgst
);
s
->
s3
->
handshake_dgst
=
NULL
;
}
void
ssl3_finish_mac
(
SSL
*
s
,
const
unsigned
char
*
buf
,
int
len
)
{
EVP_DigestUpdate
(
&
(
s
->
s3
->
finish_dgst1
),
buf
,
len
);
EVP_DigestUpdate
(
&
(
s
->
s3
->
finish_dgst2
),
buf
,
len
);
if
(
s
->
s3
->
handshake_buffer
)
{
BIO_write
(
s
->
s3
->
handshake_buffer
,(
void
*
)
buf
,
len
);
}
else
{
int
i
;
for
(
i
=
0
;
i
<
SSL_MAX_DIGEST
;
i
++
)
{
if
(
s
->
s3
->
handshake_dgst
[
i
]
!=
NULL
)
EVP_DigestUpdate
(
s
->
s3
->
handshake_dgst
[
i
],
buf
,
len
);
}
}
}
void
ssl3_digest_cached_records
(
SSL
*
s
)
{
int
i
;
long
mask
;
const
EVP_MD
*
md
;
long
hdatalen
;
void
*
hdata
;
/* Allocate handshake_dgst array */
ssl3_free_digest_list
(
s
);
s
->
s3
->
handshake_dgst
=
OPENSSL_malloc
(
SSL_MAX_DIGEST
*
sizeof
(
EVP_MD_CTX
*
));
memset
(
s
->
s3
->
handshake_dgst
,
0
,
SSL_MAX_DIGEST
*
sizeof
(
EVP_MD_CTX
*
));
hdatalen
=
BIO_get_mem_data
(
s
->
s3
->
handshake_buffer
,
&
hdata
);
/* Loop through bitso of algorithm2 field and create MD_CTX-es */
for
(
i
=
0
;
ssl_get_handshake_digest
(
i
,
&
mask
,
&
md
);
i
++
)
{
if
((
mask
&
s
->
s3
->
tmp
.
new_cipher
->
algorithm2
)
&&
md
)
{
s
->
s3
->
handshake_dgst
[
i
]
=
EVP_MD_CTX_create
();
EVP_DigestInit_ex
(
s
->
s3
->
handshake_dgst
[
i
],
md
,
NULL
);
EVP_DigestUpdate
(
s
->
s3
->
handshake_dgst
[
i
],
hdata
,
hdatalen
);
}
else
{
s
->
s3
->
handshake_dgst
[
i
]
=
NULL
;
}
}
/* Free handshake_buffer BIO */
BIO_free
(
s
->
s3
->
handshake_buffer
);
s
->
s3
->
handshake_buffer
=
NULL
;
int
ssl3_cert_verify_mac
(
SSL
*
s
,
EVP_MD_CTX
*
ctx
,
unsigned
char
*
p
)
}
int
ssl3_cert_verify_mac
(
SSL
*
s
,
int
md_nid
,
unsigned
char
*
p
)
{
return
(
ssl3_handshake_mac
(
s
,
ctx
,
NULL
,
0
,
p
));
return
(
ssl3_handshake_mac
(
s
,
md_nid
,
NULL
,
0
,
p
));
}
int
ssl3_final_finish_mac
(
SSL
*
s
,
EVP_MD_CTX
*
ctx1
,
EVP_MD_CTX
*
ctx2
,
int
ssl3_final_finish_mac
(
SSL
*
s
,
const
char
*
sender
,
int
len
,
unsigned
char
*
p
)
{
int
ret
;
ret
=
ssl3_handshake_mac
(
s
,
ctx1
,
sender
,
len
,
p
);
ret
=
ssl3_handshake_mac
(
s
,
NID_md5
,
sender
,
len
,
p
);
p
+=
ret
;
ret
+=
ssl3_handshake_mac
(
s
,
ctx2
,
sender
,
len
,
p
);
ret
+=
ssl3_handshake_mac
(
s
,
NID_sha1
,
sender
,
len
,
p
);
return
(
ret
);
}
static
int
ssl3_handshake_mac
(
SSL
*
s
,
EVP_MD_CTX
*
in_ctx
,
static
int
ssl3_handshake_mac
(
SSL
*
s
,
int
md_nid
,
const
char
*
sender
,
int
len
,
unsigned
char
*
p
)
{
unsigned
int
ret
;
int
npad
,
n
;
unsigned
int
i
;
unsigned
char
md_buf
[
EVP_MAX_MD_SIZE
];
EVP_MD_CTX
ctx
;
EVP_MD_CTX
ctx
,
*
d
=
NULL
;
if
(
s
->
s3
->
handshake_buffer
)
ssl3_digest_cached_records
(
s
);
/* Search for djgest of specified type in the handshake_dgst
* array*/
for
(
i
=
0
;
i
<
SSL_MAX_DIGEST
;
i
++
)
{
if
(
s
->
s3
->
handshake_dgst
[
i
]
&&
EVP_MD_CTX_type
(
s
->
s3
->
handshake_dgst
[
i
])
==
md_nid
)
{
d
=
s
->
s3
->
handshake_dgst
[
i
];
break
;
}
}
if
(
!
d
)
{
SSLerr
(
SSL_F_SSL3_HANDSHAKE_MAC
,
SSL_R_NO_REQUIRED_DIGEST
);
return
0
;
}
EVP_MD_CTX_init
(
&
ctx
);
EVP_MD_CTX_copy_ex
(
&
ctx
,
in_ctx
);
EVP_MD_CTX_copy_ex
(
&
ctx
,
d
);
n
=
EVP_MD_CTX_size
(
&
ctx
);
npad
=
(
48
/
n
)
*
n
;
if
(
sender
!=
NULL
)
EVP_DigestUpdate
(
&
ctx
,
sender
,
len
);
EVP_DigestUpdate
(
&
ctx
,
s
->
session
->
master_key
,
...
...
ssl/s3_lib.c
浏览文件 @
81025661
此差异已折叠。
点击以展开。
ssl/s3_pkt.c
浏览文件 @
81025661
...
...
@@ -1307,8 +1307,6 @@ int ssl3_do_change_cipher_spec(SSL *s)
}
s
->
s3
->
tmp
.
peer_finish_md_len
=
s
->
method
->
ssl3_enc
->
final_finish_mac
(
s
,
&
(
s
->
s3
->
finish_dgst1
),
&
(
s
->
s3
->
finish_dgst2
),
sender
,
slen
,
s
->
s3
->
tmp
.
peer_finish_md
);
return
(
1
);
...
...
ssl/s3_srvr.c
浏览文件 @
81025661
...
...
@@ -502,12 +502,15 @@ int ssl3_accept(SSL *s)
/* We need to get hashes here so if there is
* a client cert, it can be verified
* FIXME - digest processing for CertificateVerify
* should be generalized. But it is next step
*/
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst1
)
,
NID_md5
,
&
(
s
->
s3
->
tmp
.
cert_verify_md
[
0
]));
s
->
method
->
ssl3_enc
->
cert_verify_mac
(
s
,
&
(
s
->
s3
->
finish_dgst2
)
,
NID_sha1
,
&
(
s
->
s3
->
tmp
.
cert_verify_md
[
MD5_DIGEST_LENGTH
]));
}
break
;
...
...
@@ -1026,6 +1029,7 @@ int ssl3_get_client_hello(SSL *s)
goto
f_err
;
}
s
->
s3
->
tmp
.
new_cipher
=
c
;
ssl3_digest_cached_records
(
s
);
}
else
{
...
...
@@ -1056,6 +1060,9 @@ int ssl3_get_client_hello(SSL *s)
else
#endif
s
->
s3
->
tmp
.
new_cipher
=
s
->
session
->
cipher
;
/* Clear cached handshake records */
BIO_free
(
s
->
s3
->
handshake_buffer
);
s
->
s3
->
handshake_buffer
=
NULL
;
}
/* we now have the following setup.
...
...
ssl/ssl.h
浏览文件 @
81025661
...
...
@@ -1868,7 +1868,10 @@ void ERR_load_SSL_strings(void);
#define SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT 276
#define SSL_F_TLS1_SETUP_KEY_BLOCK 211
#define SSL_F_WRITE_PENDING 212
#define SSL_F_TLS1_FINAL_FINISH_MAC 283
#define SSL_F_TLS1_PRF 284
#define SSL_F_SSL3_HANDSHAKE_MAC 285
#define SSL_F_TLS1_CERT_VERIFY_MAC 286
/* Reason codes. */
#define SSL_R_APP_DATA_IN_HANDSHAKE 100
#define SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT 272
...
...
@@ -2123,6 +2126,8 @@ void ERR_load_SSL_strings(void);
#define SSL_R_WRONG_VERSION_NUMBER 267
#define SSL_R_X509_LIB 268
#define SSL_R_X509_VERIFICATION_SETUP_PROBLEMS 269
#define SSL_R_UNSUPPORTED_DIGEST_TYPE 270
#define SSL_R_NO_REQUIRED_DIGEST 324
#ifdef __cplusplus
}
...
...
ssl/ssl3.h
浏览文件 @
81025661
...
...
@@ -419,9 +419,11 @@ typedef struct ssl3_state_st
const
unsigned
char
*
wpend_buf
;
/* used during startup, digest all incoming/outgoing packets */
EVP_MD_CTX
finish_dgst1
;
EVP_MD_CTX
finish_dgst2
;
BIO
*
handshake_buffer
;
/* When set of handshake digests is determined, buffer is hashed
* and freed and MD_CTX-es for all required digests are stored in
* this array */
EVP_MD_CTX
**
handshake_dgst
;
/* this is set whenerver we see a change_cipher_spec message
* come in when we are not looking for one */
int
change_cipher_spec
;
...
...
ssl/ssl_ciph.c
浏览文件 @
81025661
...
...
@@ -175,7 +175,10 @@ static STACK_OF(SSL_COMP) *ssl_comp_methods=NULL;
#define SSL_MD_SHA1_IDX 1
#define SSL_MD_GOST94_IDX 2
#define SSL_MD_GOST89MAC_IDX 3
#define SSL_MD_NUM_IDX 4
/*Constant SSL_MAX_DIGEST equal to size of digests array should be
* defined in the
* ssl_locl.h */
#define SSL_MD_NUM_IDX SSL_MAX_DIGEST
static
const
EVP_MD
*
ssl_digest_methods
[
SSL_MD_NUM_IDX
]
=
{
NULL
,
NULL
,
NULL
,
NULL
};
...
...
@@ -191,6 +194,11 @@ static int ssl_mac_secret_size[SSL_MD_NUM_IDX]={
0
,
0
,
0
,
0
};
static
int
ssl_handshake_digest_flag
[
SSL_MD_NUM_IDX
]
=
{
SSL_HANDSHAKE_MAC_MD5
,
SSL_HANDSHAKE_MAC_SHA
,
SSL_HANDSHAKE_MAC_GOST94
,
0
};
#define CIPHER_ADD 1
#define CIPHER_KILL 2
#define CIPHER_DEL 3
...
...
@@ -299,6 +307,22 @@ static const SSL_CIPHER cipher_aliases[]={
{
0
,
SSL_TXT_MEDIUM
,
0
,
0
,
0
,
0
,
0
,
0
,
SSL_MEDIUM
,
0
,
0
,
0
},
{
0
,
SSL_TXT_HIGH
,
0
,
0
,
0
,
0
,
0
,
0
,
SSL_HIGH
,
0
,
0
,
0
},
};
/* Search for public key algorithm with given name and
* return its pkey_id if it is available. Otherwise return 0
*/
static
int
get_optional_pkey_id
(
const
char
*
pkey_name
)
{
const
EVP_PKEY_ASN1_METHOD
*
ameth
;
ENGINE
*
tmpeng
=
NULL
;
int
pkey_id
=
0
;
ameth
=
EVP_PKEY_asn1_find_str
(
&
tmpeng
,
pkey_name
,
-
1
);
if
(
ameth
)
{
EVP_PKEY_asn1_get0_info
(
&
pkey_id
,
NULL
,
NULL
,
NULL
,
NULL
,
ameth
);
}
if
(
tmpeng
)
ENGINE_finish
(
tmpeng
);
return
pkey_id
;
}
void
ssl_load_ciphers
(
void
)
{
...
...
@@ -346,19 +370,10 @@ void ssl_load_ciphers(void)
}
ssl_digest_methods
[
SSL_MD_GOST89MAC_IDX
]
=
EVP_get_digestbyname
(
SN_id_Gost28147_89_MAC
);
{
const
EVP_PKEY_ASN1_METHOD
*
ameth
;
ENGINE
*
tmpeng
=
NULL
;
int
pkey_id
;
ameth
=
EVP_PKEY_asn1_find_str
(
&
tmpeng
,
"gost-mac"
,
-
1
);
if
(
ameth
)
{
EVP_PKEY_asn1_get0_info
(
&
pkey_id
,
NULL
,
NULL
,
NULL
,
NULL
,
ameth
);
ssl_mac_pkey_id
[
SSL_MD_GOST89MAC_IDX
]
=
pkey_id
;
ssl_mac_pkey_id
[
SSL_MD_GOST89MAC_IDX
]
=
get_optional_pkey_id
(
"gost-mac"
);
if
(
ssl_mac_pkey_id
[
SSL_MD_GOST89MAC_IDX
])
{
ssl_mac_secret_size
[
SSL_MD_GOST89MAC_IDX
]
=
32
;
}
if
(
tmpeng
)
ENGINE_finish
(
tmpeng
);
}
}
}
#ifndef OPENSSL_NO_COMP
...
...
@@ -534,6 +549,18 @@ int ssl_cipher_get_evp(const SSL_SESSION *s, const EVP_CIPHER **enc,
return
(
0
);
}
int
ssl_get_handshake_digest
(
int
idx
,
long
*
mask
,
const
EVP_MD
**
md
)
{
if
(
idx
<
0
||
idx
>=
SSL_MD_NUM_IDX
)
{
return
0
;
}
if
(
ssl_handshake_digest_flag
[
idx
]
==
0
)
return
0
;
*
mask
=
ssl_handshake_digest_flag
[
idx
];
*
md
=
ssl_digest_methods
[
idx
];
return
1
;
}
#define ITEM_SEP(a) \
(((a) == ':') || ((a) == ' ') || ((a) == ';') || ((a) == ','))
...
...
@@ -605,9 +632,23 @@ static void ssl_cipher_get_disabled(unsigned long *mkey, unsigned long *auth, un
*
mkey
|=
SSL_kPSK
;
*
auth
|=
SSL_aPSK
;
#endif
/* Check for presence of GOST 34.10 algorithms, and if they
* do not present, disable appropriate auth and key exchange */
if
(
!
get_optional_pkey_id
(
"gost94"
))
{
*
auth
|=
SSL_aGOST94
;
}
if
(
!
get_optional_pkey_id
(
"gost2001"
))
{
*
auth
|=
SSL_aGOST01
;
}
/* Disable GOST key exchange if no GOST signature algs are available * */
if
((
*
auth
&
(
SSL_aGOST94
|
SSL_aGOST01
))
==
(
SSL_aGOST94
|
SSL_aGOST01
))
{
*
mkey
|=
SSL_kGOST
;
}
#ifdef SSL_FORBID_ENULL
*
enc
|=
SSL_eNULL
;
#endif
*
enc
|=
(
ssl_cipher_methods
[
SSL_ENC_DES_IDX
]
==
NULL
)
?
SSL_DES
:
0
;
*
enc
|=
(
ssl_cipher_methods
[
SSL_ENC_3DES_IDX
]
==
NULL
)
?
SSL_3DES
:
0
;
...
...
ssl/ssl_err.c
浏览文件 @
81025661
...
...
@@ -255,6 +255,10 @@ static ERR_STRING_DATA SSL_str_functs[]=
{
ERR_FUNC
(
SSL_F_TLS1_PREPARE_SERVERHELLO_TLSEXT
),
"TLS1_PREPARE_SERVERHELLO_TLSEXT"
},
{
ERR_FUNC
(
SSL_F_TLS1_SETUP_KEY_BLOCK
),
"TLS1_SETUP_KEY_BLOCK"
},
{
ERR_FUNC
(
SSL_F_WRITE_PENDING
),
"WRITE_PENDING"
},
{
ERR_FUNC
(
SSL_F_TLS1_FINAL_FINISH_MAC
),
"tls1_final_finish_mac"
},
{
ERR_FUNC
(
SSL_F_TLS1_PRF
),
"tls1_prf"
},
{
ERR_FUNC
(
SSL_F_SSL3_HANDSHAKE_MAC
),
"ssl3_handshake_mac"
},
{
ERR_FUNC
(
SSL_F_TLS1_CERT_VERIFY_MAC
),
"tls1_cert_verify_mac"
},
{
0
,
NULL
}
};
...
...
@@ -513,6 +517,8 @@ static ERR_STRING_DATA SSL_str_reasons[]=
{
ERR_REASON
(
SSL_R_WRONG_VERSION_NUMBER
)
,
"wrong version number"
},
{
ERR_REASON
(
SSL_R_X509_LIB
)
,
"x509 lib"
},
{
ERR_REASON
(
SSL_R_X509_VERIFICATION_SETUP_PROBLEMS
),
"x509 verification setup problems"
},
{
ERR_REASON
(
SSL_R_UNSUPPORTED_DIGEST_TYPE
),
"unsupported digest type"
},
{
ERR_REASON
(
SSL_R_NO_REQUIRED_DIGEST
),
"digest requred for handshake isn't computed"
},
{
0
,
NULL
}
};
...
...
ssl/ssl_lib.c
浏览文件 @
81025661
...
...
@@ -165,9 +165,9 @@ SSL3_ENC_METHOD ssl3_undef_enc_method={
ssl_undefined_function
,
(
int
(
*
)(
SSL
*
,
unsigned
char
*
,
unsigned
char
*
,
int
))
ssl_undefined_function
,
(
int
(
*
)(
SSL
*
,
int
))
ssl_undefined_function
,
(
int
(
*
)(
SSL
*
,
EVP_MD_CTX
*
,
EVP_MD_CTX
*
,
const
char
*
,
int
,
unsigned
char
*
))
ssl_undefined_function
,
(
int
(
*
)(
SSL
*
,
const
char
*
,
int
,
unsigned
char
*
))
ssl_undefined_function
,
0
,
/* finish_mac_length */
(
int
(
*
)(
SSL
*
,
EVP_MD_CTX
*
,
unsigned
char
*
))
ssl_undefined_function
,
(
int
(
*
)(
SSL
*
,
const
EVP_MD
*
,
unsigned
char
*
))
ssl_undefined_function
,
NULL
,
/* client_finished_label */
0
,
/* client_finished_label_len */
NULL
,
/* server_finished_label */
...
...
ssl/ssl_locl.h
浏览文件 @
81025661
...
...
@@ -286,7 +286,7 @@
#define SSL_kECDHe 0x00000040L
/* ECDH cert, ECDSA CA cert */
#define SSL_kEECDH 0x00000080L
/* ephemeral ECDH */
#define SSL_kPSK 0x00000100L
/* PSK */
#define SSL_kGOST 0x00000200L
/* GOST key exchange */
/* Bits for algorithm_auth (server authentication) */
#define SSL_aRSA 0x00000001L
/* RSA auth */
...
...
@@ -297,6 +297,8 @@
#define SSL_aKRB5 0x00000020L
/* KRB5 auth */
#define SSL_aECDSA 0x00000040L
/* ECDSA auth*/
#define SSL_aPSK 0x00000080L
/* PSK auth */
#define SSL_aGOST94 0x00000100L
/* GOST R 34.10-94 signature auth */
#define SSL_aGOST01 0x00000200L
/* GOST R 34.10-2001 signature auth */
/* Bits for algorithm_enc (symmetric encryption) */
...
...
@@ -328,7 +330,24 @@
#define SSL_SSLV3 0x00000002L
#define SSL_TLSV1 SSL_SSLV3
/* for now */
/* Bits for algorithm2 (handshake digests) */
#define SSL_HANDSHAKE_MAC_MD5 0x10
#define SSL_HANDSHAKE_MAC_SHA 0x20
#define SSL_HANDSHAKE_MAC_GOST94 0x40
#define SSL_HANDSHAKE_MAC_DEFAULT (SSL_HANDSHAKE_MAC_MD5 | SSL_HANDSHAKE_MAC_SHA)
/* When adding new digest in the ssl_ciph.c and increment SSM_MD_NUM_IDX
* make sure to update this constant too */
#define SSL_MAX_DIGEST 4
#define TLS1_PRF_DGST_SHIFT 8
#define TLS1_PRF_MD5 (SSL_HANDSHAKE_MAC_MD5 << TLS1_PRF_DGST_SHIFT)
#define TLS1_PRF_SHA1 (SSL_HANDSHAKE_MAC_SHA << TLS1_PRF_DGST_SHIFT)
#define TLS1_PRF_GOST94 (SSL_HANDSHAKE_MAC_GOST94 << TLS1_PRF_DGST_SHIFT)
#define TLS1_PRF (TLS1_PRF_MD5 | TLS1_PRF_SHA1)
/*
* Export and cipher strength information. For each cipher we have to decide
* whether it is exportable or not. This information is likely to change
...
...
@@ -398,7 +417,9 @@
#define SSL_PKEY_DH_RSA 3
#define SSL_PKEY_DH_DSA 4
#define SSL_PKEY_ECC 5
#define SSL_PKEY_NUM 6
#define SSL_PKEY_GOST94 6
#define SSL_PKEY_GOST01 7
#define SSL_PKEY_NUM 8
/* SSL_kRSA <- RSA_ENC | (RSA_TMP & RSA_SIGN) |
* <- (EXPORT & (RSA_ENC | RSA_TMP) & RSA_SIGN)
...
...
@@ -516,9 +537,9 @@ typedef struct ssl3_enc_method
int
(
*
setup_key_block
)(
SSL
*
);
int
(
*
generate_master_secret
)(
SSL
*
,
unsigned
char
*
,
unsigned
char
*
,
int
);
int
(
*
change_cipher_state
)(
SSL
*
,
int
);
int
(
*
final_finish_mac
)(
SSL
*
,
EVP_MD_CTX
*
,
EVP_MD_CTX
*
,
const
char
*
,
int
,
unsigned
char
*
);
int
(
*
final_finish_mac
)(
SSL
*
,
const
char
*
,
int
,
unsigned
char
*
);
int
finish_mac_length
;
int
(
*
cert_verify_mac
)(
SSL
*
,
EVP_MD_CTX
*
,
unsigned
char
*
);
int
(
*
cert_verify_mac
)(
SSL
*
,
int
,
unsigned
char
*
);
const
char
*
client_finished_label
;
int
client_finished_label_len
;
const
char
*
server_finished_label
;
...
...
@@ -755,6 +776,7 @@ STACK_OF(SSL_CIPHER) *ssl_create_cipher_list(const SSL_METHOD *meth,
void
ssl_update_cache
(
SSL
*
s
,
int
mode
);
int
ssl_cipher_get_evp
(
const
SSL_SESSION
*
s
,
const
EVP_CIPHER
**
enc
,
const
EVP_MD
**
md
,
int
*
mac_pkey_type
,
int
*
mac_secret_size
,
SSL_COMP
**
comp
);
int
ssl_get_handshake_digest
(
int
i
,
long
*
mask
,
const
EVP_MD
**
md
);
int
ssl_verify_cert_chain
(
SSL
*
s
,
STACK_OF
(
X509
)
*
sk
);
int
ssl_undefined_function
(
SSL
*
s
);
int
ssl_undefined_void_function
(
void
);
...
...
@@ -820,16 +842,17 @@ int ssl3_renegotiate_check(SSL *ssl);
int
ssl3_dispatch_alert
(
SSL
*
s
);
int
ssl3_read_bytes
(
SSL
*
s
,
int
type
,
unsigned
char
*
buf
,
int
len
,
int
peek
);
int
ssl3_write_bytes
(
SSL
*
s
,
int
type
,
const
void
*
buf
,
int
len
);
int
ssl3_final_finish_mac
(
SSL
*
s
,
EVP_MD_CTX
*
ctx1
,
EVP_MD_CTX
*
ctx2
,
const
char
*
sender
,
int
slen
,
unsigned
char
*
p
);
int
ssl3_cert_verify_mac
(
SSL
*
s
,
EVP_MD_CTX
*
in
,
unsigned
char
*
p
);
int
ssl3_final_finish_mac
(
SSL
*
s
,
const
char
*
sender
,
int
slen
,
unsigned
char
*
p
);
int
ssl3_cert_verify_mac
(
SSL
*
s
,
int
md_nid
,
unsigned
char
*
p
);
void
ssl3_finish_mac
(
SSL
*
s
,
const
unsigned
char
*
buf
,
int
len
);
int
ssl3_enc
(
SSL
*
s
,
int
send_data
);
int
ssl3_mac
(
SSL
*
ssl
,
unsigned
char
*
md
,
int
send_data
);
void
ssl3_free_digest_list
(
SSL
*
s
);
unsigned
long
ssl3_output_cert_chain
(
SSL
*
s
,
X509
*
x
);
SSL_CIPHER
*
ssl3_choose_cipher
(
SSL
*
ssl
,
STACK_OF
(
SSL_CIPHER
)
*
clnt
,
STACK_OF
(
SSL_CIPHER
)
*
srvr
);
int
ssl3_setup_buffers
(
SSL
*
s
);
void
ssl3_digest_cached_records
(
SSL
*
s
);
int
ssl3_new
(
SSL
*
s
);
void
ssl3_free
(
SSL
*
s
);
int
ssl3_accept
(
SSL
*
s
);
...
...
@@ -957,9 +980,9 @@ void ssl_free_wbio_buffer(SSL *s);
int
tls1_change_cipher_state
(
SSL
*
s
,
int
which
);
int
tls1_setup_key_block
(
SSL
*
s
);
int
tls1_enc
(
SSL
*
s
,
int
snd
);
int
tls1_final_finish_mac
(
SSL
*
s
,
EVP_MD_CTX
*
in1_ctx
,
EVP_MD_CTX
*
in2_ctx
,
int
tls1_final_finish_mac
(
SSL
*
s
,
const
char
*
str
,
int
slen
,
unsigned
char
*
p
);
int
tls1_cert_verify_mac
(
SSL
*
s
,
EVP_MD_CTX
*
in
,
unsigned
char
*
p
);
int
tls1_cert_verify_mac
(
SSL
*
s
,
int
md_nid
,
unsigned
char
*
p
);
int
tls1_mac
(
SSL
*
ssl
,
unsigned
char
*
md
,
int
snd
);
int
tls1_generate_master_secret
(
SSL
*
s
,
unsigned
char
*
out
,
unsigned
char
*
p
,
int
len
);
...
...
ssl/t1_enc.c
浏览文件 @
81025661
...
...
@@ -190,27 +190,41 @@ static void tls1_P_hash(const EVP_MD *md, const unsigned char *sec,
OPENSSL_cleanse
(
A1
,
sizeof
(
A1
));
}
static
void
tls1_PRF
(
const
EVP_MD
*
md5
,
const
EVP_MD
*
sha1
,
static
void
tls1_PRF
(
long
digest_mask
,
unsigned
char
*
label
,
int
label_len
,
const
unsigned
char
*
sec
,
int
slen
,
unsigned
char
*
out1
,
unsigned
char
*
out2
,
int
olen
)
{
int
len
,
i
;
const
unsigned
char
*
S1
,
*
S2
;
len
=
slen
/
2
;
int
len
,
i
,
idx
,
count
;
const
unsigned
char
*
S1
;
long
m
;
const
EVP_MD
*
md
;
/* Count number of digests and divide sec evenly */
count
=
0
;
for
(
idx
=
0
;
ssl_get_handshake_digest
(
idx
,
&
m
,
&
md
);
idx
++
)
{
if
((
m
<<
TLS1_PRF_DGST_SHIFT
)
&
digest_mask
)
count
++
;
}
len
=
slen
/
count
;
S1
=
sec
;
S2
=
&
(
sec
[
len
]);
len
+=
(
slen
&
1
);
/* add for odd, make longer */
tls1_P_hash
(
md5
,
S1
,
len
,
label
,
label_len
,
out1
,
olen
);
tls1_P_hash
(
sha1
,
S2
,
len
,
label
,
label_len
,
out2
,
olen
);
for
(
i
=
0
;
i
<
olen
;
i
++
)
out1
[
i
]
^=
out2
[
i
];
memset
(
out1
,
0
,
olen
);
for
(
idx
=
0
;
ssl_get_handshake_digest
(
idx
,
&
m
,
&
md
);
idx
++
)
{
if
((
m
<<
TLS1_PRF_DGST_SHIFT
)
&
digest_mask
)
{
if
(
!
md
)
{
SSLerr
(
SSL_F_TLS1_PRF
,
SSL_R_UNSUPPORTED_DIGEST_TYPE
);
return
;
}
tls1_P_hash
(
md
,
S1
,
len
+
(
slen
&
1
),
label
,
label_len
,
out2
,
olen
);
S1
+=
len
;
for
(
i
=
0
;
i
<
olen
;
i
++
)
{
out1
[
i
]
^=
out2
[
i
];
}
}
}
}
static
void
tls1_generate_key_block
(
SSL
*
s
,
unsigned
char
*
km
,
unsigned
char
*
tmp
,
int
num
)
{
...
...
@@ -227,7 +241,7 @@ static void tls1_generate_key_block(SSL *s, unsigned char *km,
memcpy
(
p
,
s
->
s3
->
client_random
,
SSL3_RANDOM_SIZE
);
p
+=
SSL3_RANDOM_SIZE
;
tls1_PRF
(
s
->
ctx
->
md5
,
s
->
ctx
->
sha1
,
buf
,(
int
)(
p
-
buf
),
tls1_PRF
(
s
->
s3
->
tmp
.
new_cipher
->
algorithm2
,
buf
,(
int
)(
p
-
buf
),
s
->
session
->
master_key
,
s
->
session
->
master_key_length
,
km
,
tmp
,
num
);
#ifdef KSSL_DEBUG
...
...
@@ -436,7 +450,7 @@ printf("which = %04X\nmac key=",which);
p
+=
SSL3_RANDOM_SIZE
;
memcpy
(
p
,
s
->
s3
->
server_random
,
SSL3_RANDOM_SIZE
);
p
+=
SSL3_RANDOM_SIZE
;
tls1_PRF
(
s
->
ctx
->
md5
,
s
->
ctx
->
sha1
,
buf
,(
int
)(
p
-
buf
),
key
,
j
,
tls1_PRF
(
s
->
s3
->
tmp
.
new_cipher
->
algorithm2
,
buf
,(
int
)(
p
-
buf
),
key
,
j
,
tmp1
,
tmp2
,
EVP_CIPHER_key_length
(
c
));
key
=
tmp1
;
...
...
@@ -450,7 +464,7 @@ printf("which = %04X\nmac key=",which);
p
+=
SSL3_RANDOM_SIZE
;
memcpy
(
p
,
s
->
s3
->
server_random
,
SSL3_RANDOM_SIZE
);
p
+=
SSL3_RANDOM_SIZE
;
tls1_PRF
(
s
->
ctx
->
md5
,
s
->
ctx
->
sha1
,
buf
,
p
-
buf
,
empty
,
0
,
tls1_PRF
(
s
->
s3
->
tmp
.
new_cipher
->
algorithm2
,
buf
,
p
-
buf
,
empty
,
0
,
iv1
,
iv2
,
k
*
2
);
if
(
client_write
)
iv
=
iv1
;
...
...
@@ -720,40 +734,63 @@ int tls1_enc(SSL *s, int send)
}
return
(
1
);
}
int
tls1_cert_verify_mac
(
SSL
*
s
,
EVP_MD_CTX
*
in_ctx
,
unsigned
char
*
out
)
int
tls1_cert_verify_mac
(
SSL
*
s
,
int
md_nid
,
unsigned
char
*
out
)
{
unsigned
int
ret
;
EVP_MD_CTX
ctx
;
EVP_MD_CTX
ctx
,
*
d
=
NULL
;
int
i
;
if
(
s
->
s3
->
handshake_buffer
)
ssl3_digest_cached_records
(
s
);
for
(
i
=
0
;
i
<
SSL_MAX_DIGEST
;
i
++
)
{
if
(
s
->
s3
->
handshake_dgst
[
i
]
&&
EVP_MD_CTX_type
(
s
->
s3
->
handshake_dgst
[
i
])
==
md_nid
)
{
d
=
s
->
s3
->
handshake_dgst
[
i
];
break
;
}
}
if
(
!
d
)
{
SSLerr
(
SSL_F_TLS1_CERT_VERIFY_MAC
,
SSL_R_NO_REQUIRED_DIGEST
);
return
0
;
}
EVP_MD_CTX_init
(
&
ctx
);
EVP_MD_CTX_copy_ex
(
&
ctx
,
in_ctx
);
EVP_MD_CTX_copy_ex
(
&
ctx
,
d
);
EVP_DigestFinal_ex
(
&
ctx
,
out
,
&
ret
);
EVP_MD_CTX_cleanup
(
&
ctx
);
return
((
int
)
ret
);
}
int
tls1_final_finish_mac
(
SSL
*
s
,
EVP_MD_CTX
*
in1_ctx
,
EVP_MD_CTX
*
in2_ctx
,
int
tls1_final_finish_mac
(
SSL
*
s
,
const
char
*
str
,
int
slen
,
unsigned
char
*
out
)
{
unsigned
int
i
;
EVP_MD_CTX
ctx
;
unsigned
char
buf
[
TLS_MD_MAX_CONST_SIZE
+
MD5_DIGEST_LENGTH
+
SHA_DIGEST_LENGTH
];
unsigned
char
*
q
,
buf2
[
12
];
int
idx
;
long
mask
;
const
EVP_MD
*
md
;
q
=
buf
;
memcpy
(
q
,
str
,
slen
);
q
+=
slen
;
EVP_MD_CTX_init
(
&
ctx
);
EVP_MD_CTX_copy_ex
(
&
ctx
,
in1_ctx
);
EVP_DigestFinal_ex
(
&
ctx
,
q
,
&
i
);
q
+=
i
;
EVP_MD_CTX_copy_ex
(
&
ctx
,
in2_ctx
);
EVP_DigestFinal_ex
(
&
ctx
,
q
,
&
i
);
q
+=
i
;
tls1_PRF
(
s
->
ctx
->
md5
,
s
->
ctx
->
sha1
,
buf
,(
int
)(
q
-
buf
),
if
(
s
->
s3
->
handshake_buffer
)
ssl3_digest_cached_records
(
s
);
for
(
idx
=
0
;
ssl_get_handshake_digest
(
idx
,
&
mask
,
&
md
);
idx
++
)
{
if
(
mask
&
s
->
s3
->
tmp
.
new_cipher
->
algorithm2
)
{
EVP_MD_CTX_copy_ex
(
&
ctx
,
s
->
s3
->
handshake_dgst
[
idx
]);
EVP_DigestFinal_ex
(
&
ctx
,
q
,
&
i
);
q
+=
i
;
}
}
tls1_PRF
(
s
->
s3
->
tmp
.
new_cipher
->
algorithm2
,
buf
,(
int
)(
q
-
buf
),
s
->
session
->
master_key
,
s
->
session
->
master_key_length
,
out
,
buf2
,
sizeof
buf2
);
EVP_MD_CTX_cleanup
(
&
ctx
);
...
...
@@ -853,7 +890,7 @@ int tls1_generate_master_secret(SSL *s, unsigned char *out, unsigned char *p,
s
->
s3
->
client_random
,
SSL3_RANDOM_SIZE
);
memcpy
(
&
(
buf
[
SSL3_RANDOM_SIZE
+
TLS_MD_MASTER_SECRET_CONST_SIZE
]),
s
->
s3
->
server_random
,
SSL3_RANDOM_SIZE
);
tls1_PRF
(
s
->
ctx
->
md5
,
s
->
ctx
->
sha1
,
tls1_PRF
(
s
->
s3
->
tmp
.
new_cipher
->
algorithm2
,
buf
,
TLS_MD_MASTER_SECRET_CONST_SIZE
+
SSL3_RANDOM_SIZE
*
2
,
p
,
len
,
s
->
session
->
master_key
,
buff
,
sizeof
buff
);
#ifdef KSSL_DEBUG
...
...
ssl/tls1.h
浏览文件 @
81025661
...
...
@@ -420,6 +420,7 @@ SSL_CTX_ctrl(ctx,SSL_CTRL_SET_TLSEXT_SERVERNAME_ARG,0, (void *)arg)
/* Stream MAC for GOST ciphersuites from cryptopro draft */
#define TLS1_STREAM_MAC 0x04
#define TLS_CT_RSA_SIGN 1
#define TLS_CT_DSS_SIGN 2
#define TLS_CT_RSA_FIXED_DH 3
...
...
util/ssleay.num
浏览文件 @
81025661
...
...
@@ -239,17 +239,17 @@ SSL_CTX_sess_get_new_cb 287 EXIST::FUNCTION:
SSL_CTX_get_client_cert_cb 288 EXIST::FUNCTION:
SSL_CTX_sess_get_remove_cb 289 EXIST::FUNCTION:
SSL_set_SSL_CTX 290 EXIST::FUNCTION:
SSL_
get_servername 291 EXIST::FUNCTION:TLSEXT
SSL_
get_servername_type 292 EXIST::FUNCTION:TLSEXT
SSL_
CTX_use_psk_identity_hint
293 EXIST::FUNCTION:PSK
SSL_
CTX_set_psk_client_callback
294 EXIST::FUNCTION:PSK
PEM_write_bio_SSL_SESSION 295 EXIST::FUNCTION:
SSL_
get_psk_identity_hint
296 EXIST::FUNCTION:PSK
SSL_
set_psk_server_callback 297 EXIST::FUNCTION:PSK
SSL_
use_psk_identity_hint 298 EXIST::FUNCTION:PSK
SSL_
set_psk_client_callback
299 EXIST::FUNCTION:PSK
PEM_read_SSL_SESSION 300 EXIST:!WIN16:FUNCTION:
PEM_
read_bio_SSL_SESSION
301 EXIST::FUNCTION:
SSL_CTX_set_psk_server_callback 302 EXIST::FUNCTION:PSK
SSL_get_psk_identity 303 EXIST::FUNCTION:PSK
SSL_
CTX_use_psk_identity_hint 291 EXIST::FUNCTION:PSK
SSL_
CTX_set_psk_client_callback 292 EXIST::FUNCTION:PSK
SSL_
get_psk_identity_hint
293 EXIST::FUNCTION:PSK
SSL_
set_psk_server_callback
294 EXIST::FUNCTION:PSK
SSL_use_psk_identity_hint 295 EXIST::FUNCTION:PSK
SSL_
set_psk_client_callback
296 EXIST::FUNCTION:PSK
SSL_
get_servername 297 EXIST::FUNCTION:TLSEXT
SSL_
get_servername_type 298 EXIST::FUNCTION:TLSEXT
SSL_
CTX_set_psk_server_callback
299 EXIST::FUNCTION:PSK
SSL_get_psk_identity 300 EXIST::FUNCTION:PSK
PEM_
write_bio_SSL_SESSION
301 EXIST::FUNCTION:
PEM_read_SSL_SESSION 302 EXIST:!WIN16:FUNCTION:
PEM_read_bio_SSL_SESSION 303 EXIST::FUNCTION:
PEM_write_SSL_SESSION 304 EXIST:!WIN16:FUNCTION:
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录