werift 0.22.1 → 0.22.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (244) hide show
  1. package/lib/common/src/binary.d.ts +8 -7
  2. package/lib/common/src/binary.js +5 -2
  3. package/lib/common/src/binary.js.map +1 -1
  4. package/lib/common/src/event.d.ts +1 -0
  5. package/lib/common/src/event.js +5 -0
  6. package/lib/common/src/event.js.map +1 -1
  7. package/lib/common/src/log.d.ts +1 -2
  8. package/lib/common/src/transport.d.ts +4 -1
  9. package/lib/common/src/transport.js +35 -14
  10. package/lib/common/src/transport.js.map +1 -1
  11. package/lib/dtls/src/cipher/create.d.ts +2 -1
  12. package/lib/dtls/src/cipher/create.js.map +1 -1
  13. package/lib/dtls/src/cipher/prf.d.ts +12 -12
  14. package/lib/dtls/src/cipher/suites/abstract.d.ts +2 -1
  15. package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
  16. package/lib/dtls/src/cipher/suites/aead.d.ts +3 -2
  17. package/lib/dtls/src/cipher/suites/aead.js +34 -41
  18. package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
  19. package/lib/dtls/src/context/cipher.d.ts +4 -4
  20. package/lib/dtls/src/context/cipher.js +25 -15
  21. package/lib/dtls/src/context/cipher.js.map +1 -1
  22. package/lib/dtls/src/context/srtp.d.ts +3 -3
  23. package/lib/dtls/src/context/srtp.js.map +1 -1
  24. package/lib/dtls/src/flight/client/flight5.js.map +1 -1
  25. package/lib/dtls/src/flight/server/flight2.js.map +1 -1
  26. package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -1
  27. package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +2 -2
  28. package/lib/dtls/src/handshake/extensions/signature.d.ts +2 -2
  29. package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -1
  30. package/lib/dtls/src/handshake/extensions/useSrtp.js +4 -7
  31. package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
  32. package/lib/dtls/src/handshake/message/alert.d.ts +1 -1
  33. package/lib/dtls/src/handshake/message/certificate.d.ts +1 -1
  34. package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +1 -1
  35. package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +1 -1
  36. package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -1
  37. package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -1
  38. package/lib/dtls/src/handshake/message/finished.d.ts +1 -1
  39. package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +1 -1
  40. package/lib/dtls/src/handshake/message/server/hello.d.ts +1 -1
  41. package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -1
  42. package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -1
  43. package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +1 -1
  44. package/lib/dtls/src/handshake/random.d.ts +3 -3
  45. package/lib/dtls/src/record/message/fragment.d.ts +1 -1
  46. package/lib/dtls/src/record/message/header.d.ts +2 -19
  47. package/lib/dtls/src/record/message/header.js +1 -60
  48. package/lib/dtls/src/record/message/header.js.map +1 -1
  49. package/lib/dtls/src/record/message/plaintext.d.ts +6 -27
  50. package/lib/dtls/src/record/message/plaintext.js +34 -16
  51. package/lib/dtls/src/record/message/plaintext.js.map +1 -1
  52. package/lib/dtls/src/socket.d.ts +4 -4
  53. package/lib/dtls/src/socket.js.map +1 -1
  54. package/lib/dtls/src/util/binary.d.ts +1 -1
  55. package/lib/ice/src/candidate.js +1 -5
  56. package/lib/ice/src/candidate.js.map +1 -1
  57. package/lib/ice/src/helper.d.ts +1 -1
  58. package/lib/ice/src/ice.d.ts +4 -3
  59. package/lib/ice/src/ice.js +93 -72
  60. package/lib/ice/src/ice.js.map +1 -1
  61. package/lib/ice/src/iceBase.d.ts +21 -2
  62. package/lib/ice/src/iceBase.js +47 -1
  63. package/lib/ice/src/iceBase.js.map +1 -1
  64. package/lib/ice/src/stun/attributes.d.ts +2 -2
  65. package/lib/ice/src/stun/attributes.js +48 -29
  66. package/lib/ice/src/stun/attributes.js.map +1 -1
  67. package/lib/ice/src/stun/message.d.ts +2 -2
  68. package/lib/ice/src/stun/message.js +22 -23
  69. package/lib/ice/src/stun/message.js.map +1 -1
  70. package/lib/ice/src/stun/protocol.d.ts +2 -2
  71. package/lib/ice/src/stun/protocol.js +6 -0
  72. package/lib/ice/src/stun/protocol.js.map +1 -1
  73. package/lib/ice/src/turn/protocol.d.ts +2 -2
  74. package/lib/ice/src/turn/protocol.js +3 -0
  75. package/lib/ice/src/turn/protocol.js.map +1 -1
  76. package/lib/index.mjs +2707 -1883
  77. package/lib/nonstandard/index.mjs +737 -698
  78. package/lib/rtp/src/codec/av1.d.ts +2 -2
  79. package/lib/rtp/src/codec/opus.d.ts +1 -1
  80. package/lib/rtp/src/extra/container/mp4/container.js +18 -8
  81. package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
  82. package/lib/rtp/src/extra/container/mp4/h264.d.ts +2 -2
  83. package/lib/rtp/src/extra/container/mp4/sps-parser.d.ts +1 -1
  84. package/lib/rtp/src/extra/container/ogg/parser.d.ts +1 -1
  85. package/lib/rtp/src/extra/container/webm/container.d.ts +9 -9
  86. package/lib/rtp/src/extra/container/webm/container.js +24 -12
  87. package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
  88. package/lib/rtp/src/extra/container/webm/ebml/ebml.d.ts +35 -1
  89. package/lib/rtp/src/extra/container/webm/ebml/ebml.js +75 -1
  90. package/lib/rtp/src/extra/container/webm/ebml/ebml.js.map +1 -1
  91. package/lib/rtp/src/extra/container/webm/ebml/id.d.ts +222 -222
  92. package/lib/rtp/src/extra/container/webm/index.d.ts +1 -0
  93. package/lib/rtp/src/extra/container/webm/index.js +1 -0
  94. package/lib/rtp/src/extra/container/webm/index.js.map +1 -1
  95. package/lib/rtp/src/extra/container/webm/util.d.ts +8 -0
  96. package/lib/rtp/src/extra/container/webm/util.js +100 -0
  97. package/lib/rtp/src/extra/container/webm/util.js.map +1 -0
  98. package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
  99. package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +6 -1
  100. package/lib/rtp/src/extra/processor/dtx.d.ts +1 -1
  101. package/lib/rtp/src/extra/processor/dtx.js +1 -1
  102. package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
  103. package/lib/rtp/src/extra/processor/dtxCallback.d.ts +1 -1
  104. package/lib/rtp/src/extra/processor/interface.d.ts +1 -1
  105. package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
  106. package/lib/rtp/src/extra/processor/lipsync.js +1 -1
  107. package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
  108. package/lib/rtp/src/extra/processor/mp4.js +3 -0
  109. package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
  110. package/lib/rtp/src/extra/processor/mute.d.ts +1 -1
  111. package/lib/rtp/src/extra/processor/mute.js +1 -1
  112. package/lib/rtp/src/extra/processor/mute.js.map +1 -1
  113. package/lib/rtp/src/extra/processor/nackHandlerCallback.d.ts +1 -1
  114. package/lib/rtp/src/extra/processor/ntpTime.d.ts +1 -1
  115. package/lib/rtp/src/extra/processor/ntpTime.js +1 -1
  116. package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
  117. package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
  118. package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
  119. package/lib/rtp/src/extra/processor/webm.d.ts +3 -3
  120. package/lib/rtp/src/extra/processor/webm.js.map +1 -1
  121. package/lib/rtp/src/extra/processor/webmStream.d.ts +2 -2
  122. package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
  123. package/lib/rtp/src/helper.d.ts +1 -1
  124. package/lib/rtp/src/rtcp/header.d.ts +2 -1
  125. package/lib/rtp/src/rtcp/header.js +10 -0
  126. package/lib/rtp/src/rtcp/header.js.map +1 -1
  127. package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +1 -1
  128. package/lib/rtp/src/rtcp/psfb/index.d.ts +2 -2
  129. package/lib/rtp/src/rtcp/psfb/index.js +2 -2
  130. package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
  131. package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +1 -1
  132. package/lib/rtp/src/rtcp/psfb/remb.d.ts +1 -1
  133. package/lib/rtp/src/rtcp/rr.d.ts +2 -2
  134. package/lib/rtp/src/rtcp/rr.js +2 -2
  135. package/lib/rtp/src/rtcp/rr.js.map +1 -1
  136. package/lib/rtp/src/rtcp/rtcp.d.ts +0 -1
  137. package/lib/rtp/src/rtcp/rtcp.js +0 -10
  138. package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
  139. package/lib/rtp/src/rtcp/rtpfb/const.d.ts +1 -0
  140. package/lib/rtp/src/rtcp/rtpfb/const.js +5 -0
  141. package/lib/rtp/src/rtcp/rtpfb/const.js.map +1 -0
  142. package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -1
  143. package/lib/rtp/src/rtcp/rtpfb/index.js +2 -1
  144. package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
  145. package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +1 -1
  146. package/lib/rtp/src/rtcp/rtpfb/nack.js +2 -2
  147. package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
  148. package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +4 -4
  149. package/lib/rtp/src/rtcp/sdes.d.ts +4 -4
  150. package/lib/rtp/src/rtcp/sdes.js +2 -2
  151. package/lib/rtp/src/rtcp/sdes.js.map +1 -1
  152. package/lib/rtp/src/rtcp/sr.d.ts +2 -2
  153. package/lib/rtp/src/rtcp/sr.js +2 -2
  154. package/lib/rtp/src/rtcp/sr.js.map +1 -1
  155. package/lib/rtp/src/rtp/headerExtension.d.ts +6 -6
  156. package/lib/rtp/src/rtp/red/packet.d.ts +2 -2
  157. package/lib/rtp/src/rtp/rtp.d.ts +2 -2
  158. package/lib/rtp/src/srtp/cipher/ctr.d.ts +4 -4
  159. package/lib/rtp/src/srtp/cipher/gcm.d.ts +4 -4
  160. package/lib/rtp/src/srtp/const.d.ts +3 -3
  161. package/lib/rtp/src/srtp/const.js.map +1 -1
  162. package/lib/rtp/src/srtp/context/context.d.ts +10 -10
  163. package/lib/rtp/src/srtp/context/context.js +10 -4
  164. package/lib/rtp/src/srtp/context/context.js.map +1 -1
  165. package/lib/rtp/src/srtp/context/srtcp.d.ts +3 -3
  166. package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
  167. package/lib/rtp/src/srtp/context/srtp.d.ts +3 -3
  168. package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
  169. package/lib/rtp/src/srtp/srtcp.d.ts +2 -2
  170. package/lib/rtp/src/srtp/srtp.d.ts +2 -2
  171. package/lib/sctp/src/chunk.d.ts +12 -12
  172. package/lib/sctp/src/chunk.js +87 -66
  173. package/lib/sctp/src/chunk.js.map +1 -1
  174. package/lib/sctp/src/param.d.ts +3 -3
  175. package/lib/sctp/src/param.js +4 -5
  176. package/lib/sctp/src/param.js.map +1 -1
  177. package/lib/sctp/src/sctp.d.ts +3 -1
  178. package/lib/sctp/src/sctp.js +58 -15
  179. package/lib/sctp/src/sctp.js.map +1 -1
  180. package/lib/webrtc/src/dataChannel.d.ts +15 -4
  181. package/lib/webrtc/src/dataChannel.js +42 -7
  182. package/lib/webrtc/src/dataChannel.js.map +1 -1
  183. package/lib/webrtc/src/index.d.ts +1 -0
  184. package/lib/webrtc/src/index.js +1 -0
  185. package/lib/webrtc/src/index.js.map +1 -1
  186. package/lib/webrtc/src/media/index.d.ts +2 -0
  187. package/lib/webrtc/src/media/index.js +2 -0
  188. package/lib/webrtc/src/media/index.js.map +1 -1
  189. package/lib/webrtc/src/media/parameters.d.ts +2 -2
  190. package/lib/webrtc/src/media/parameters.js.map +1 -1
  191. package/lib/webrtc/src/media/receiver/nack.js +3 -7
  192. package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
  193. package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +2 -2
  194. package/lib/webrtc/src/media/receiver/receiverTwcc.js +1 -1
  195. package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
  196. package/lib/webrtc/src/media/router.js +2 -1
  197. package/lib/webrtc/src/media/router.js.map +1 -1
  198. package/lib/webrtc/src/media/rtpReceiver.d.ts +3 -3
  199. package/lib/webrtc/src/media/rtpReceiver.js +53 -4
  200. package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
  201. package/lib/webrtc/src/media/rtpSender.d.ts +6 -0
  202. package/lib/webrtc/src/media/rtpSender.js +64 -26
  203. package/lib/webrtc/src/media/rtpSender.js.map +1 -1
  204. package/lib/webrtc/src/media/rtpTransceiver.d.ts +12 -9
  205. package/lib/webrtc/src/media/rtpTransceiver.js +30 -26
  206. package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
  207. package/lib/webrtc/src/media/stats.d.ts +279 -0
  208. package/lib/webrtc/src/media/stats.js +35 -1
  209. package/lib/webrtc/src/media/stats.js.map +1 -1
  210. package/lib/webrtc/src/media/track.js +3 -3
  211. package/lib/webrtc/src/media/track.js.map +1 -1
  212. package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
  213. package/lib/webrtc/src/nonstandard/userMedia.js +2 -2
  214. package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
  215. package/lib/webrtc/src/peerConnection.d.ts +35 -64
  216. package/lib/webrtc/src/peerConnection.js +337 -1034
  217. package/lib/webrtc/src/peerConnection.js.map +1 -1
  218. package/lib/webrtc/src/sctpManager.d.ts +27 -0
  219. package/lib/webrtc/src/sctpManager.js +147 -0
  220. package/lib/webrtc/src/sctpManager.js.map +1 -0
  221. package/lib/webrtc/src/sdp.d.ts +3 -2
  222. package/lib/webrtc/src/sdp.js +17 -7
  223. package/lib/webrtc/src/sdp.js.map +1 -1
  224. package/lib/webrtc/src/sdpManager.d.ts +78 -0
  225. package/lib/webrtc/src/sdpManager.js +391 -0
  226. package/lib/webrtc/src/sdpManager.js.map +1 -0
  227. package/lib/webrtc/src/secureTransportManager.d.ts +56 -0
  228. package/lib/webrtc/src/secureTransportManager.js +349 -0
  229. package/lib/webrtc/src/secureTransportManager.js.map +1 -0
  230. package/lib/webrtc/src/transceiverManager.d.ts +40 -0
  231. package/lib/webrtc/src/transceiverManager.js +355 -0
  232. package/lib/webrtc/src/transceiverManager.js.map +1 -0
  233. package/lib/webrtc/src/transport/dtls.d.ts +18 -6
  234. package/lib/webrtc/src/transport/dtls.js +128 -13
  235. package/lib/webrtc/src/transport/dtls.js.map +1 -1
  236. package/lib/webrtc/src/transport/ice.d.ts +24 -0
  237. package/lib/webrtc/src/transport/ice.js +88 -2
  238. package/lib/webrtc/src/transport/ice.js.map +1 -1
  239. package/lib/webrtc/src/transport/sctp.js +13 -26
  240. package/lib/webrtc/src/transport/sctp.js.map +1 -1
  241. package/lib/webrtc/src/utils.d.ts +9 -4
  242. package/lib/webrtc/src/utils.js +34 -13
  243. package/lib/webrtc/src/utils.js.map +1 -1
  244. package/package.json +12 -26
@@ -1,33 +1,33 @@
1
- import { type Hmac } from "crypto";
1
+ import { createHmac } from "crypto";
2
2
  import type { CipherAesBase } from "../cipher";
3
- import { type Profile } from "../const";
3
+ import { type SrtpProfile } from "../const";
4
4
  export declare class Context {
5
5
  masterKey: Buffer;
6
6
  masterSalt: Buffer;
7
- profile: Profile;
7
+ profile: SrtpProfile;
8
8
  srtpSSRCStates: {
9
9
  [ssrc: number]: SrtpSsrcState;
10
10
  };
11
11
  srtpSessionKey: Buffer;
12
12
  srtpSessionSalt: Buffer;
13
13
  srtpSessionAuthTag: Buffer;
14
- srtpSessionAuth: Hmac;
14
+ srtpSessionAuth: ReturnType<typeof createHmac>;
15
15
  srtcpSSRCStates: {
16
16
  [ssrc: number]: SrtcpSSRCState;
17
17
  };
18
18
  srtcpSessionKey: Buffer;
19
19
  srtcpSessionSalt: Buffer;
20
20
  srtcpSessionAuthTag: Buffer;
21
- srtcpSessionAuth: Hmac;
21
+ srtcpSessionAuth: ReturnType<typeof createHmac>;
22
22
  cipher: CipherAesBase;
23
- constructor(masterKey: Buffer, masterSalt: Buffer, profile: Profile);
24
- generateSessionKey(label: number): Buffer;
25
- generateSessionSalt(label: number): Buffer;
26
- generateSessionAuthTag(label: number): Buffer;
23
+ constructor(masterKey: Buffer, masterSalt: Buffer, profile: SrtpProfile);
24
+ generateSessionKey(label: number): Buffer<ArrayBufferLike>;
25
+ generateSessionSalt(label: number): Buffer<ArrayBufferLike>;
26
+ generateSessionAuthTag(label: number): Buffer<ArrayBuffer>;
27
27
  getSrtpSsrcState(ssrc: number): SrtpSsrcState;
28
28
  getSrtcpSsrcState(ssrc: number): SrtcpSSRCState;
29
29
  updateRolloverCount(sequenceNumber: number, s: SrtpSsrcState): void;
30
- generateSrtpAuthTag(buf: Buffer, roc: number): Buffer;
30
+ generateSrtpAuthTag(buf: Buffer, roc: number): Buffer<ArrayBuffer>;
31
31
  index(ssrc: number): number;
32
32
  setIndex(ssrc: number, index: number): void;
33
33
  }
@@ -155,7 +155,7 @@ class Context {
155
155
  sessionSalt = Buffer.concat([sessionSalt, Buffer.from([0x00, 0x00])]);
156
156
  const block = new aes_js_1.default.AES(this.masterKey);
157
157
  sessionSalt = Buffer.from(block.encrypt(sessionSalt));
158
- return sessionSalt.slice(0, 14);
158
+ return sessionSalt.subarray(0, 14);
159
159
  }
160
160
  generateSessionAuthTag(label) {
161
161
  const sessionAuthTag = Buffer.from(this.masterSalt);
@@ -171,12 +171,18 @@ class Context {
171
171
  for (let i = labelAndIndexOverKdr.length - 1, j = sessionAuthTag.length - 1; i >= 0; i--, j--) {
172
172
  sessionAuthTag[j] = sessionAuthTag[j] ^ labelAndIndexOverKdr[i];
173
173
  }
174
- let firstRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x00])]);
175
- let secondRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x01])]);
174
+ let firstRun = Buffer.concat([
175
+ sessionAuthTag,
176
+ Buffer.from([0x00, 0x00]),
177
+ ]);
178
+ let secondRun = Buffer.concat([
179
+ sessionAuthTag,
180
+ Buffer.from([0x00, 0x01]),
181
+ ]);
176
182
  const block = new aes_js_1.default.AES(this.masterKey);
177
183
  firstRun = Buffer.from(block.encrypt(firstRun));
178
184
  secondRun = Buffer.from(block.encrypt(secondRun));
179
- return Buffer.concat([firstRun, secondRun.slice(0, 4)]);
185
+ return Buffer.concat([firstRun, secondRun.subarray(0, 4)]);
180
186
  }
181
187
  getSrtpSsrcState(ssrc) {
182
188
  let s = this.srtpSSRCStates[ssrc];
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { type Hmac, createHmac } from \"crypto\";\nimport AES from \"aes-js\";\n\nimport type { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n type Profile,\n ProtectionProfileAeadAes128Gcm,\n ProtectionProfileAes128CmHmacSha1_80,\n} from \"../const\";\n\nexport class Context {\n srtpSSRCStates: { [ssrc: number]: SrtpSsrcState } = {};\n srtpSessionKey: Buffer;\n srtpSessionSalt: Buffer;\n srtpSessionAuthTag: Buffer;\n srtpSessionAuth: Hmac;\n srtcpSSRCStates: { [ssrc: number]: SrtcpSSRCState } = {};\n srtcpSessionKey: Buffer;\n srtcpSessionSalt: Buffer;\n srtcpSessionAuthTag: Buffer;\n srtcpSessionAuth: Hmac;\n\n cipher: CipherAesBase;\n\n constructor(\n public masterKey: Buffer,\n public masterSalt: Buffer,\n public profile: Profile,\n ) {\n {\n // aes-js plaintext require 16byte\n // so need to padding to 14 byte\n const diff = 14 - masterSalt.length;\n if (diff > 0) {\n this.masterSalt = Buffer.concat([masterSalt, Buffer.alloc(diff)]);\n }\n }\n\n this.srtpSessionKey = this.generateSessionKey(0);\n this.srtpSessionSalt = this.generateSessionSalt(2);\n this.srtpSessionAuthTag = this.generateSessionAuthTag(1);\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n\n this.srtcpSessionKey = this.generateSessionKey(3);\n this.srtcpSessionSalt = this.generateSessionSalt(5);\n this.srtcpSessionAuthTag = this.generateSessionAuthTag(4);\n this.srtcpSessionAuth = createHmac(\"sha1\", this.srtcpSessionAuthTag);\n\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n this.cipher = new CipherAesCtr(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n this.srtpSessionAuthTag,\n this.srtcpSessionAuthTag,\n );\n break;\n case ProtectionProfileAeadAes128Gcm:\n this.cipher = new CipherAesGcm(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n );\n break;\n }\n }\n\n generateSessionKey(label: number) {\n let sessionKey = Buffer.from(this.masterSalt);\n\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionKey.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionKey[j] = sessionKey[j] ^ labelAndIndexOverKdr[i];\n }\n\n sessionKey = Buffer.concat([sessionKey, Buffer.from([0x00, 0x00])]);\n const block = new AES.AES(this.masterKey);\n return Buffer.from(block.encrypt(sessionKey) as ArrayBuffer);\n }\n\n generateSessionSalt(label: number) {\n let sessionSalt = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionSalt.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionSalt[j] = sessionSalt[j] ^ labelAndIndexOverKdr[i];\n }\n sessionSalt = Buffer.concat([sessionSalt, Buffer.from([0x00, 0x00])]);\n const block = new AES.AES(this.masterKey);\n sessionSalt = Buffer.from(block.encrypt(sessionSalt) as ArrayBuffer);\n return sessionSalt.slice(0, 14);\n }\n\n generateSessionAuthTag(label: number) {\n const sessionAuthTag = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionAuthTag.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionAuthTag[j] = sessionAuthTag[j] ^ labelAndIndexOverKdr[i];\n }\n let firstRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x00])]);\n let secondRun = Buffer.concat([sessionAuthTag, Buffer.from([0x00, 0x01])]);\n const block = new AES.AES(this.masterKey);\n firstRun = Buffer.from(block.encrypt(firstRun) as ArrayBuffer);\n secondRun = Buffer.from(block.encrypt(secondRun) as ArrayBuffer);\n return Buffer.concat([firstRun, secondRun.slice(0, 4)]);\n }\n\n getSrtpSsrcState(ssrc: number) {\n let s = this.srtpSSRCStates[ssrc];\n if (s) return s;\n s = {\n ssrc,\n rolloverCounter: 0,\n lastSequenceNumber: 0,\n };\n this.srtpSSRCStates[ssrc] = s;\n return s;\n }\n\n getSrtcpSsrcState(ssrc: number) {\n let s = this.srtcpSSRCStates[ssrc];\n if (s) return s;\n s = {\n srtcpIndex: 0,\n ssrc,\n };\n this.srtcpSSRCStates[ssrc] = s;\n return s;\n }\n\n // 3.3.1. Packet Index Determination, and ROC, s_l Update\n // In particular, out-of-order RTP packets with\n // sequence numbers close to 2^16 or zero must be properly handled.\n updateRolloverCount(sequenceNumber: number, s: SrtpSsrcState) {\n if (!s.rolloverHasProcessed) {\n s.rolloverHasProcessed = true;\n } else if (sequenceNumber === 0) {\n if (s.lastSequenceNumber > MaxROCDisorder) {\n s.rolloverCounter++;\n }\n } else if (\n s.lastSequenceNumber < MaxROCDisorder &&\n sequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n // https://github.com/shinyoshiaki/werift-webrtc/issues/94\n if (s.rolloverCounter > 0) {\n s.rolloverCounter--;\n }\n } else if (\n sequenceNumber < MaxROCDisorder &&\n s.lastSequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n s.rolloverCounter++;\n }\n s.lastSequenceNumber = sequenceNumber;\n }\n\n generateSrtpAuthTag(buf: Buffer, roc: number) {\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n const rocRaw = Buffer.alloc(4);\n rocRaw.writeUInt32BE(roc);\n\n return this.srtpSessionAuth\n .update(buf)\n .update(rocRaw)\n .digest()\n .slice(0, 10);\n }\n\n index(ssrc: number) {\n const s = this.srtcpSSRCStates[ssrc];\n if (!s) {\n return 0;\n }\n return s.srtcpIndex;\n }\n\n setIndex(ssrc: number, index: number) {\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex = index % 0x7fffffff;\n }\n}\n\nexport interface SrtpSsrcState {\n ssrc: number;\n rolloverCounter: number;\n rolloverHasProcessed?: boolean;\n lastSequenceNumber: number;\n}\n\nexport type SrtcpSSRCState = {\n srtcpIndex: number;\n ssrc: number;\n};\n\nconst MaxROCDisorder = 100;\nconst MaxSequenceNumber = 65535;\n"]}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { createHmac } from \"crypto\";\nimport AES from \"aes-js\";\n\nimport type { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n ProtectionProfileAeadAes128Gcm,\n ProtectionProfileAes128CmHmacSha1_80,\n type SrtpProfile,\n} from \"../const\";\n\nexport class Context {\n srtpSSRCStates: { [ssrc: number]: SrtpSsrcState } = {};\n srtpSessionKey: Buffer;\n srtpSessionSalt: Buffer;\n srtpSessionAuthTag: Buffer;\n srtpSessionAuth: ReturnType<typeof createHmac>;\n srtcpSSRCStates: { [ssrc: number]: SrtcpSSRCState } = {};\n srtcpSessionKey: Buffer;\n srtcpSessionSalt: Buffer;\n srtcpSessionAuthTag: Buffer;\n srtcpSessionAuth: ReturnType<typeof createHmac>;\n\n cipher: CipherAesBase;\n\n constructor(\n public masterKey: Buffer,\n public masterSalt: Buffer,\n public profile: SrtpProfile,\n ) {\n {\n // aes-js plaintext require 16byte\n // so need to padding to 14 byte\n const diff = 14 - masterSalt.length;\n if (diff > 0) {\n this.masterSalt = Buffer.concat([masterSalt, Buffer.alloc(diff)]);\n }\n }\n\n this.srtpSessionKey = this.generateSessionKey(0);\n this.srtpSessionSalt = this.generateSessionSalt(2);\n this.srtpSessionAuthTag = this.generateSessionAuthTag(1);\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n\n this.srtcpSessionKey = this.generateSessionKey(3);\n this.srtcpSessionSalt = this.generateSessionSalt(5);\n this.srtcpSessionAuthTag = this.generateSessionAuthTag(4);\n this.srtcpSessionAuth = createHmac(\"sha1\", this.srtcpSessionAuthTag);\n\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n this.cipher = new CipherAesCtr(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n this.srtpSessionAuthTag,\n this.srtcpSessionAuthTag,\n );\n break;\n case ProtectionProfileAeadAes128Gcm:\n this.cipher = new CipherAesGcm(\n this.srtpSessionKey,\n this.srtpSessionSalt,\n this.srtcpSessionKey,\n this.srtcpSessionSalt,\n );\n break;\n }\n }\n\n generateSessionKey(label: number) {\n let sessionKey = Buffer.from(this.masterSalt);\n\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionKey.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionKey[j] = sessionKey[j] ^ labelAndIndexOverKdr[i];\n }\n\n sessionKey = Buffer.concat([sessionKey, Buffer.from([0x00, 0x00])]);\n const block = new AES.AES(this.masterKey);\n return Buffer.from(block.encrypt(sessionKey) as ArrayBuffer);\n }\n\n generateSessionSalt(label: number) {\n let sessionSalt: Buffer = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionSalt.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionSalt[j] = sessionSalt[j] ^ labelAndIndexOverKdr[i];\n }\n sessionSalt = Buffer.concat([sessionSalt, Buffer.from([0x00, 0x00])]);\n const block = new AES.AES(this.masterKey);\n sessionSalt = Buffer.from(block.encrypt(sessionSalt) as ArrayBuffer);\n return sessionSalt.subarray(0, 14);\n }\n\n generateSessionAuthTag(label: number) {\n const sessionAuthTag = Buffer.from(this.masterSalt);\n const labelAndIndexOverKdr = Buffer.from([\n label,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n 0x00,\n ]);\n for (\n let i = labelAndIndexOverKdr.length - 1, j = sessionAuthTag.length - 1;\n i >= 0;\n i--, j--\n ) {\n sessionAuthTag[j] = sessionAuthTag[j] ^ labelAndIndexOverKdr[i];\n }\n let firstRun: Buffer = Buffer.concat([\n sessionAuthTag,\n Buffer.from([0x00, 0x00]),\n ]);\n let secondRun: Buffer = Buffer.concat([\n sessionAuthTag,\n Buffer.from([0x00, 0x01]),\n ]);\n const block = new AES.AES(this.masterKey);\n firstRun = Buffer.from(block.encrypt(firstRun) as ArrayBuffer);\n secondRun = Buffer.from(block.encrypt(secondRun) as ArrayBuffer);\n return Buffer.concat([firstRun, secondRun.subarray(0, 4)]);\n }\n\n getSrtpSsrcState(ssrc: number) {\n let s = this.srtpSSRCStates[ssrc];\n if (s) return s;\n s = {\n ssrc,\n rolloverCounter: 0,\n lastSequenceNumber: 0,\n };\n this.srtpSSRCStates[ssrc] = s;\n return s;\n }\n\n getSrtcpSsrcState(ssrc: number) {\n let s = this.srtcpSSRCStates[ssrc];\n if (s) return s;\n s = {\n srtcpIndex: 0,\n ssrc,\n };\n this.srtcpSSRCStates[ssrc] = s;\n return s;\n }\n\n // 3.3.1. Packet Index Determination, and ROC, s_l Update\n // In particular, out-of-order RTP packets with\n // sequence numbers close to 2^16 or zero must be properly handled.\n updateRolloverCount(sequenceNumber: number, s: SrtpSsrcState) {\n if (!s.rolloverHasProcessed) {\n s.rolloverHasProcessed = true;\n } else if (sequenceNumber === 0) {\n if (s.lastSequenceNumber > MaxROCDisorder) {\n s.rolloverCounter++;\n }\n } else if (\n s.lastSequenceNumber < MaxROCDisorder &&\n sequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n // https://github.com/shinyoshiaki/werift-webrtc/issues/94\n if (s.rolloverCounter > 0) {\n s.rolloverCounter--;\n }\n } else if (\n sequenceNumber < MaxROCDisorder &&\n s.lastSequenceNumber > MaxSequenceNumber - MaxROCDisorder\n ) {\n s.rolloverCounter++;\n }\n s.lastSequenceNumber = sequenceNumber;\n }\n\n generateSrtpAuthTag(buf: Buffer, roc: number) {\n this.srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n const rocRaw = Buffer.alloc(4);\n rocRaw.writeUInt32BE(roc);\n\n return this.srtpSessionAuth\n .update(buf)\n .update(rocRaw)\n .digest()\n .slice(0, 10);\n }\n\n index(ssrc: number) {\n const s = this.srtcpSSRCStates[ssrc];\n if (!s) {\n return 0;\n }\n return s.srtcpIndex;\n }\n\n setIndex(ssrc: number, index: number) {\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex = index % 0x7fffffff;\n }\n}\n\nexport interface SrtpSsrcState {\n ssrc: number;\n rolloverCounter: number;\n rolloverHasProcessed?: boolean;\n lastSequenceNumber: number;\n}\n\nexport type SrtcpSSRCState = {\n srtcpIndex: number;\n ssrc: number;\n};\n\nconst MaxROCDisorder = 100;\nconst MaxSequenceNumber = 65535;\n"]}
@@ -1,8 +1,8 @@
1
1
  import type { RtcpHeader } from "../../rtcp/header";
2
- import type { Profile } from "../const";
2
+ import type { SrtpProfile } from "../const";
3
3
  import { Context } from "./context";
4
4
  export declare class SrtcpContext extends Context {
5
- constructor(masterKey: Buffer, masterSalt: Buffer, profile: Profile);
6
- encryptRTCP(rawRtcp: Buffer): Buffer;
5
+ constructor(masterKey: Buffer, masterSalt: Buffer, profile: SrtpProfile);
6
+ encryptRTCP(rawRtcp: Buffer): Buffer<ArrayBufferLike>;
7
7
  decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader];
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"srtcp.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/srtcp.ts"],"names":[],"mappings":";;;AAEA,uCAAoC;AAEpC,MAAa,YAAa,SAAQ,iBAAO;IACvC,YAAY,SAAiB,EAAE,UAAkB,EAAE,OAAgB;QACjE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC;YAClC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AApBD,oCAoBC;AAED,MAAM,aAAa,GAAG,UAAU,CAAC","sourcesContent":["import type { RtcpHeader } from \"../../rtcp/header\";\nimport type { Profile } from \"../const\";\nimport { Context } from \"./context\";\n\nexport class SrtcpContext extends Context {\n constructor(masterKey: Buffer, masterSalt: Buffer, profile: Profile) {\n super(masterKey, masterSalt, profile);\n }\n\n encryptRTCP(rawRtcp: Buffer) {\n const ssrc = rawRtcp.readUInt32BE(4);\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex++;\n if (s.srtcpIndex >> maxSRTCPIndex) {\n s.srtcpIndex = 0;\n }\n const enc = this.cipher.encryptRTCP(rawRtcp, s.srtcpIndex);\n return enc;\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n const dec = this.cipher.decryptRTCP(encrypted);\n return dec;\n }\n}\n\nconst maxSRTCPIndex = 0x7fffffff;\n"]}
1
+ {"version":3,"file":"srtcp.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/srtcp.ts"],"names":[],"mappings":";;;AAEA,uCAAoC;AAEpC,MAAa,YAAa,SAAQ,iBAAO;IACvC,YAAY,SAAiB,EAAE,UAAkB,EAAE,OAAoB;QACrE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,WAAW,CAAC,OAAe;QACzB,MAAM,IAAI,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC;QACvC,CAAC,CAAC,UAAU,EAAE,CAAC;QACf,IAAI,CAAC,CAAC,UAAU,IAAI,aAAa,EAAE,CAAC;YAClC,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC;QACnB,CAAC;QACD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,OAAO,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC;QAC3D,OAAO,GAAG,CAAC;IACb,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;QAC/C,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AApBD,oCAoBC;AAED,MAAM,aAAa,GAAG,UAAU,CAAC","sourcesContent":["import type { RtcpHeader } from \"../../rtcp/header\";\nimport type { SrtpProfile } from \"../const\";\nimport { Context } from \"./context\";\n\nexport class SrtcpContext extends Context {\n constructor(masterKey: Buffer, masterSalt: Buffer, profile: SrtpProfile) {\n super(masterKey, masterSalt, profile);\n }\n\n encryptRTCP(rawRtcp: Buffer) {\n const ssrc = rawRtcp.readUInt32BE(4);\n const s = this.getSrtcpSsrcState(ssrc);\n s.srtcpIndex++;\n if (s.srtcpIndex >> maxSRTCPIndex) {\n s.srtcpIndex = 0;\n }\n const enc = this.cipher.encryptRTCP(rawRtcp, s.srtcpIndex);\n return enc;\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n const dec = this.cipher.decryptRTCP(encrypted);\n return dec;\n }\n}\n\nconst maxSRTCPIndex = 0x7fffffff;\n"]}
@@ -1,8 +1,8 @@
1
1
  import { RtpHeader } from "../../rtp/rtp";
2
- import type { Profile } from "../const";
2
+ import type { SrtpProfile } from "../const";
3
3
  import { Context } from "./context";
4
4
  export declare class SrtpContext extends Context {
5
- constructor(masterKey: Buffer, masterSalt: Buffer, profile: Profile);
6
- encryptRtp(payload: Buffer, header: RtpHeader): Buffer;
5
+ constructor(masterKey: Buffer, masterSalt: Buffer, profile: SrtpProfile);
6
+ encryptRtp(payload: Buffer, header: RtpHeader): Buffer<ArrayBufferLike>;
7
7
  decryptRtp(cipherText: Buffer): [Buffer, RtpHeader];
8
8
  }
@@ -1 +1 @@
1
- {"version":3,"file":"srtp.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/srtp.ts"],"names":[],"mappings":";;;AAAA,uCAA0C;AAE1C,uCAAoC;AAEpC,MAAa,WAAY,SAAQ,iBAAO;IACtC,YAAY,SAAiB,EAAE,UAAkB,EAAE,OAAgB;QACjE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,MAAiB;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QACvE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,UAAU,CAAC,UAAkB;QAC3B,MAAM,MAAM,GAAG,eAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAtBD,kCAsBC","sourcesContent":["import { RtpHeader } from \"../../rtp/rtp\";\nimport type { Profile } from \"../const\";\nimport { Context } from \"./context\";\n\nexport class SrtpContext extends Context {\n constructor(masterKey: Buffer, masterSalt: Buffer, profile: Profile) {\n super(masterKey, masterSalt, profile);\n }\n\n encryptRtp(payload: Buffer, header: RtpHeader) {\n const s = this.getSrtpSsrcState(header.ssrc);\n this.updateRolloverCount(header.sequenceNumber, s);\n\n const enc = this.cipher.encryptRtp(header, payload, s.rolloverCounter);\n return enc;\n }\n\n decryptRtp(cipherText: Buffer): [Buffer, RtpHeader] {\n const header = RtpHeader.deSerialize(cipherText);\n\n const s = this.getSrtpSsrcState(header.ssrc);\n this.updateRolloverCount(header.sequenceNumber, s);\n\n const dec = this.cipher.decryptRtp(cipherText, s.rolloverCounter);\n return dec;\n }\n}\n"]}
1
+ {"version":3,"file":"srtp.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/srtp.ts"],"names":[],"mappings":";;;AAAA,uCAA0C;AAE1C,uCAAoC;AAEpC,MAAa,WAAY,SAAQ,iBAAO;IACtC,YAAY,SAAiB,EAAE,UAAkB,EAAE,OAAoB;QACrE,KAAK,CAAC,SAAS,EAAE,UAAU,EAAE,OAAO,CAAC,CAAC;IACxC,CAAC;IAED,UAAU,CAAC,OAAe,EAAE,MAAiB;QAC3C,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QACvE,OAAO,GAAG,CAAC;IACb,CAAC;IAED,UAAU,CAAC,UAAkB;QAC3B,MAAM,MAAM,GAAG,eAAS,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAEjD,MAAM,CAAC,GAAG,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,CAAC,mBAAmB,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;QAEnD,MAAM,GAAG,GAAG,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,UAAU,EAAE,CAAC,CAAC,eAAe,CAAC,CAAC;QAClE,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAtBD,kCAsBC","sourcesContent":["import { RtpHeader } from \"../../rtp/rtp\";\nimport type { SrtpProfile } from \"../const\";\nimport { Context } from \"./context\";\n\nexport class SrtpContext extends Context {\n constructor(masterKey: Buffer, masterSalt: Buffer, profile: SrtpProfile) {\n super(masterKey, masterSalt, profile);\n }\n\n encryptRtp(payload: Buffer, header: RtpHeader) {\n const s = this.getSrtpSsrcState(header.ssrc);\n this.updateRolloverCount(header.sequenceNumber, s);\n\n const enc = this.cipher.encryptRtp(header, payload, s.rolloverCounter);\n return enc;\n }\n\n decryptRtp(cipherText: Buffer): [Buffer, RtpHeader] {\n const header = RtpHeader.deSerialize(cipherText);\n\n const s = this.getSrtpSsrcState(header.ssrc);\n this.updateRolloverCount(header.sequenceNumber, s);\n\n const dec = this.cipher.decryptRtp(cipherText, s.rolloverCounter);\n return dec;\n }\n}\n"]}
@@ -3,6 +3,6 @@ import { type Config, Session } from "./session";
3
3
  export declare class SrtcpSession extends Session<SrtcpContext> {
4
4
  config: Config;
5
5
  constructor(config: Config);
6
- decrypt: (buf: Buffer) => Buffer;
7
- encrypt(rawRtcp: Buffer): Buffer;
6
+ decrypt: (buf: Buffer) => Buffer<ArrayBufferLike>;
7
+ encrypt(rawRtcp: Buffer): Buffer<ArrayBufferLike>;
8
8
  }
@@ -4,6 +4,6 @@ import { type Config, Session } from "./session";
4
4
  export declare class SrtpSession extends Session<SrtpContext> {
5
5
  config: Config;
6
6
  constructor(config: Config);
7
- decrypt: (buf: Buffer) => Buffer;
8
- encrypt(payload: Buffer, header: RtpHeader): Buffer;
7
+ decrypt: (buf: Buffer) => Buffer<ArrayBufferLike>;
8
+ encrypt(payload: Buffer, header: RtpHeader): Buffer<ArrayBufferLike>;
9
9
  }
@@ -6,7 +6,7 @@ export declare class Chunk {
6
6
  static type: number;
7
7
  constructor(flags?: number, _body?: Buffer | undefined);
8
8
  get type(): number;
9
- get bytes(): Buffer;
9
+ get bytes(): Buffer<ArrayBuffer>;
10
10
  }
11
11
  export declare class BaseInitChunk extends Chunk {
12
12
  flags: number;
@@ -17,7 +17,7 @@ export declare class BaseInitChunk extends Chunk {
17
17
  initialTsn: number;
18
18
  params: [number, Buffer][];
19
19
  constructor(flags?: number, body?: Buffer);
20
- get body(): Buffer;
20
+ get body(): Buffer<ArrayBuffer>;
21
21
  }
22
22
  export declare class InitChunk extends BaseInitChunk {
23
23
  static type: 1;
@@ -36,7 +36,7 @@ export declare class ForwardTsnChunk extends Chunk {
36
36
  static type: 192;
37
37
  streams: [number, number][];
38
38
  cumulativeTsn: number;
39
- constructor(flags: number, body: Buffer | undefined);
39
+ constructor(flags: number | undefined, body: Buffer | undefined);
40
40
  get type(): 192;
41
41
  set body(_: Buffer);
42
42
  get body(): Buffer;
@@ -59,8 +59,8 @@ export declare class DataChunk extends Chunk {
59
59
  expiry?: number;
60
60
  maxRetransmits?: number;
61
61
  sentTime?: number;
62
- constructor(flags: number, body: Buffer | undefined);
63
- get bytes(): Buffer;
62
+ constructor(flags: number | undefined, body: Buffer | undefined);
63
+ get bytes(): Buffer<ArrayBuffer>;
64
64
  }
65
65
  export declare class CookieEchoChunk extends Chunk {
66
66
  static type: 10;
@@ -74,7 +74,7 @@ export declare class BaseParamsChunk extends Chunk {
74
74
  flags: number;
75
75
  params: [number, Buffer][];
76
76
  constructor(flags?: number, body?: Buffer | undefined);
77
- get body(): Buffer;
77
+ get body(): Buffer<ArrayBuffer>;
78
78
  }
79
79
  export declare class AbortChunk extends BaseParamsChunk {
80
80
  static type: 6;
@@ -100,7 +100,7 @@ export declare class ErrorChunk extends BaseParamsChunk {
100
100
  get type(): 9;
101
101
  get descriptions(): {
102
102
  name: string | undefined;
103
- body: Buffer;
103
+ body: Buffer<ArrayBufferLike>;
104
104
  }[];
105
105
  }
106
106
  export declare class HeartbeatChunk extends BaseParamsChunk {
@@ -123,16 +123,16 @@ export declare class SackChunk extends Chunk {
123
123
  duplicates: number[];
124
124
  cumulativeTsn: number;
125
125
  advertisedRwnd: number;
126
- constructor(flags: number, body: Buffer | undefined);
127
- get bytes(): Buffer;
126
+ constructor(flags: number | undefined, body: Buffer | undefined);
127
+ get bytes(): Buffer<ArrayBuffer>;
128
128
  }
129
129
  export declare class ShutdownChunk extends Chunk {
130
130
  flags: number;
131
131
  static type: number;
132
132
  get type(): number;
133
133
  cumulativeTsn: number;
134
- constructor(flags: number, body: Buffer | undefined);
135
- get body(): Buffer;
134
+ constructor(flags: number | undefined, body: Buffer | undefined);
135
+ get body(): Buffer<ArrayBuffer>;
136
136
  }
137
137
  export declare class ShutdownAckChunk extends Chunk {
138
138
  static type: number;
@@ -147,4 +147,4 @@ export declare const CHUNK_BY_TYPE: {
147
147
  };
148
148
  export declare function decodeParams(body: Buffer): [number, Buffer][];
149
149
  export declare function parsePacket(data: Buffer): [number, number, number, Chunk[]];
150
- export declare function serializePacket(sourcePort: number, destinationPort: number, verificationTag: number, chunk: Chunk): Buffer;
150
+ export declare function serializePacket(sourcePort: number, destinationPort: number, verificationTag: number, chunk: Chunk): Buffer<ArrayBuffer>;
@@ -33,7 +33,6 @@ exports.CHUNK_BY_TYPE = exports.ShutdownCompleteChunk = exports.ShutdownAckChunk
33
33
  exports.decodeParams = decodeParams;
34
34
  exports.parsePacket = parsePacket;
35
35
  exports.serializePacket = serializePacket;
36
- const jspack_1 = require("@shinyoshiaki/jspack");
37
36
  const crc32c_js_1 = __importDefault(require("turbo-crc32/crc32c.js"));
38
37
  class Chunk {
39
38
  get body() {
@@ -62,8 +61,12 @@ class Chunk {
62
61
  get bytes() {
63
62
  if (!this.body)
64
63
  throw new Error();
64
+ const header = Buffer.alloc(4);
65
+ header.writeUInt8(this.type, 0);
66
+ header.writeUInt8(this.flags, 1);
67
+ header.writeUInt16BE(this.body.length + 4, 2);
65
68
  const data = Buffer.concat([
66
- Buffer.from(jspack_1.jspack.Pack("!BBH", [this.type, this.flags, this.body.length + 4])),
69
+ header,
67
70
  this.body,
68
71
  ...[...Array(padL(this.body.length))].map(() => Buffer.from("\x00")),
69
72
  ]);
@@ -123,13 +126,11 @@ class BaseInitChunk extends Chunk {
123
126
  value: void 0
124
127
  });
125
128
  if (body) {
126
- [
127
- this.initiateTag,
128
- this.advertisedRwnd,
129
- this.outboundStreams,
130
- this.inboundStreams,
131
- this.initialTsn,
132
- ] = jspack_1.jspack.Unpack("!LLHHL", body);
129
+ this.initiateTag = body.readUInt32BE(0);
130
+ this.advertisedRwnd = body.readUInt32BE(4);
131
+ this.outboundStreams = body.readUInt16BE(8);
132
+ this.inboundStreams = body.readUInt16BE(10);
133
+ this.initialTsn = body.readUInt32BE(12);
133
134
  this.params = decodeParams(body.slice(16));
134
135
  }
135
136
  else {
@@ -142,15 +143,13 @@ class BaseInitChunk extends Chunk {
142
143
  }
143
144
  }
144
145
  get body() {
145
- let body = Buffer.from(jspack_1.jspack.Pack("!LLHHL", [
146
- this.initiateTag,
147
- this.advertisedRwnd,
148
- this.outboundStreams,
149
- this.inboundStreams,
150
- this.initialTsn,
151
- ]));
152
- body = Buffer.concat([body, encodeParams(this.params)]);
153
- return body;
146
+ const body = Buffer.alloc(16);
147
+ body.writeUInt32BE(this.initiateTag, 0);
148
+ body.writeUInt32BE(this.advertisedRwnd, 4);
149
+ body.writeUInt16BE(this.outboundStreams, 8);
150
+ body.writeUInt16BE(this.inboundStreams, 10);
151
+ body.writeUInt32BE(this.initialTsn, 12);
152
+ return Buffer.concat([body, encodeParams(this.params)]);
154
153
  }
155
154
  }
156
155
  exports.BaseInitChunk = BaseInitChunk;
@@ -212,10 +211,10 @@ class ForwardTsnChunk extends Chunk {
212
211
  value: void 0
213
212
  });
214
213
  if (body) {
215
- this.cumulativeTsn = jspack_1.jspack.Unpack("!L", body)[0];
214
+ this.cumulativeTsn = body.readUInt32BE(0);
216
215
  let pos = 4;
217
216
  while (pos < body.length) {
218
- this.streams.push(jspack_1.jspack.Unpack("!HH", body.slice(pos)));
217
+ this.streams.push([body.readUInt16BE(pos), body.readUInt16BE(pos + 2)]);
219
218
  pos += 4;
220
219
  }
221
220
  }
@@ -228,10 +227,16 @@ class ForwardTsnChunk extends Chunk {
228
227
  }
229
228
  set body(_) { }
230
229
  get body() {
231
- const body = Buffer.from(jspack_1.jspack.Pack("!L", [this.cumulativeTsn]));
230
+ const body = Buffer.alloc(4);
231
+ body.writeUInt32BE(this.cumulativeTsn, 0);
232
232
  return Buffer.concat([
233
233
  body,
234
- ...this.streams.map(([id, seq]) => Buffer.from(jspack_1.jspack.Pack("!HH", [id, seq]))),
234
+ ...this.streams.map(([id, seq]) => {
235
+ const streamBuffer = Buffer.alloc(4);
236
+ streamBuffer.writeUInt16BE(id, 0);
237
+ streamBuffer.writeUInt16BE(seq, 2);
238
+ return streamBuffer;
239
+ }),
235
240
  ]);
236
241
  }
237
242
  }
@@ -339,25 +344,24 @@ class DataChunk extends Chunk {
339
344
  value: void 0
340
345
  });
341
346
  if (body) {
342
- [this.tsn, this.streamId, this.streamSeqNum, this.protocol] =
343
- jspack_1.jspack.Unpack("!LHHL", body);
347
+ this.tsn = body.readUInt32BE(0);
348
+ this.streamId = body.readUInt16BE(4);
349
+ this.streamSeqNum = body.readUInt16BE(6);
350
+ this.protocol = body.readUInt32BE(8);
344
351
  this.userData = body.slice(12);
345
352
  }
346
353
  }
347
354
  get bytes() {
348
355
  const length = 16 + this.userData.length;
349
- let data = Buffer.concat([
350
- Buffer.from(jspack_1.jspack.Pack("!BBHLHHL", [
351
- this.type,
352
- this.flags,
353
- length,
354
- this.tsn,
355
- this.streamId,
356
- this.streamSeqNum,
357
- this.protocol,
358
- ])),
359
- this.userData,
360
- ]);
356
+ const header = Buffer.alloc(16);
357
+ header.writeUInt8(this.type, 0);
358
+ header.writeUInt8(this.flags, 1);
359
+ header.writeUInt16BE(length, 2);
360
+ header.writeUInt32BE(this.tsn, 4);
361
+ header.writeUInt16BE(this.streamId, 8);
362
+ header.writeUInt16BE(this.streamSeqNum, 10);
363
+ header.writeUInt32BE(this.protocol, 12);
364
+ let data = Buffer.concat([header, this.userData]);
361
365
  if (length % 4) {
362
366
  data = Buffer.concat([
363
367
  data,
@@ -561,38 +565,47 @@ class SackChunk extends Chunk {
561
565
  value: 0
562
566
  });
563
567
  if (body) {
564
- const [cumulativeTsn, advertisedRwnd, nbGaps, nbDuplicates] = jspack_1.jspack.Unpack("!LLHH", body);
565
- this.cumulativeTsn = cumulativeTsn;
566
- this.advertisedRwnd = advertisedRwnd;
568
+ this.cumulativeTsn = body.readUInt32BE(0);
569
+ this.advertisedRwnd = body.readUInt32BE(4);
570
+ const nbGaps = body.readUInt16BE(8);
571
+ const nbDuplicates = body.readUInt16BE(10);
567
572
  let pos = 12;
568
573
  [...Array(nbGaps)].forEach(() => {
569
- this.gaps.push(jspack_1.jspack.Unpack("!HH", body.slice(pos)));
574
+ this.gaps.push([body.readUInt16BE(pos), body.readUInt16BE(pos + 2)]);
570
575
  pos += 4;
571
576
  });
572
577
  [...Array(nbDuplicates)].forEach(() => {
573
- this.duplicates.push(jspack_1.jspack.Unpack("!L", body.slice(pos))[0]);
578
+ this.duplicates.push(body.readUInt32BE(pos));
574
579
  pos += 4;
575
580
  });
576
581
  }
577
582
  }
578
583
  get bytes() {
579
584
  const length = 16 + 4 * (this.gaps.length + this.duplicates.length);
580
- let data = Buffer.from(jspack_1.jspack.Pack("!BBHLLHH", [
581
- this.type,
582
- this.flags,
583
- length,
584
- this.cumulativeTsn,
585
- this.advertisedRwnd,
586
- this.gaps.length,
587
- this.duplicates.length,
588
- ]));
589
- data = Buffer.concat([
590
- data,
591
- ...this.gaps.map((gap) => Buffer.from(jspack_1.jspack.Pack("!HH", gap))),
585
+ const header = Buffer.alloc(16);
586
+ header.writeUInt8(this.type, 0);
587
+ header.writeUInt8(this.flags, 1);
588
+ header.writeUInt16BE(length, 2);
589
+ header.writeUInt32BE(this.cumulativeTsn, 4);
590
+ header.writeUInt32BE(this.advertisedRwnd, 8);
591
+ header.writeUInt16BE(this.gaps.length, 12);
592
+ header.writeUInt16BE(this.duplicates.length, 14);
593
+ let data = Buffer.concat([
594
+ header,
595
+ ...this.gaps.map((gap) => {
596
+ const gapBuffer = Buffer.alloc(4);
597
+ gapBuffer.writeUInt16BE(gap[0], 0);
598
+ gapBuffer.writeUInt16BE(gap[1], 2);
599
+ return gapBuffer;
600
+ }),
592
601
  ]);
593
602
  data = Buffer.concat([
594
603
  data,
595
- ...this.duplicates.map((tsn) => Buffer.from(jspack_1.jspack.Pack("!L", [tsn]))),
604
+ ...this.duplicates.map((tsn) => {
605
+ const tsnBuffer = Buffer.alloc(4);
606
+ tsnBuffer.writeUInt32BE(tsn, 0);
607
+ return tsnBuffer;
608
+ }),
596
609
  ]);
597
610
  return data;
598
611
  }
@@ -623,11 +636,13 @@ class ShutdownChunk extends Chunk {
623
636
  value: 0
624
637
  });
625
638
  if (body) {
626
- this.cumulativeTsn = jspack_1.jspack.Unpack("!L", body)[0];
639
+ this.cumulativeTsn = body.readUInt32BE(0);
627
640
  }
628
641
  }
629
642
  get body() {
630
- return Buffer.from(jspack_1.jspack.Pack("!L", [this.cumulativeTsn]));
643
+ const body = Buffer.alloc(4);
644
+ body.writeUInt32BE(this.cumulativeTsn, 0);
645
+ return body;
631
646
  }
632
647
  }
633
648
  exports.ShutdownChunk = ShutdownChunk;
@@ -691,12 +706,10 @@ function encodeParams(params) {
691
706
  let padding = Buffer.from("");
692
707
  params.forEach(([type, value]) => {
693
708
  const length = value.length + 4;
694
- body = Buffer.concat([
695
- body,
696
- padding,
697
- Buffer.from(jspack_1.jspack.Pack("!HH", [type, length])),
698
- value,
699
- ]);
709
+ const paramHeader = Buffer.alloc(4);
710
+ paramHeader.writeUInt16BE(type, 0);
711
+ paramHeader.writeUInt16BE(length, 2);
712
+ body = Buffer.concat([body, padding, paramHeader, value]);
700
713
  padding = Buffer.concat([...Array(padL(length))].map(() => Buffer.from("\x00")));
701
714
  });
702
715
  return body;
@@ -705,7 +718,8 @@ function decodeParams(body) {
705
718
  const params = [];
706
719
  let pos = 0;
707
720
  while (pos <= body.length - 4) {
708
- const [type, length] = jspack_1.jspack.Unpack("!HH", body.slice(pos));
721
+ const type = body.readUInt16BE(pos);
722
+ const length = body.readUInt16BE(pos + 2);
709
723
  params.push([type, body.slice(pos + 4, pos + length)]);
710
724
  pos += length + padL(length);
711
725
  }
@@ -714,7 +728,9 @@ function decodeParams(body) {
714
728
  function parsePacket(data) {
715
729
  if (data.length < 12)
716
730
  throw new Error("SCTP packet length is less than 12 bytes");
717
- const [sourcePort, destinationPort, verificationTag] = jspack_1.jspack.Unpack("!HHL", data);
731
+ const sourcePort = data.readUInt16BE(0);
732
+ const destinationPort = data.readUInt16BE(2);
733
+ const verificationTag = data.readUInt32BE(4);
718
734
  const checkSum = data.readUInt32LE(8);
719
735
  const expect = (0, crc32c_js_1.default)(Buffer.concat([
720
736
  data.slice(0, 8),
@@ -726,7 +742,9 @@ function parsePacket(data) {
726
742
  const chunks = [];
727
743
  let pos = 12;
728
744
  while (pos + 4 <= data.length) {
729
- const [chunkType, chunkFlags, chunkLength] = jspack_1.jspack.Unpack("!BBH", data.slice(pos));
745
+ const chunkType = data.readUInt8(pos);
746
+ const chunkFlags = data.readUInt8(pos + 1);
747
+ const chunkLength = data.readUInt16BE(pos + 2);
730
748
  const chunkBody = data.slice(pos + 4, pos + chunkLength);
731
749
  const ChunkClass = exports.CHUNK_BY_TYPE[chunkType.toString()];
732
750
  if (ChunkClass) {
@@ -740,7 +758,10 @@ function parsePacket(data) {
740
758
  return [sourcePort, destinationPort, verificationTag, chunks];
741
759
  }
742
760
  function serializePacket(sourcePort, destinationPort, verificationTag, chunk) {
743
- const header = Buffer.from(jspack_1.jspack.Pack("!HHL", [sourcePort, destinationPort, verificationTag]));
761
+ const header = Buffer.alloc(8);
762
+ header.writeUInt16BE(sourcePort, 0);
763
+ header.writeUInt16BE(destinationPort, 2);
764
+ header.writeUInt32BE(verificationTag, 4);
744
765
  const body = chunk.bytes;
745
766
  const checksum = (0, crc32c_js_1.default)(Buffer.concat([header, Buffer.from("\x00\x00\x00\x00"), body]));
746
767
  const checkSumBuf = Buffer.alloc(4);