Browse code

rtmp: Rename rtmp_calc_digest to ff_rtmp_calc_digest and make it global

Signed-off-by: Martin Storsjö <martin@martin.st>

Samuel Pitoiset authored on 2012/07/05 20:05:46
Showing 2 changed files
... ...
@@ -29,6 +29,9 @@
29 29
 
30 30
 #define RTMP_HANDSHAKE_PACKET_SIZE 1536
31 31
 
32
+#define HMAC_IPAD_VAL 0x36
33
+#define HMAC_OPAD_VAL 0x5C
34
+
32 35
 /**
33 36
  * emulated Flash client version - 9.0.124.2 on Linux
34 37
  * @{
... ...
@@ -40,4 +43,18 @@
40 40
 #define RTMP_CLIENT_VER4    2
41 41
 /** @} */ //version defines
42 42
 
43
+/**
44
+ * Calculate HMAC-SHA2 digest for RTMP handshake packets.
45
+ *
46
+ * @param src    input buffer
47
+ * @param len    input buffer length (should be 1536)
48
+ * @param gap    offset in buffer where 32 bytes should not be taken into account
49
+ *               when calculating digest (since it will be used to store that digest)
50
+ * @param key    digest key
51
+ * @param keylen digest key length
52
+ * @param dst    buffer where calculated digest will be stored (32 bytes)
53
+ */
54
+int ff_rtmp_calc_digest(const uint8_t *src, int len, int gap,
55
+                        const uint8_t *key, int keylen, uint8_t *dst);
56
+
43 57
 #endif /* AVFORMAT_RTMP_H */
... ...
@@ -590,23 +590,8 @@ static int gen_bytes_read(URLContext *s, RTMPContext *rt, uint32_t ts)
590 590
     return ret;
591 591
 }
592 592
 
593
-//TODO: Move HMAC code somewhere. Eventually.
594
-#define HMAC_IPAD_VAL 0x36
595
-#define HMAC_OPAD_VAL 0x5C
596
-
597
-/**
598
- * Calculate HMAC-SHA2 digest for RTMP handshake packets.
599
- *
600
- * @param src    input buffer
601
- * @param len    input buffer length (should be 1536)
602
- * @param gap    offset in buffer where 32 bytes should not be taken into account
603
- *               when calculating digest (since it will be used to store that digest)
604
- * @param key    digest key
605
- * @param keylen digest key length
606
- * @param dst    buffer where calculated digest will be stored (32 bytes)
607
- */
608
-static int rtmp_calc_digest(const uint8_t *src, int len, int gap,
609
-                            const uint8_t *key, int keylen, uint8_t *dst)
593
+int ff_rtmp_calc_digest(const uint8_t *src, int len, int gap,
594
+                        const uint8_t *key, int keylen, uint8_t *dst)
610 595
 {
611 596
     struct AVSHA *sha;
612 597
     uint8_t hmac_buf[64+32] = {0};
... ...
@@ -663,9 +648,9 @@ static int rtmp_handshake_imprint_with_digest(uint8_t *buf)
663 663
         digest_pos += buf[i];
664 664
     digest_pos = (digest_pos % 728) + 12;
665 665
 
666
-    ret = rtmp_calc_digest(buf, RTMP_HANDSHAKE_PACKET_SIZE, digest_pos,
667
-                           rtmp_player_key, PLAYER_KEY_OPEN_PART_LEN,
668
-                           buf + digest_pos);
666
+    ret = ff_rtmp_calc_digest(buf, RTMP_HANDSHAKE_PACKET_SIZE, digest_pos,
667
+                              rtmp_player_key, PLAYER_KEY_OPEN_PART_LEN,
668
+                              buf + digest_pos);
669 669
     if (ret < 0)
670 670
         return ret;
671 671
 
... ...
@@ -689,9 +674,9 @@ static int rtmp_validate_digest(uint8_t *buf, int off)
689 689
         digest_pos += buf[i + off];
690 690
     digest_pos = (digest_pos % 728) + off + 4;
691 691
 
692
-    ret = rtmp_calc_digest(buf, RTMP_HANDSHAKE_PACKET_SIZE, digest_pos,
693
-                           rtmp_server_key, SERVER_KEY_OPEN_PART_LEN,
694
-                           digest);
692
+    ret = ff_rtmp_calc_digest(buf, RTMP_HANDSHAKE_PACKET_SIZE, digest_pos,
693
+                              rtmp_server_key, SERVER_KEY_OPEN_PART_LEN,
694
+                              digest);
695 695
     if (ret < 0)
696 696
         return ret;
697 697
 
... ...
@@ -771,13 +756,14 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt)
771 771
             }
772 772
         }
773 773
 
774
-        ret = rtmp_calc_digest(tosend + 1 + client_pos, 32, 0, rtmp_server_key,
775
-                               sizeof(rtmp_server_key), digest);
774
+        ret = ff_rtmp_calc_digest(tosend + 1 + client_pos, 32, 0,
775
+                                  rtmp_server_key, sizeof(rtmp_server_key),
776
+                                  digest);
776 777
         if (ret < 0)
777 778
             return ret;
778 779
 
779
-        ret = rtmp_calc_digest(clientdata, RTMP_HANDSHAKE_PACKET_SIZE - 32, 0,
780
-                               digest, 32, digest);
780
+        ret = ff_rtmp_calc_digest(clientdata, RTMP_HANDSHAKE_PACKET_SIZE - 32,
781
+                                  0, digest, 32, digest);
781 782
         if (ret < 0)
782 783
             return ret;
783 784
 
... ...
@@ -788,15 +774,15 @@ static int rtmp_handshake(URLContext *s, RTMPContext *rt)
788 788
 
789 789
         for (i = 0; i < RTMP_HANDSHAKE_PACKET_SIZE; i++)
790 790
             tosend[i] = av_lfg_get(&rnd) >> 24;
791
-        ret = rtmp_calc_digest(serverdata + 1 + server_pos, 32, 0,
792
-                               rtmp_player_key, sizeof(rtmp_player_key),
793
-                               digest);
791
+        ret = ff_rtmp_calc_digest(serverdata + 1 + server_pos, 32, 0,
792
+                                  rtmp_player_key, sizeof(rtmp_player_key),
793
+                                  digest);
794 794
         if (ret < 0)
795 795
             return ret;
796 796
 
797
-        ret = rtmp_calc_digest(tosend, RTMP_HANDSHAKE_PACKET_SIZE - 32, 0,
798
-                               digest, 32,
799
-                               tosend + RTMP_HANDSHAKE_PACKET_SIZE - 32);
797
+        ret = ff_rtmp_calc_digest(tosend, RTMP_HANDSHAKE_PACKET_SIZE - 32, 0,
798
+                                  digest, 32,
799
+                                  tosend + RTMP_HANDSHAKE_PACKET_SIZE - 32);
800 800
         if (ret < 0)
801 801
             return ret;
802 802