Update multimedia/librtmp to version 2.4.20151223_4
[dports.git] / multimedia / librtmp / files / patch-librtmp-hashswf.c
1 --- librtmp/hashswf.c.orig      2016-02-29 01:15:13 UTC
2 +++ librtmp/hashswf.c
3 @@ -37,10 +37,17 @@
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_close(ctx)
11 +#define HMAC_setup(ctx, key, len)      do { \
12 +               if (ctx == NULL) \
13 +                       ctx = calloc(1, sizeof(*ctx)); \
14 +               sha2_hmac_starts(ctx, (unsigned char *)key, len, 0); \
15 +       } while (0);
16 +#define HMAC_crunch(ctx, buf, len)     sha2_hmac_update(ctx, buf, len)
17 +#define HMAC_finish(ctx, dig, dlen)    dlen = SHA256_DIGEST_LENGTH; sha2_hmac_finish(ctx, dig)
18 +#define HMAC_close(ctx)        do { \
19 +               free(ctx); \
20 +               ctx = NULL; \
21 +       } while (0)
22  #elif defined(USE_GNUTLS)
23  #include <nettle/hmac.h>
24  #ifndef SHA256_DIGEST_LENGTH
25 @@ -48,19 +55,51 @@
26  #endif
27  #undef HMAC_CTX
28  #define HMAC_CTX       struct hmac_sha256_ctx
29 -#define HMAC_setup(ctx, key, len)      hmac_sha256_set_key(&ctx, len, key)
30 -#define HMAC_crunch(ctx, buf, len)     hmac_sha256_update(&ctx, len, buf)
31 -#define HMAC_finish(ctx, dig, dlen)    dlen = SHA256_DIGEST_LENGTH; hmac_sha256_digest(&ctx, SHA256_DIGEST_LENGTH, dig)
32 -#define HMAC_close(ctx)
33 +#define HMAC_setup(ctx, key, len)      do { \
34 +               if (ctx == NULL) \
35 +                       ctx = calloc(1, sizeof(*ctx)); \
36 +               hmac_sha256_set_key(ctx, len, key); \
37 +       } while (0)
38 +#define HMAC_crunch(ctx, buf, len)     hmac_sha256_update(ctx, len, buf)
39 +#define HMAC_finish(ctx, dig, dlen)    dlen = SHA256_DIGEST_LENGTH; hmac_sha256_digest(ctx, SHA256_DIGEST_LENGTH, dig)
40 +#define HMAC_close(ctx)        do { \
41 +               free(ctx); \
42 +               ctx = NULL; \
43 +       } while (0)
44  #else  /* USE_OPENSSL */
45  #include <openssl/ssl.h>
46  #include <openssl/sha.h>
47  #include <openssl/hmac.h>
48  #include <openssl/rc4.h>
49 -#define HMAC_setup(ctx, key, len)      HMAC_CTX_init(&ctx); HMAC_Init_ex(&ctx, (unsigned char *)key, len, EVP_sha256(), 0)
50 -#define HMAC_crunch(ctx, buf, len)     HMAC_Update(&ctx, (unsigned char *)buf, len)
51 -#define HMAC_finish(ctx, dig, dlen)    HMAC_Final(&ctx, (unsigned char *)dig, &dlen);
52 -#define HMAC_close(ctx)        HMAC_CTX_cleanup(&ctx)
53 +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
54 +#define HMAC_setup(ctx, key, len)      do { \
55 +               if (ctx == NULL) \
56 +                       ctx = calloc(1, sizeof(*ctx)); \
57 +               HMAC_CTX_init(ctx); \
58 +               HMAC_Init_ex(ctx, (unsigned char *)key, len, EVP_sha256(), 0); \
59 +       } while (0)
60 +#else
61 +#define HMAC_setup(ctx, key, len)      do { \
62 +               if (ctx == NULL) \
63 +                       ctx = HMAC_CTX_new(); \
64 +               HMAC_Init_ex(ctx, (unsigned char *)key, len, EVP_sha256(), 0); \
65 +       } while (0);
66 +#endif
67 +#define HMAC_crunch(ctx, buf, len)     HMAC_Update(ctx, (unsigned char *)buf, len)
68 +#define HMAC_finish(ctx, dig, dlen)    HMAC_Final(ctx, (unsigned char *)dig, &dlen);
69 +#if OPENSSL_VERSION_NUMBER < 0x10100000L || defined(LIBRESSL_VERSION_NUMBER)
70 +#define HMAC_close(ctx)        do { \
71 +               HMAC_CTX_cleanup(ctx); \
72 +               free(ctx); \
73 +               ctx = NULL; \
74 +       } while (0)
75 +#else
76 +#define HMAC_close(ctx)        do { \
77 +               HMAC_CTX_reset(ctx); \
78 +               HMAC_CTX_free(ctx); \
79 +               ctx = NULL; \
80 +       } while (0)
81 +#endif
82  #endif
83  
84  extern void RTMP_TLS_Init();
85 @@ -289,7 +328,7 @@ leave:
86  struct info
87  {
88    z_stream *zs;
89 -  HMAC_CTX ctx;
90 +  HMAC_CTX *ctx;
91    int first;
92    int zlib;
93    int size;