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.
- package/lib/common/src/binary.d.ts +8 -7
- package/lib/common/src/binary.js +5 -2
- package/lib/common/src/binary.js.map +1 -1
- package/lib/common/src/event.d.ts +1 -0
- package/lib/common/src/event.js +5 -0
- package/lib/common/src/event.js.map +1 -1
- package/lib/common/src/log.d.ts +1 -2
- package/lib/common/src/transport.d.ts +4 -1
- package/lib/common/src/transport.js +35 -14
- package/lib/common/src/transport.js.map +1 -1
- package/lib/dtls/src/cipher/create.d.ts +2 -1
- package/lib/dtls/src/cipher/create.js.map +1 -1
- package/lib/dtls/src/cipher/prf.d.ts +12 -12
- package/lib/dtls/src/cipher/suites/abstract.d.ts +2 -1
- package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
- package/lib/dtls/src/cipher/suites/aead.d.ts +3 -2
- package/lib/dtls/src/cipher/suites/aead.js +34 -41
- package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
- package/lib/dtls/src/context/cipher.d.ts +4 -4
- package/lib/dtls/src/context/cipher.js +25 -15
- package/lib/dtls/src/context/cipher.js.map +1 -1
- package/lib/dtls/src/context/srtp.d.ts +3 -3
- package/lib/dtls/src/context/srtp.js.map +1 -1
- package/lib/dtls/src/flight/client/flight5.js.map +1 -1
- package/lib/dtls/src/flight/server/flight2.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/ellipticCurves.d.ts +1 -1
- package/lib/dtls/src/handshake/extensions/renegotiationIndication.d.ts +2 -2
- package/lib/dtls/src/handshake/extensions/signature.d.ts +2 -2
- package/lib/dtls/src/handshake/extensions/useSrtp.d.ts +1 -1
- package/lib/dtls/src/handshake/extensions/useSrtp.js +4 -7
- package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
- package/lib/dtls/src/handshake/message/alert.d.ts +1 -1
- package/lib/dtls/src/handshake/message/certificate.d.ts +1 -1
- package/lib/dtls/src/handshake/message/changeCipherSpec.d.ts +1 -1
- package/lib/dtls/src/handshake/message/client/certificateVerify.d.ts +1 -1
- package/lib/dtls/src/handshake/message/client/hello.d.ts +1 -1
- package/lib/dtls/src/handshake/message/client/keyExchange.d.ts +1 -1
- package/lib/dtls/src/handshake/message/finished.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/certificateRequest.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/hello.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/helloDone.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/helloVerifyRequest.d.ts +1 -1
- package/lib/dtls/src/handshake/message/server/keyExchange.d.ts +1 -1
- package/lib/dtls/src/handshake/random.d.ts +3 -3
- package/lib/dtls/src/record/message/fragment.d.ts +1 -1
- package/lib/dtls/src/record/message/header.d.ts +2 -19
- package/lib/dtls/src/record/message/header.js +1 -60
- package/lib/dtls/src/record/message/header.js.map +1 -1
- package/lib/dtls/src/record/message/plaintext.d.ts +6 -27
- package/lib/dtls/src/record/message/plaintext.js +34 -16
- package/lib/dtls/src/record/message/plaintext.js.map +1 -1
- package/lib/dtls/src/socket.d.ts +4 -4
- package/lib/dtls/src/socket.js.map +1 -1
- package/lib/dtls/src/util/binary.d.ts +1 -1
- package/lib/ice/src/candidate.js +1 -5
- package/lib/ice/src/candidate.js.map +1 -1
- package/lib/ice/src/helper.d.ts +1 -1
- package/lib/ice/src/ice.d.ts +4 -3
- package/lib/ice/src/ice.js +93 -72
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/iceBase.d.ts +21 -2
- package/lib/ice/src/iceBase.js +47 -1
- package/lib/ice/src/iceBase.js.map +1 -1
- package/lib/ice/src/stun/attributes.d.ts +2 -2
- package/lib/ice/src/stun/attributes.js +48 -29
- package/lib/ice/src/stun/attributes.js.map +1 -1
- package/lib/ice/src/stun/message.d.ts +2 -2
- package/lib/ice/src/stun/message.js +22 -23
- package/lib/ice/src/stun/message.js.map +1 -1
- package/lib/ice/src/stun/protocol.d.ts +2 -2
- package/lib/ice/src/stun/protocol.js +6 -0
- package/lib/ice/src/stun/protocol.js.map +1 -1
- package/lib/ice/src/turn/protocol.d.ts +2 -2
- package/lib/ice/src/turn/protocol.js +3 -0
- package/lib/ice/src/turn/protocol.js.map +1 -1
- package/lib/index.mjs +2707 -1883
- package/lib/nonstandard/index.mjs +737 -698
- package/lib/rtp/src/codec/av1.d.ts +2 -2
- package/lib/rtp/src/codec/opus.d.ts +1 -1
- package/lib/rtp/src/extra/container/mp4/container.js +18 -8
- package/lib/rtp/src/extra/container/mp4/container.js.map +1 -1
- package/lib/rtp/src/extra/container/mp4/h264.d.ts +2 -2
- package/lib/rtp/src/extra/container/mp4/sps-parser.d.ts +1 -1
- package/lib/rtp/src/extra/container/ogg/parser.d.ts +1 -1
- package/lib/rtp/src/extra/container/webm/container.d.ts +9 -9
- package/lib/rtp/src/extra/container/webm/container.js +24 -12
- package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/ebml/ebml.d.ts +35 -1
- package/lib/rtp/src/extra/container/webm/ebml/ebml.js +75 -1
- package/lib/rtp/src/extra/container/webm/ebml/ebml.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/ebml/id.d.ts +222 -222
- package/lib/rtp/src/extra/container/webm/index.d.ts +1 -0
- package/lib/rtp/src/extra/container/webm/index.js +1 -0
- package/lib/rtp/src/extra/container/webm/index.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/util.d.ts +8 -0
- package/lib/rtp/src/extra/container/webm/util.js +100 -0
- package/lib/rtp/src/extra/container/webm/util.js.map +1 -0
- package/lib/rtp/src/extra/processor/depacketizerCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/depacketizerTransformer.d.ts +6 -1
- package/lib/rtp/src/extra/processor/dtx.d.ts +1 -1
- package/lib/rtp/src/extra/processor/dtx.js +1 -1
- package/lib/rtp/src/extra/processor/dtx.js.map +1 -1
- package/lib/rtp/src/extra/processor/dtxCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/interface.d.ts +1 -1
- package/lib/rtp/src/extra/processor/jitterBufferCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/lipsync.js +1 -1
- package/lib/rtp/src/extra/processor/lipsync.js.map +1 -1
- package/lib/rtp/src/extra/processor/mp4.js +3 -0
- package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
- package/lib/rtp/src/extra/processor/mute.d.ts +1 -1
- package/lib/rtp/src/extra/processor/mute.js +1 -1
- package/lib/rtp/src/extra/processor/mute.js.map +1 -1
- package/lib/rtp/src/extra/processor/nackHandlerCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/ntpTime.d.ts +1 -1
- package/lib/rtp/src/extra/processor/ntpTime.js +1 -1
- package/lib/rtp/src/extra/processor/ntpTime.js.map +1 -1
- package/lib/rtp/src/extra/processor/ntpTimeCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/rtpTimeCallback.d.ts +1 -1
- package/lib/rtp/src/extra/processor/webm.d.ts +3 -3
- package/lib/rtp/src/extra/processor/webm.js.map +1 -1
- package/lib/rtp/src/extra/processor/webmStream.d.ts +2 -2
- package/lib/rtp/src/extra/processor/webmStream.js.map +1 -1
- package/lib/rtp/src/helper.d.ts +1 -1
- package/lib/rtp/src/rtcp/header.d.ts +2 -1
- package/lib/rtp/src/rtcp/header.js +10 -0
- package/lib/rtp/src/rtcp/header.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/index.d.ts +2 -2
- package/lib/rtp/src/rtcp/psfb/index.js +2 -2
- package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/pictureLossIndication.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/remb.d.ts +1 -1
- package/lib/rtp/src/rtcp/rr.d.ts +2 -2
- package/lib/rtp/src/rtcp/rr.js +2 -2
- package/lib/rtp/src/rtcp/rr.js.map +1 -1
- package/lib/rtp/src/rtcp/rtcp.d.ts +0 -1
- package/lib/rtp/src/rtcp/rtcp.js +0 -10
- package/lib/rtp/src/rtcp/rtcp.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/const.d.ts +1 -0
- package/lib/rtp/src/rtcp/rtpfb/const.js +5 -0
- package/lib/rtp/src/rtcp/rtpfb/const.js.map +1 -0
- package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/index.js +2 -1
- package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/nack.js +2 -2
- package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +4 -4
- package/lib/rtp/src/rtcp/sdes.d.ts +4 -4
- package/lib/rtp/src/rtcp/sdes.js +2 -2
- package/lib/rtp/src/rtcp/sdes.js.map +1 -1
- package/lib/rtp/src/rtcp/sr.d.ts +2 -2
- package/lib/rtp/src/rtcp/sr.js +2 -2
- package/lib/rtp/src/rtcp/sr.js.map +1 -1
- package/lib/rtp/src/rtp/headerExtension.d.ts +6 -6
- package/lib/rtp/src/rtp/red/packet.d.ts +2 -2
- package/lib/rtp/src/rtp/rtp.d.ts +2 -2
- package/lib/rtp/src/srtp/cipher/ctr.d.ts +4 -4
- package/lib/rtp/src/srtp/cipher/gcm.d.ts +4 -4
- package/lib/rtp/src/srtp/const.d.ts +3 -3
- package/lib/rtp/src/srtp/const.js.map +1 -1
- package/lib/rtp/src/srtp/context/context.d.ts +10 -10
- package/lib/rtp/src/srtp/context/context.js +10 -4
- package/lib/rtp/src/srtp/context/context.js.map +1 -1
- package/lib/rtp/src/srtp/context/srtcp.d.ts +3 -3
- package/lib/rtp/src/srtp/context/srtcp.js.map +1 -1
- package/lib/rtp/src/srtp/context/srtp.d.ts +3 -3
- package/lib/rtp/src/srtp/context/srtp.js.map +1 -1
- package/lib/rtp/src/srtp/srtcp.d.ts +2 -2
- package/lib/rtp/src/srtp/srtp.d.ts +2 -2
- package/lib/sctp/src/chunk.d.ts +12 -12
- package/lib/sctp/src/chunk.js +87 -66
- package/lib/sctp/src/chunk.js.map +1 -1
- package/lib/sctp/src/param.d.ts +3 -3
- package/lib/sctp/src/param.js +4 -5
- package/lib/sctp/src/param.js.map +1 -1
- package/lib/sctp/src/sctp.d.ts +3 -1
- package/lib/sctp/src/sctp.js +58 -15
- package/lib/sctp/src/sctp.js.map +1 -1
- package/lib/webrtc/src/dataChannel.d.ts +15 -4
- package/lib/webrtc/src/dataChannel.js +42 -7
- package/lib/webrtc/src/dataChannel.js.map +1 -1
- package/lib/webrtc/src/index.d.ts +1 -0
- package/lib/webrtc/src/index.js +1 -0
- package/lib/webrtc/src/index.js.map +1 -1
- package/lib/webrtc/src/media/index.d.ts +2 -0
- package/lib/webrtc/src/media/index.js +2 -0
- package/lib/webrtc/src/media/index.js.map +1 -1
- package/lib/webrtc/src/media/parameters.d.ts +2 -2
- package/lib/webrtc/src/media/parameters.js.map +1 -1
- package/lib/webrtc/src/media/receiver/nack.js +3 -7
- package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
- package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +2 -2
- package/lib/webrtc/src/media/receiver/receiverTwcc.js +1 -1
- package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
- package/lib/webrtc/src/media/router.js +2 -1
- package/lib/webrtc/src/media/router.js.map +1 -1
- package/lib/webrtc/src/media/rtpReceiver.d.ts +3 -3
- package/lib/webrtc/src/media/rtpReceiver.js +53 -4
- package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
- package/lib/webrtc/src/media/rtpSender.d.ts +6 -0
- package/lib/webrtc/src/media/rtpSender.js +64 -26
- package/lib/webrtc/src/media/rtpSender.js.map +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.d.ts +12 -9
- package/lib/webrtc/src/media/rtpTransceiver.js +30 -26
- package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
- package/lib/webrtc/src/media/stats.d.ts +279 -0
- package/lib/webrtc/src/media/stats.js +35 -1
- package/lib/webrtc/src/media/stats.js.map +1 -1
- package/lib/webrtc/src/media/track.js +3 -3
- package/lib/webrtc/src/media/track.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
- package/lib/webrtc/src/nonstandard/userMedia.js +2 -2
- package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
- package/lib/webrtc/src/peerConnection.d.ts +35 -64
- package/lib/webrtc/src/peerConnection.js +337 -1034
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/sctpManager.d.ts +27 -0
- package/lib/webrtc/src/sctpManager.js +147 -0
- package/lib/webrtc/src/sctpManager.js.map +1 -0
- package/lib/webrtc/src/sdp.d.ts +3 -2
- package/lib/webrtc/src/sdp.js +17 -7
- package/lib/webrtc/src/sdp.js.map +1 -1
- package/lib/webrtc/src/sdpManager.d.ts +78 -0
- package/lib/webrtc/src/sdpManager.js +391 -0
- package/lib/webrtc/src/sdpManager.js.map +1 -0
- package/lib/webrtc/src/secureTransportManager.d.ts +56 -0
- package/lib/webrtc/src/secureTransportManager.js +349 -0
- package/lib/webrtc/src/secureTransportManager.js.map +1 -0
- package/lib/webrtc/src/transceiverManager.d.ts +40 -0
- package/lib/webrtc/src/transceiverManager.js +355 -0
- package/lib/webrtc/src/transceiverManager.js.map +1 -0
- package/lib/webrtc/src/transport/dtls.d.ts +18 -6
- package/lib/webrtc/src/transport/dtls.js +128 -13
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.d.ts +24 -0
- package/lib/webrtc/src/transport/ice.js +88 -2
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.js +13 -26
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/lib/webrtc/src/utils.d.ts +9 -4
- package/lib/webrtc/src/utils.js +34 -13
- package/lib/webrtc/src/utils.js.map +1 -1
- package/package.json +12 -26
|
@@ -1,33 +1,33 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createHmac } from "crypto";
|
|
2
2
|
import type { CipherAesBase } from "../cipher";
|
|
3
|
-
import { type
|
|
3
|
+
import { type SrtpProfile } from "../const";
|
|
4
4
|
export declare class Context {
|
|
5
5
|
masterKey: Buffer;
|
|
6
6
|
masterSalt: Buffer;
|
|
7
|
-
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:
|
|
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:
|
|
21
|
+
srtcpSessionAuth: ReturnType<typeof createHmac>;
|
|
22
22
|
cipher: CipherAesBase;
|
|
23
|
-
constructor(masterKey: Buffer, masterSalt: Buffer, 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.
|
|
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([
|
|
175
|
-
|
|
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.
|
|
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 {
|
|
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:
|
|
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,
|
|
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 {
|
|
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:
|
|
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,
|
|
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
|
}
|
package/lib/sctp/src/chunk.d.ts
CHANGED
|
@@ -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>;
|
package/lib/sctp/src/chunk.js
CHANGED
|
@@ -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
|
-
|
|
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
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
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
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
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 =
|
|
214
|
+
this.cumulativeTsn = body.readUInt32BE(0);
|
|
216
215
|
let pos = 4;
|
|
217
216
|
while (pos < body.length) {
|
|
218
|
-
this.streams.push(
|
|
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.
|
|
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]) =>
|
|
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
|
-
|
|
343
|
-
|
|
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
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
|
|
356
|
-
|
|
357
|
-
|
|
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
|
-
|
|
565
|
-
this.
|
|
566
|
-
|
|
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(
|
|
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(
|
|
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
|
-
|
|
581
|
-
|
|
582
|
-
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
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) =>
|
|
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 =
|
|
639
|
+
this.cumulativeTsn = body.readUInt32BE(0);
|
|
627
640
|
}
|
|
628
641
|
}
|
|
629
642
|
get body() {
|
|
630
|
-
|
|
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
|
-
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
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
|
|
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
|
|
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
|
|
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.
|
|
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);
|