Changeset View
Changeset View
Standalone View
Standalone View
multimedia/librtmp/files/patch-librtmp-hashswf.c
--- librtmp/hashswf.c.orig 2016-02-29 01:15:13 UTC | --- librtmp/hashswf.c.orig 2019-03-30 21:33:00 UTC | ||||
+++ librtmp/hashswf.c | +++ librtmp/hashswf.c | ||||
@@ -37,10 +37,17 @@ | @@ -37,10 +37,17 @@ | ||||
#define SHA256_DIGEST_LENGTH 32 | #define SHA256_DIGEST_LENGTH 32 | ||||
#endif | #endif | ||||
#define HMAC_CTX sha2_context | #define HMAC_CTX sha2_context | ||||
-#define HMAC_setup(ctx, key, len) sha2_hmac_starts(&ctx, (unsigned char *)key, len, 0) | -#define HMAC_setup(ctx, key, len) sha2_hmac_starts(&ctx, (unsigned char *)key, len, 0) | ||||
-#define HMAC_crunch(ctx, buf, len) sha2_hmac_update(&ctx, buf, len) | -#define HMAC_crunch(ctx, buf, len) sha2_hmac_update(&ctx, buf, len) | ||||
-#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; sha2_hmac_finish(&ctx, dig) | -#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; sha2_hmac_finish(&ctx, dig) | ||||
-#define HMAC_close(ctx) | -#define HMAC_close(ctx) | ||||
+#define HMAC_setup(ctx, key, len) do { \ | +#define HMAC_setup(ctx, key, len) do { \ | ||||
+ if (ctx == NULL) \ | + if (ctx == NULL) \ | ||||
+ ctx = calloc(1, sizeof(*ctx)); \ | + ctx = calloc(1, sizeof(*ctx)); \ | ||||
+ sha2_hmac_starts(ctx, (unsigned char *)key, len, 0); \ | + sha2_hmac_starts(ctx, (unsigned char *)key, len, 0); \ | ||||
+ } while (0); | + } while (0); | ||||
+#define HMAC_crunch(ctx, buf, len) sha2_hmac_update(ctx, buf, len) | +#define HMAC_crunch(ctx, buf, len) sha2_hmac_update(ctx, buf, len) | ||||
+#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; sha2_hmac_finish(ctx, dig) | +#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; sha2_hmac_finish(ctx, dig) | ||||
+#define HMAC_close(ctx) do { \ | +#define HMAC_close(ctx) do { \ | ||||
+ free(ctx); \ | + free(ctx); \ | ||||
+ ctx = NULL; \ | + ctx = NULL; \ | ||||
+ } while (0) | + } while (0) | ||||
#elif defined(USE_GNUTLS) | #elif defined(USE_GNUTLS) | ||||
#include <nettle/hmac.h> | #include <nettle/hmac.h> | ||||
#ifndef SHA256_DIGEST_LENGTH | #ifndef SHA256_DIGEST_LENGTH | ||||
@@ -48,19 +55,51 @@ | @@ -48,20 +55,52 @@ | ||||
#endif | #endif | ||||
#undef HMAC_CTX | #undef HMAC_CTX | ||||
#define HMAC_CTX struct hmac_sha256_ctx | #define HMAC_CTX struct hmac_sha256_ctx | ||||
-#define HMAC_setup(ctx, key, len) hmac_sha256_set_key(&ctx, len, key) | -#define HMAC_setup(ctx, key, len) hmac_sha256_set_key(&ctx, len, key) | ||||
-#define HMAC_crunch(ctx, buf, len) hmac_sha256_update(&ctx, len, buf) | -#define HMAC_crunch(ctx, buf, len) hmac_sha256_update(&ctx, len, buf) | ||||
-#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; hmac_sha256_digest(&ctx, SHA256_DIGEST_LENGTH, dig) | -#define HMAC_finish(ctx, dig, dlen) dlen = SHA256_DIGEST_LENGTH; hmac_sha256_digest(&ctx, SHA256_DIGEST_LENGTH, dig) | ||||
-#define HMAC_close(ctx) | -#define HMAC_close(ctx) | ||||
+#define HMAC_setup(ctx, key, len) do { \ | +#define HMAC_setup(ctx, key, len) do { \ | ||||
Show All 11 Lines | |||||
#include <openssl/ssl.h> | #include <openssl/ssl.h> | ||||
#include <openssl/sha.h> | #include <openssl/sha.h> | ||||
#include <openssl/hmac.h> | #include <openssl/hmac.h> | ||||
#include <openssl/rc4.h> | #include <openssl/rc4.h> | ||||
-#define HMAC_setup(ctx, key, len) HMAC_CTX_init(&ctx); HMAC_Init_ex(&ctx, (unsigned char *)key, len, EVP_sha256(), 0) | -#define HMAC_setup(ctx, key, len) HMAC_CTX_init(&ctx); HMAC_Init_ex(&ctx, (unsigned char *)key, len, EVP_sha256(), 0) | ||||
-#define HMAC_crunch(ctx, buf, len) HMAC_Update(&ctx, (unsigned char *)buf, len) | -#define HMAC_crunch(ctx, buf, len) HMAC_Update(&ctx, (unsigned char *)buf, len) | ||||
-#define HMAC_finish(ctx, dig, dlen) HMAC_Final(&ctx, (unsigned char *)dig, &dlen); | -#define HMAC_finish(ctx, dig, dlen) HMAC_Final(&ctx, (unsigned char *)dig, &dlen); | ||||
-#define HMAC_close(ctx) HMAC_CTX_cleanup(&ctx) | -#define HMAC_close(ctx) HMAC_CTX_cleanup(&ctx) | ||||
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) | +#if OPENSSL_VERSION_NUMBER < 0x10100000L | ||||
+#define HMAC_setup(ctx, key, len) do { \ | +#define HMAC_setup(ctx, key, len) do { \ | ||||
+ if (ctx == NULL) \ | + if (ctx == NULL) \ | ||||
+ ctx = calloc(1, sizeof(*ctx)); \ | + ctx = calloc(1, sizeof(*ctx)); \ | ||||
+ HMAC_CTX_init(ctx); \ | + HMAC_CTX_init(ctx); \ | ||||
+ HMAC_Init_ex(ctx, (unsigned char *)key, len, EVP_sha256(), 0); \ | + HMAC_Init_ex(ctx, (unsigned char *)key, len, EVP_sha256(), 0); \ | ||||
+ } while (0) | + } while (0) | ||||
+#else | +#else | ||||
+#define HMAC_setup(ctx, key, len) do { \ | +#define HMAC_setup(ctx, key, len) do { \ | ||||
+ if (ctx == NULL) \ | + if (ctx == NULL) \ | ||||
+ ctx = HMAC_CTX_new(); \ | + ctx = HMAC_CTX_new(); \ | ||||
+ HMAC_Init_ex(ctx, (unsigned char *)key, len, EVP_sha256(), 0); \ | + HMAC_Init_ex(ctx, (unsigned char *)key, len, EVP_sha256(), 0); \ | ||||
+ } while (0); | + } while (0); | ||||
+#endif | #endif | ||||
+#define HMAC_crunch(ctx, buf, len) HMAC_Update(ctx, (unsigned char *)buf, len) | +#define HMAC_crunch(ctx, buf, len) HMAC_Update(ctx, (unsigned char *)buf, len) | ||||
+#define HMAC_finish(ctx, dig, dlen) HMAC_Final(ctx, (unsigned char *)dig, &dlen); | +#define HMAC_finish(ctx, dig, dlen) HMAC_Final(ctx, (unsigned char *)dig, &dlen); | ||||
+#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER) | +#if OPENSSL_VERSION_NUMBER < 0x10100000L | ||||
+#define HMAC_close(ctx) do { \ | +#define HMAC_close(ctx) do { \ | ||||
+ HMAC_CTX_cleanup(ctx); \ | + HMAC_CTX_cleanup(ctx); \ | ||||
+ free(ctx); \ | + free(ctx); \ | ||||
+ ctx = NULL; \ | + ctx = NULL; \ | ||||
+ } while (0) | + } while (0) | ||||
+#else | +#else | ||||
+#define HMAC_close(ctx) do { \ | +#define HMAC_close(ctx) do { \ | ||||
+ HMAC_CTX_reset(ctx); \ | + HMAC_CTX_reset(ctx); \ | ||||
+ HMAC_CTX_free(ctx); \ | + HMAC_CTX_free(ctx); \ | ||||
+ ctx = NULL; \ | + ctx = NULL; \ | ||||
+ } while (0) | + } while (0) | ||||
+#endif | +#endif | ||||
#endif | +#endif | ||||
extern void RTMP_TLS_Init(); | extern void RTMP_TLS_Init(); | ||||
@@ -289,7 +328,7 @@ leave: | extern TLS_CTX RTMP_TLS_ctx; | ||||
@@ -298,7 +337,7 @@ leave: | |||||
struct info | struct info | ||||
{ | { | ||||
z_stream *zs; | z_stream *zs; | ||||
- HMAC_CTX ctx; | - HMAC_CTX ctx; | ||||
+ HMAC_CTX *ctx; | + HMAC_CTX *ctx; | ||||
int first; | int first; | ||||
int zlib; | int zlib; | ||||
int size; | int size; |