Line 0
Link Here
|
|
|
1 |
--- handshake.h.orig 2016-02-29 01:15:13 UTC |
2 |
+++ handshake.h |
3 |
@@ -31,9 +31,9 @@ |
4 |
#define SHA256_DIGEST_LENGTH 32 |
5 |
#endif |
6 |
#define HMAC_CTX sha2_context |
7 |
-#define HMAC_setup(ctx, key, len) sha2_hmac_starts(&ctx, (unsigned char *)key, len, 0) |
8 |
-#define HMAC_crunch(ctx, buf, len) sha2_hmac_update(&ctx, buf, len) |
9 |
-#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; sha2_hmac_finish(&ctx, dig) |
10 |
+#define HMAC_setup(ctx, key, len) sha2_hmac_starts(ctx, (unsigned char *)key, len, 0) |
11 |
+#define HMAC_crunch(ctx, buf, len) sha2_hmac_update(ctx, buf, len) |
12 |
+#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; sha2_hmac_finish(ctx, dig) |
13 |
|
14 |
typedef arc4_context * RC4_handle; |
15 |
#define RC4_alloc(h) *h = malloc(sizeof(arc4_context)) |
16 |
@@ -50,9 +50,9 @@ typedef arc4_context * RC4_handle; |
17 |
#endif |
18 |
#undef HMAC_CTX |
19 |
#define HMAC_CTX struct hmac_sha256_ctx |
20 |
-#define HMAC_setup(ctx, key, len) hmac_sha256_set_key(&ctx, len, key) |
21 |
-#define HMAC_crunch(ctx, buf, len) hmac_sha256_update(&ctx, len, buf) |
22 |
-#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; hmac_sha256_digest(&ctx, SHA256_DIGEST_LENGTH, dig) |
23 |
+#define HMAC_setup(ctx, key, len) hmac_sha256_set_key(ctx, len, key) |
24 |
+#define HMAC_crunch(ctx, buf, len) hmac_sha256_update(ctx, len, buf) |
25 |
+#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; hmac_sha256_digest(ctx, SHA256_DIGEST_LENGTH, dig) |
26 |
#define HMAC_close(ctx) |
27 |
|
28 |
typedef struct arcfour_ctx* RC4_handle; |
29 |
@@ -69,9 +69,9 @@ typedef struct arcfour_ctx* RC4_handle; |
30 |
#if OPENSSL_VERSION_NUMBER < 0x0090800 || !defined(SHA256_DIGEST_LENGTH) |
31 |
#error Your OpenSSL is too old, need 0.9.8 or newer with SHA256 |
32 |
#endif |
33 |
-#define HMAC_setup(ctx, key, len) HMAC_CTX_init(&ctx); HMAC_Init_ex(&ctx, key, len, EVP_sha256(), 0) |
34 |
-#define HMAC_crunch(ctx, buf, len) HMAC_Update(&ctx, buf, len) |
35 |
-#define HMAC_finish(ctx, dig, dlen) HMAC_Final(&ctx, dig, &dlen); HMAC_CTX_cleanup(&ctx) |
36 |
+#define HMAC_setup(ctx, key, len) HMAC_CTX_new(); HMAC_Init_ex(ctx, key, len, EVP_sha256(), 0) |
37 |
+#define HMAC_crunch(ctx, buf, len) HMAC_Update(ctx, buf, len) |
38 |
+#define HMAC_finish(ctx, dig, dlen) HMAC_Final(ctx, dig, &dlen) |
39 |
|
40 |
typedef RC4_KEY * RC4_handle; |
41 |
#define RC4_alloc(h) *h = malloc(sizeof(RC4_KEY)) |
42 |
@@ -82,8 +82,12 @@ typedef RC4_KEY * RC4_handle; |
43 |
#endif |
44 |
|
45 |
#define FP10 |
46 |
- |
47 |
+#if OPENSSL_VERSION_NUMBER < 0x10100000L |
48 |
#include "dh.h" |
49 |
+#endif |
50 |
+#if OPENSSL_VERSION_NUMBER > 0x10100000L |
51 |
+#include <openssl/dh.h> |
52 |
+#endif |
53 |
|
54 |
static const uint8_t GenuineFMSKey[] = { |
55 |
0x47, 0x65, 0x6e, 0x75, 0x69, 0x6e, 0x65, 0x20, 0x41, 0x64, 0x6f, 0x62, |
56 |
@@ -117,7 +121,7 @@ static void InitRC4Encryption |
57 |
{ |
58 |
uint8_t digest[SHA256_DIGEST_LENGTH]; |
59 |
unsigned int digestLen = 0; |
60 |
- HMAC_CTX ctx; |
61 |
+HMAC_CTX *ctx = HMAC_CTX_new(); |
62 |
|
63 |
RC4_alloc(rc4keyIn); |
64 |
RC4_alloc(rc4keyOut); |
65 |
@@ -266,7 +270,7 @@ HMACsha256(const uint8_t *message, size_t messageLen, |
66 |
size_t keylen, uint8_t *digest) |
67 |
{ |
68 |
unsigned int digestLen; |
69 |
- HMAC_CTX ctx; |
70 |
+ HMAC_CTX *ctx = HMAC_CTX_new(); |
71 |
|
72 |
HMAC_setup(ctx, key, keylen); |
73 |
HMAC_crunch(ctx, message, messageLen); |
74 |
@@ -769,7 +773,7 @@ HandShake(RTMP * r, int FP9HandShake) |
75 |
if (encrypted) |
76 |
{ |
77 |
/* generate Diffie-Hellmann parameters */ |
78 |
- r->Link.dh = DHInit(1024); |
79 |
+ r->Link.dh = DH_get_1024_160(); |
80 |
if (!r->Link.dh) |
81 |
{ |
82 |
RTMP_Log(RTMP_LOGERROR, "%s: Couldn't initialize Diffie-Hellmann!", |
83 |
@@ -780,20 +784,20 @@ HandShake(RTMP * r, int FP9HandShake) |
84 |
dhposClient = getdh(clientsig, RTMP_SIG_SIZE); |
85 |
RTMP_Log(RTMP_LOGDEBUG, "%s: DH pubkey position: %d", __FUNCTION__, dhposClient); |
86 |
|
87 |
- if (!DHGenerateKey(r->Link.dh)) |
88 |
+ if (!DH_generate_key(r->Link.dh)) |
89 |
{ |
90 |
RTMP_Log(RTMP_LOGERROR, "%s: Couldn't generate Diffie-Hellmann public key!", |
91 |
__FUNCTION__); |
92 |
return FALSE; |
93 |
} |
94 |
- |
95 |
- if (!DHGetPublicKey(r->Link.dh, &clientsig[dhposClient], 128)) |
96 |
+ if (!DHGetPublicKey(r->Link.dh, clientsig[dhposClient], 128)) |
97 |
{ |
98 |
RTMP_Log(RTMP_LOGERROR, "%s: Couldn't write public key!", __FUNCTION__); |
99 |
return FALSE; |
100 |
} |
101 |
} |
102 |
|
103 |
+ |
104 |
digestPosClient = getdig(clientsig, RTMP_SIG_SIZE); /* reuse this value in verification */ |
105 |
RTMP_Log(RTMP_LOGDEBUG, "%s: Client digest offset: %d", __FUNCTION__, |
106 |
digestPosClient); |
107 |
@@ -890,8 +894,13 @@ HandShake(RTMP * r, int FP9HandShake) |
108 |
dhposServer = getdh(serversig, RTMP_SIG_SIZE); |
109 |
RTMP_Log(RTMP_LOGDEBUG, "%s: Server DH public key offset: %d", __FUNCTION__, |
110 |
dhposServer); |
111 |
+#if OPENSSL_VERSION_NUMBER > 0x10100000L |
112 |
+ len = DH_compute_key(r->Link.dh, &serversig[dhposServer], |
113 |
+ 128, secretKey); |
114 |
+#else |
115 |
len = DHComputeSharedSecretKey(r->Link.dh, &serversig[dhposServer], |
116 |
128, secretKey); |
117 |
+#endif |
118 |
if (len < 0) |
119 |
{ |
120 |
RTMP_Log(RTMP_LOGDEBUG, "%s: Wrong secret key position!", __FUNCTION__); |
121 |
@@ -1157,7 +1166,7 @@ SHandShake(RTMP * r) |
122 |
if (encrypted) |
123 |
{ |
124 |
/* generate Diffie-Hellmann parameters */ |
125 |
- r->Link.dh = DHInit(1024); |
126 |
+ DH_generate_key(r->Link.dh); |
127 |
if (!r->Link.dh) |
128 |
{ |
129 |
RTMP_Log(RTMP_LOGERROR, "%s: Couldn't initialize Diffie-Hellmann!", |
130 |
@@ -1168,7 +1177,7 @@ SHandShake(RTMP * r) |
131 |
dhposServer = getdh(serversig, RTMP_SIG_SIZE); |
132 |
RTMP_Log(RTMP_LOGDEBUG, "%s: DH pubkey position: %d", __FUNCTION__, dhposServer); |
133 |
|
134 |
- if (!DHGenerateKey(r->Link.dh)) |
135 |
+ if (!DH_generate_key(r->Link.dh)) |
136 |
{ |
137 |
RTMP_Log(RTMP_LOGERROR, "%s: Couldn't generate Diffie-Hellmann public key!", |
138 |
__FUNCTION__); |