werift 0.22.1 → 0.22.2
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 +6 -6
- 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 +2 -1
- package/lib/common/src/transport.js +28 -14
- package/lib/common/src/transport.js.map +1 -1
- package/lib/dtls/src/cipher/prf.d.ts +12 -12
- package/lib/dtls/src/cipher/suites/aead.d.ts +3 -2
- package/lib/dtls/src/cipher/suites/aead.js +31 -38
- 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 +21 -10
- 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/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/helper.d.ts +1 -1
- package/lib/ice/src/ice.d.ts +4 -3
- package/lib/ice/src/ice.js +89 -68
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/iceBase.d.ts +20 -1
- package/lib/ice/src/iceBase.js +46 -0
- 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 +47 -27
- 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 +21 -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/turn/protocol.d.ts +2 -2
- package/lib/index.mjs +2252 -1474
- package/lib/nonstandard/index.mjs +308 -351
- 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 +7 -7
- package/lib/rtp/src/extra/container/webm/container.js +17 -7
- package/lib/rtp/src/extra/container/webm/container.js.map +1 -1
- package/lib/rtp/src/extra/container/webm/ebml/ebml.d.ts +1 -1
- package/lib/rtp/src/extra/container/webm/ebml/id.d.ts +222 -222
- 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/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/mp4.js +3 -0
- package/lib/rtp/src/extra/processor/mp4.js.map +1 -1
- package/lib/rtp/src/extra/processor/nackHandlerCallback.d.ts +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 +1 -1
- package/lib/rtp/src/helper.d.ts +1 -1
- package/lib/rtp/src/rtcp/header.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/fullIntraRequest.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/index.d.ts +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/rtcp.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/index.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +1 -1
- package/lib/rtp/src/rtcp/rtpfb/twcc.d.ts +4 -4
- package/lib/rtp/src/rtcp/sdes.d.ts +3 -3
- package/lib/rtp/src/rtcp/sr.d.ts +2 -2
- 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 +7 -7
- 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/sctp.d.ts +3 -1
- package/lib/sctp/src/sctp.js +36 -1
- 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 +1 -0
- package/lib/webrtc/src/media/index.js +1 -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/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 +51 -2
- 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 +78 -7
- 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 +45 -8
- 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/peerConnection.d.ts +34 -64
- package/lib/webrtc/src/peerConnection.js +319 -986
- 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 +345 -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 +119 -11
- 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 +86 -0
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.js +22 -7
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/lib/webrtc/src/utils.d.ts +3 -3
- package/lib/webrtc/src/utils.js.map +1 -1
- package/package.json +15 -21
|
@@ -8,7 +8,7 @@ export declare class RtcpPayloadSpecificFeedback {
|
|
|
8
8
|
readonly type = 206;
|
|
9
9
|
feedback: Feedback;
|
|
10
10
|
constructor(props?: Partial<RtcpPayloadSpecificFeedback>);
|
|
11
|
-
serialize(): Buffer
|
|
11
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
12
12
|
static deSerialize(data: Buffer, header: RtcpHeader): RtcpPayloadSpecificFeedback;
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
@@ -12,5 +12,5 @@ export declare class ReceiverEstimatedMaxBitrate {
|
|
|
12
12
|
ssrcFeedbacks: number[];
|
|
13
13
|
constructor(props?: Partial<ReceiverEstimatedMaxBitrate>);
|
|
14
14
|
static deSerialize(data: Buffer): ReceiverEstimatedMaxBitrate;
|
|
15
|
-
serialize(): Buffer
|
|
15
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
16
16
|
}
|
package/lib/rtp/src/rtcp/rr.d.ts
CHANGED
|
@@ -4,7 +4,7 @@ export declare class RtcpRrPacket {
|
|
|
4
4
|
static readonly type = 201;
|
|
5
5
|
readonly type = 201;
|
|
6
6
|
constructor(props?: Partial<RtcpRrPacket>);
|
|
7
|
-
serialize(): Buffer
|
|
7
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
8
8
|
static deSerialize(data: Buffer, count: number): RtcpRrPacket;
|
|
9
9
|
}
|
|
10
10
|
export declare class RtcpReceiverInfo {
|
|
@@ -27,6 +27,6 @@ export declare class RtcpReceiverInfo {
|
|
|
27
27
|
lsr: number;
|
|
28
28
|
dlsr: number;
|
|
29
29
|
};
|
|
30
|
-
serialize(): Buffer
|
|
30
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
31
31
|
static deSerialize(data: Buffer): RtcpReceiverInfo;
|
|
32
32
|
}
|
|
@@ -5,7 +5,7 @@ import { RtcpSourceDescriptionPacket } from "./sdes";
|
|
|
5
5
|
import { RtcpSrPacket } from "./sr";
|
|
6
6
|
export type RtcpPacket = RtcpRrPacket | RtcpSrPacket | RtcpPayloadSpecificFeedback | RtcpSourceDescriptionPacket | RtcpTransportLayerFeedback;
|
|
7
7
|
export declare class RtcpPacketConverter {
|
|
8
|
-
static serialize(type: number, count: number, payload: Buffer, length: number): Buffer
|
|
8
|
+
static serialize(type: number, count: number, payload: Buffer, length: number): Buffer<ArrayBuffer>;
|
|
9
9
|
static deSerialize(data: Buffer): RtcpPacket[];
|
|
10
10
|
}
|
|
11
11
|
export declare function isRtcp(buf: Buffer): boolean;
|
|
@@ -8,7 +8,7 @@ export declare class RtcpTransportLayerFeedback {
|
|
|
8
8
|
feedback: Feedback;
|
|
9
9
|
header: RtcpHeader;
|
|
10
10
|
constructor(props?: Partial<RtcpTransportLayerFeedback>);
|
|
11
|
-
serialize(): Buffer
|
|
11
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
12
12
|
static deSerialize(data: Buffer, header: RtcpHeader): RtcpTransportLayerFeedback;
|
|
13
13
|
}
|
|
14
14
|
export {};
|
|
@@ -15,7 +15,7 @@ export declare class TransportWideCC {
|
|
|
15
15
|
header: RtcpHeader;
|
|
16
16
|
constructor(props?: Partial<TransportWideCC>);
|
|
17
17
|
static deSerialize(data: Buffer, header: RtcpHeader): TransportWideCC;
|
|
18
|
-
serialize(): Buffer
|
|
18
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
19
19
|
get packetResults(): PacketResult[];
|
|
20
20
|
}
|
|
21
21
|
export declare class RunLengthChunk {
|
|
@@ -25,7 +25,7 @@ export declare class RunLengthChunk {
|
|
|
25
25
|
runLength: number;
|
|
26
26
|
constructor(props?: Partial<RunLengthChunk>);
|
|
27
27
|
static deSerialize(data: Buffer): RunLengthChunk;
|
|
28
|
-
serialize(): Buffer
|
|
28
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
29
29
|
results(currentSequenceNumber: number): PacketResult[];
|
|
30
30
|
}
|
|
31
31
|
export declare class StatusVectorChunk {
|
|
@@ -34,7 +34,7 @@ export declare class StatusVectorChunk {
|
|
|
34
34
|
symbolList: number[];
|
|
35
35
|
constructor(props?: Partial<StatusVectorChunk>);
|
|
36
36
|
static deSerialize(data: Buffer): StatusVectorChunk;
|
|
37
|
-
serialize(): Buffer
|
|
37
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
38
38
|
}
|
|
39
39
|
export declare class RecvDelta {
|
|
40
40
|
/**optional (If undefined, it will be set automatically.)*/
|
|
@@ -46,7 +46,7 @@ export declare class RecvDelta {
|
|
|
46
46
|
deSerialize(data: Buffer): void;
|
|
47
47
|
parsed: boolean;
|
|
48
48
|
parseDelta(): void;
|
|
49
|
-
serialize(): Buffer
|
|
49
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
50
50
|
}
|
|
51
51
|
export declare enum PacketChunk {
|
|
52
52
|
TypeTCCRunLengthChunk = 0,
|
|
@@ -5,7 +5,7 @@ export declare class RtcpSourceDescriptionPacket {
|
|
|
5
5
|
chunks: SourceDescriptionChunk[];
|
|
6
6
|
constructor(props: Partial<RtcpSourceDescriptionPacket>);
|
|
7
7
|
get length(): number;
|
|
8
|
-
serialize(): Buffer
|
|
8
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
9
9
|
static deSerialize(payload: Buffer, header: RtcpHeader): RtcpSourceDescriptionPacket;
|
|
10
10
|
}
|
|
11
11
|
export declare class SourceDescriptionChunk {
|
|
@@ -13,7 +13,7 @@ export declare class SourceDescriptionChunk {
|
|
|
13
13
|
items: SourceDescriptionItem[];
|
|
14
14
|
constructor(props?: Partial<SourceDescriptionChunk>);
|
|
15
15
|
get length(): number;
|
|
16
|
-
serialize(): Buffer
|
|
16
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
17
17
|
static deSerialize(data: Buffer): SourceDescriptionChunk;
|
|
18
18
|
}
|
|
19
19
|
export declare class SourceDescriptionItem {
|
|
@@ -21,6 +21,6 @@ export declare class SourceDescriptionItem {
|
|
|
21
21
|
text: string;
|
|
22
22
|
constructor(props: Partial<SourceDescriptionItem>);
|
|
23
23
|
get length(): number;
|
|
24
|
-
serialize(): Buffer
|
|
24
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
25
25
|
static deSerialize(data: Buffer): SourceDescriptionItem;
|
|
26
26
|
}
|
package/lib/rtp/src/rtcp/sr.d.ts
CHANGED
|
@@ -22,7 +22,7 @@ export declare class RtcpSrPacket {
|
|
|
22
22
|
dlsr: number;
|
|
23
23
|
}[];
|
|
24
24
|
};
|
|
25
|
-
serialize(): Buffer
|
|
25
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
26
26
|
static deSerialize(payload: Buffer, count: number): RtcpSrPacket;
|
|
27
27
|
}
|
|
28
28
|
export declare class RtcpSenderInfo {
|
|
@@ -35,7 +35,7 @@ export declare class RtcpSenderInfo {
|
|
|
35
35
|
ntpTimestamp: number;
|
|
36
36
|
rtpTimestamp: number;
|
|
37
37
|
};
|
|
38
|
-
serialize(): Buffer
|
|
38
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
39
39
|
static deSerialize(data: Buffer): RtcpSenderInfo;
|
|
40
40
|
}
|
|
41
41
|
export declare const ntpTime2Sec: (ntp: bigint) => number;
|
|
@@ -59,12 +59,12 @@ export interface Extensions {
|
|
|
59
59
|
export declare function rtpHeaderExtensionsParser(extensions: Extension[], extIdUriMap: {
|
|
60
60
|
[id: number]: string;
|
|
61
61
|
}): Extensions;
|
|
62
|
-
export declare function serializeSdesMid(id: string): Buffer
|
|
63
|
-
export declare function serializeSdesRTPStreamID(id: string): Buffer
|
|
64
|
-
export declare function serializeRepairedRtpStreamId(id: string): Buffer
|
|
65
|
-
export declare function serializeTransportWideCC(transportSequenceNumber: number): Buffer
|
|
66
|
-
export declare function serializeAbsSendTime(ntpTime: bigint): Buffer
|
|
67
|
-
export declare function serializeAudioLevelIndication(level: number): Buffer
|
|
62
|
+
export declare function serializeSdesMid(id: string): Buffer<ArrayBuffer>;
|
|
63
|
+
export declare function serializeSdesRTPStreamID(id: string): Buffer<ArrayBuffer>;
|
|
64
|
+
export declare function serializeRepairedRtpStreamId(id: string): Buffer<ArrayBuffer>;
|
|
65
|
+
export declare function serializeTransportWideCC(transportSequenceNumber: number): Buffer<ArrayBuffer>;
|
|
66
|
+
export declare function serializeAbsSendTime(ntpTime: bigint): Buffer<ArrayBuffer>;
|
|
67
|
+
export declare function serializeAudioLevelIndication(level: number): Buffer<ArrayBufferLike>;
|
|
68
68
|
export declare function deserializeString(buf: Buffer): string;
|
|
69
69
|
export declare function deserializeUint16BE(buf: Buffer): number;
|
|
70
70
|
export declare function deserializeAbsSendTime(buf: Buffer): any;
|
|
@@ -7,12 +7,12 @@ export declare class Red {
|
|
|
7
7
|
timestampOffset?: number;
|
|
8
8
|
}[];
|
|
9
9
|
static deSerialize(bufferOrArrayBuffer: Buffer | ArrayBuffer): Red;
|
|
10
|
-
serialize(): Buffer
|
|
10
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
11
11
|
}
|
|
12
12
|
export declare class RedHeader {
|
|
13
13
|
fields: RedHeaderField[];
|
|
14
14
|
static deSerialize(buf: Buffer): readonly [RedHeader, number];
|
|
15
|
-
serialize(): Buffer
|
|
15
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
16
16
|
}
|
|
17
17
|
interface RedHeaderField {
|
|
18
18
|
/**ヘッダーの最初のビットは、別のヘッダーブロックが続くかどうかを示す。 1の場合は、さらにヘッダーブロックが続き、0の場合は、これが最後のヘッダーブロックとなります。 */
|
package/lib/rtp/src/rtp/rtp.d.ts
CHANGED
|
@@ -29,7 +29,7 @@ export declare class RtpHeader {
|
|
|
29
29
|
constructor(props?: Partial<RtpHeader>);
|
|
30
30
|
static deSerialize(rawPacket: Buffer): RtpHeader;
|
|
31
31
|
get serializeSize(): number;
|
|
32
|
-
serialize(size: number): Buffer
|
|
32
|
+
serialize(size: number): Buffer<ArrayBuffer>;
|
|
33
33
|
}
|
|
34
34
|
export declare class RtpPacket {
|
|
35
35
|
header: RtpHeader;
|
|
@@ -37,7 +37,7 @@ export declare class RtpPacket {
|
|
|
37
37
|
constructor(header: RtpHeader, payload: Buffer);
|
|
38
38
|
get serializeSize(): number;
|
|
39
39
|
clone(): RtpPacket;
|
|
40
|
-
serialize(): Buffer
|
|
40
|
+
serialize(): Buffer<ArrayBuffer>;
|
|
41
41
|
static deSerialize(buf: Buffer): RtpPacket;
|
|
42
42
|
clear(): void;
|
|
43
43
|
}
|
|
@@ -6,11 +6,11 @@ export declare class CipherAesCtr extends CipherAesBase {
|
|
|
6
6
|
private srtcpSessionAuthTag;
|
|
7
7
|
readonly authTagLength = 10;
|
|
8
8
|
constructor(srtpSessionKey: Buffer, srtpSessionSalt: Buffer, srtcpSessionKey: Buffer, srtcpSessionSalt: Buffer, srtpSessionAuthTag: Buffer, srtcpSessionAuthTag: Buffer);
|
|
9
|
-
encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number): Buffer
|
|
9
|
+
encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number): Buffer<ArrayBuffer>;
|
|
10
10
|
decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader];
|
|
11
11
|
encryptRTCP(rtcpPacket: Buffer, srtcpIndex: number): Buffer;
|
|
12
12
|
decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader];
|
|
13
|
-
generateSrtcpAuthTag(buf: Buffer): Buffer
|
|
14
|
-
generateCounter(sequenceNumber: number, rolloverCounter: number, ssrc: number, sessionSalt: Buffer): Buffer
|
|
15
|
-
generateSrtpAuthTag(roc: number, ...buffers: Buffer[]): Buffer
|
|
13
|
+
generateSrtcpAuthTag(buf: Buffer): Buffer<ArrayBuffer>;
|
|
14
|
+
generateCounter(sequenceNumber: number, rolloverCounter: number, ssrc: number, sessionSalt: Buffer): Buffer<ArrayBuffer>;
|
|
15
|
+
generateSrtpAuthTag(roc: number, ...buffers: Buffer[]): Buffer<ArrayBufferLike>;
|
|
16
16
|
}
|
|
@@ -3,11 +3,11 @@ import { RtcpHeader } from "../../rtcp/header";
|
|
|
3
3
|
import { RtpHeader } from "../../rtp/rtp";
|
|
4
4
|
export declare class CipherAesGcm extends CipherAesBase {
|
|
5
5
|
readonly aeadAuthTagLen = 16;
|
|
6
|
-
readonly rtpIvWriter: (values: (number | bigint)[]) => Buffer
|
|
7
|
-
readonly rtcpIvWriter: (values: (number | bigint)[]) => Buffer
|
|
8
|
-
readonly aadWriter: (values: (number | bigint)[]) => Buffer
|
|
6
|
+
readonly rtpIvWriter: (values: (number | bigint)[]) => Buffer<ArrayBuffer>;
|
|
7
|
+
readonly rtcpIvWriter: (values: (number | bigint)[]) => Buffer<ArrayBuffer>;
|
|
8
|
+
readonly aadWriter: (values: (number | bigint)[]) => Buffer<ArrayBuffer>;
|
|
9
9
|
constructor(srtpSessionKey: Buffer, srtpSessionSalt: Buffer, srtcpSessionKey: Buffer, srtcpSessionSalt: Buffer);
|
|
10
|
-
encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number): Buffer
|
|
10
|
+
encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number): Buffer<ArrayBuffer>;
|
|
11
11
|
decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader];
|
|
12
12
|
encryptRTCP(rtcpPacket: Buffer, srtcpIndex: number): Buffer;
|
|
13
13
|
decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
export declare const ProtectionProfileAes128CmHmacSha1_80: 1;
|
|
2
2
|
export declare const ProtectionProfileAeadAes128Gcm: 7;
|
|
3
3
|
export declare const Profiles: readonly [1, 7];
|
|
4
|
-
export type
|
|
5
|
-
export declare const keyLength: (profile:
|
|
6
|
-
export declare const saltLength: (profile:
|
|
4
|
+
export type SrtpProfile = (typeof Profiles)[number];
|
|
5
|
+
export declare const keyLength: (profile: SrtpProfile) => number;
|
|
6
|
+
export declare const saltLength: (profile: SrtpProfile) => 12 | 14;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,oCAAoC,GAAG,MAAe,CAAC;AACvD,QAAA,8BAA8B,GAAG,MAAe,CAAC;AAEjD,QAAA,QAAQ,GAAG;IACtB,4CAAoC;IACpC,sCAA8B;CACtB,CAAC;AAIJ,MAAM,SAAS,GAAG,CAAC,
|
|
1
|
+
{"version":3,"file":"const.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/const.ts"],"names":[],"mappings":";;;AAAa,QAAA,oCAAoC,GAAG,MAAe,CAAC;AACvD,QAAA,8BAA8B,GAAG,MAAe,CAAC;AAEjD,QAAA,QAAQ,GAAG;IACtB,4CAAoC;IACpC,sCAA8B;CACtB,CAAC;AAIJ,MAAM,SAAS,GAAG,CAAC,OAAoB,EAAE,EAAE;IAChD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,4CAAoC,CAAC;QAC1C,KAAK,sCAA8B;YACjC,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AANW,QAAA,SAAS,aAMpB;AAEK,MAAM,UAAU,GAAG,CAAC,OAAoB,EAAE,EAAE;IACjD,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,4CAAoC;YACvC,OAAO,EAAE,CAAC;QACZ,KAAK,sCAA8B;YACjC,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC,CAAC;AAPW,QAAA,UAAU,cAOrB","sourcesContent":["export const ProtectionProfileAes128CmHmacSha1_80 = 0x0001 as const;\nexport const ProtectionProfileAeadAes128Gcm = 0x0007 as const;\n\nexport const Profiles = [\n ProtectionProfileAes128CmHmacSha1_80,\n ProtectionProfileAeadAes128Gcm,\n] as const;\n\nexport type SrtpProfile = (typeof Profiles)[number];\n\nexport const keyLength = (profile: SrtpProfile) => {\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n case ProtectionProfileAeadAes128Gcm:\n return 16;\n }\n};\n\nexport const saltLength = (profile: SrtpProfile) => {\n switch (profile) {\n case ProtectionProfileAes128CmHmacSha1_80:\n return 14;\n case ProtectionProfileAeadAes128Gcm:\n return 12;\n }\n};\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import { type Hmac } 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
|
};
|
|
@@ -20,14 +20,14 @@ export declare class Context {
|
|
|
20
20
|
srtcpSessionAuthTag: Buffer;
|
|
21
21
|
srtcpSessionAuth: Hmac;
|
|
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 { 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 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: 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: 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>;
|