werift 0.17.6 → 0.18.0
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 +1 -0
- package/lib/common/src/binary.js +74 -21
- package/lib/common/src/binary.js.map +1 -1
- package/lib/common/src/log.js +18 -0
- package/lib/common/src/log.js.map +1 -1
- package/lib/common/src/network.d.ts +1 -1
- package/lib/common/src/network.js +1 -0
- package/lib/common/src/network.js.map +1 -1
- package/lib/common/src/promise.js +22 -7
- package/lib/common/src/promise.js.map +1 -1
- package/lib/common/src/type.d.ts +1 -1
- package/lib/dtls/src/cipher/const.d.ts +7 -7
- package/lib/dtls/src/cipher/key-exchange.js +24 -1
- package/lib/dtls/src/cipher/key-exchange.js.map +1 -1
- package/lib/dtls/src/cipher/suites/abstract.d.ts +2 -2
- package/lib/dtls/src/cipher/suites/abstract.js +36 -2
- package/lib/dtls/src/cipher/suites/abstract.js.map +1 -1
- package/lib/dtls/src/cipher/suites/aead.js +60 -6
- package/lib/dtls/src/cipher/suites/aead.js.map +1 -1
- package/lib/dtls/src/client.js +62 -51
- package/lib/dtls/src/client.js.map +1 -1
- package/lib/dtls/src/context/cipher.js +151 -59
- package/lib/dtls/src/context/cipher.js.map +1 -1
- package/lib/dtls/src/context/dtls.js +90 -14
- package/lib/dtls/src/context/dtls.js.map +1 -1
- package/lib/dtls/src/context/srtp.d.ts +1 -1
- package/lib/dtls/src/context/srtp.js +8 -0
- package/lib/dtls/src/context/srtp.js.map +1 -1
- package/lib/dtls/src/context/transport.js +14 -2
- package/lib/dtls/src/context/transport.js.map +1 -1
- package/lib/dtls/src/flight/client/flight1.js +6 -1
- package/lib/dtls/src/flight/client/flight1.js.map +1 -1
- package/lib/dtls/src/flight/client/flight5.js +12 -2
- package/lib/dtls/src/flight/client/flight5.js.map +1 -1
- package/lib/dtls/src/flight/flight.d.ts +1 -1
- package/lib/dtls/src/flight/flight.js +42 -7
- package/lib/dtls/src/flight/flight.js.map +1 -1
- package/lib/dtls/src/flight/server/flight2.js +4 -2
- package/lib/dtls/src/flight/server/flight2.js.map +1 -1
- package/lib/dtls/src/flight/server/flight4.js +12 -2
- package/lib/dtls/src/flight/server/flight4.js.map +1 -1
- package/lib/dtls/src/flight/server/flight6.js +6 -1
- package/lib/dtls/src/flight/server/flight6.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/ellipticCurves.js +27 -7
- package/lib/dtls/src/handshake/extensions/ellipticCurves.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js +6 -1
- package/lib/dtls/src/handshake/extensions/extendedMasterSecret.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/renegotiationIndication.js +27 -7
- package/lib/dtls/src/handshake/extensions/renegotiationIndication.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/signature.js +27 -7
- package/lib/dtls/src/handshake/extensions/signature.js.map +1 -1
- package/lib/dtls/src/handshake/extensions/useSrtp.js +39 -9
- package/lib/dtls/src/handshake/extensions/useSrtp.js.map +1 -1
- package/lib/dtls/src/handshake/message/alert.js +21 -6
- package/lib/dtls/src/handshake/message/alert.js.map +1 -1
- package/lib/dtls/src/handshake/message/certificate.js +26 -5
- package/lib/dtls/src/handshake/message/certificate.js.map +1 -1
- package/lib/dtls/src/handshake/message/changeCipherSpec.js +14 -4
- package/lib/dtls/src/handshake/message/changeCipherSpec.js.map +1 -1
- package/lib/dtls/src/handshake/message/client/certificateVerify.js +33 -7
- package/lib/dtls/src/handshake/message/client/certificateVerify.js.map +1 -1
- package/lib/dtls/src/handshake/message/client/hello.js +68 -18
- package/lib/dtls/src/handshake/message/client/hello.js.map +1 -1
- package/lib/dtls/src/handshake/message/client/keyExchange.js +26 -5
- package/lib/dtls/src/handshake/message/client/keyExchange.js.map +1 -1
- package/lib/dtls/src/handshake/message/finished.js +18 -2
- package/lib/dtls/src/handshake/message/finished.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/certificateRequest.js +40 -9
- package/lib/dtls/src/handshake/message/server/certificateRequest.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/hello.js +60 -14
- package/lib/dtls/src/handshake/message/server/hello.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/helloDone.js +18 -2
- package/lib/dtls/src/handshake/message/server/helloDone.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js +33 -7
- package/lib/dtls/src/handshake/message/server/helloVerifyRequest.js.map +1 -1
- package/lib/dtls/src/handshake/message/server/keyExchange.js +75 -19
- package/lib/dtls/src/handshake/message/server/keyExchange.js.map +1 -1
- package/lib/dtls/src/handshake/random.js +21 -6
- package/lib/dtls/src/handshake/random.js.map +1 -1
- package/lib/dtls/src/record/builder.d.ts +1 -1
- package/lib/dtls/src/record/message/fragment.js +49 -14
- package/lib/dtls/src/record/message/fragment.js.map +1 -1
- package/lib/dtls/src/record/message/header.js +84 -24
- package/lib/dtls/src/record/message/header.js.map +1 -1
- package/lib/dtls/src/record/message/plaintext.js +21 -6
- package/lib/dtls/src/record/message/plaintext.js.map +1 -1
- package/lib/dtls/src/server.js +59 -42
- package/lib/dtls/src/server.js.map +1 -1
- package/lib/dtls/src/socket.js +153 -64
- package/lib/dtls/src/socket.js.map +1 -1
- package/lib/dtls/src/transport.js +38 -11
- package/lib/dtls/src/transport.js.map +1 -1
- package/lib/dtls/src/typings/domain.d.ts +4 -4
- package/lib/ice/src/candidate.js +66 -11
- package/lib/ice/src/candidate.js.map +1 -1
- package/lib/ice/src/dns/lookup.js +12 -1
- package/lib/ice/src/dns/lookup.js.map +1 -1
- package/lib/ice/src/exceptions.js +27 -2
- package/lib/ice/src/exceptions.js.map +1 -1
- package/lib/ice/src/helper.d.ts +1 -1
- package/lib/ice/src/helper.js +12 -2
- package/lib/ice/src/helper.js.map +1 -1
- package/lib/ice/src/ice.d.ts +9 -3
- package/lib/ice/src/ice.js +407 -155
- package/lib/ice/src/ice.js.map +1 -1
- package/lib/ice/src/stun/attributes.d.ts +3 -3
- package/lib/ice/src/stun/attributes.js +6 -1
- package/lib/ice/src/stun/attributes.js.map +1 -1
- package/lib/ice/src/stun/message.d.ts +4 -0
- package/lib/ice/src/stun/message.js +24 -3
- package/lib/ice/src/stun/message.js.map +1 -1
- package/lib/ice/src/stun/protocol.js +64 -15
- package/lib/ice/src/stun/protocol.js.map +1 -1
- package/lib/ice/src/stun/transaction.js +99 -36
- package/lib/ice/src/stun/transaction.js.map +1 -1
- package/lib/ice/src/transport.js +57 -21
- package/lib/ice/src/transport.js.map +1 -1
- package/lib/ice/src/turn/protocol.js +176 -40
- package/lib/ice/src/turn/protocol.js.map +1 -1
- package/lib/ice/src/types/model.d.ts +1 -1
- package/lib/rtp/src/codec/av1.d.ts +1 -1
- package/lib/rtp/src/codec/av1.js +118 -30
- package/lib/rtp/src/codec/av1.js.map +1 -1
- package/lib/rtp/src/codec/base.js +8 -0
- package/lib/rtp/src/codec/base.js.map +1 -1
- package/lib/rtp/src/codec/h264.js +55 -0
- package/lib/rtp/src/codec/h264.js.map +1 -1
- package/lib/rtp/src/codec/index.d.ts +2 -0
- package/lib/rtp/src/codec/index.js +12 -2
- package/lib/rtp/src/codec/index.js.map +1 -1
- package/lib/rtp/src/codec/opus.js +8 -0
- package/lib/rtp/src/codec/opus.js.map +1 -1
- package/lib/rtp/src/codec/vp8.js +102 -3
- package/lib/rtp/src/codec/vp8.js.map +1 -1
- package/lib/rtp/src/codec/vp9.js +164 -7
- package/lib/rtp/src/codec/vp9.js.map +1 -1
- package/lib/rtp/src/container/ebml/ebml.js +30 -3
- package/lib/rtp/src/container/ebml/ebml.js.map +1 -1
- package/lib/rtp/src/container/webm.d.ts +1 -1
- package/lib/rtp/src/container/webm.js +44 -13
- package/lib/rtp/src/container/webm.js.map +1 -1
- package/lib/rtp/src/processor/depacketizer.d.ts +16 -8
- package/lib/rtp/src/processor/depacketizer.js +59 -22
- package/lib/rtp/src/processor/depacketizer.js.map +1 -1
- package/lib/rtp/src/processor/depacketizerCallback.js +24 -8
- package/lib/rtp/src/processor/depacketizerCallback.js.map +1 -1
- package/lib/rtp/src/processor/depacketizerTransformer.d.ts +2 -2
- package/lib/rtp/src/processor/depacketizerTransformer.js +6 -0
- package/lib/rtp/src/processor/depacketizerTransformer.js.map +1 -1
- package/lib/rtp/src/processor/index.d.ts +4 -2
- package/lib/rtp/src/processor/index.js +4 -2
- package/lib/rtp/src/processor/index.js.map +1 -1
- package/lib/rtp/src/processor/interface.d.ts +4 -0
- package/lib/rtp/src/processor/interface.js.map +1 -1
- package/lib/rtp/src/processor/jitterBuffer.d.ts +2 -1
- package/lib/rtp/src/processor/jitterBuffer.js +40 -8
- package/lib/rtp/src/processor/jitterBuffer.js.map +1 -1
- package/lib/rtp/src/processor/jitterBufferCallback.js +30 -9
- package/lib/rtp/src/processor/jitterBufferCallback.js.map +1 -1
- package/lib/rtp/src/processor/jitterBufferTransformer.js +12 -1
- package/lib/rtp/src/processor/jitterBufferTransformer.js.map +1 -1
- package/lib/rtp/src/processor/lipsync.d.ts +42 -0
- package/lib/rtp/src/processor/lipsync.js +178 -0
- package/lib/rtp/src/processor/lipsync.js.map +1 -0
- package/lib/rtp/src/processor/lipsyncCallback.d.ts +10 -0
- package/lib/rtp/src/processor/lipsyncCallback.js +59 -0
- package/lib/rtp/src/processor/lipsyncCallback.js.map +1 -0
- package/lib/rtp/src/processor/ntpTime.d.ts +24 -0
- package/lib/rtp/src/processor/ntpTime.js +91 -0
- package/lib/rtp/src/processor/ntpTime.js.map +1 -0
- package/lib/rtp/src/processor/ntpTimeCallback.d.ts +7 -0
- package/lib/rtp/src/processor/ntpTimeCallback.js +36 -0
- package/lib/rtp/src/processor/ntpTimeCallback.js.map +1 -0
- package/lib/rtp/src/processor/source/index.d.ts +1 -0
- package/lib/rtp/src/processor/source/index.js +1 -0
- package/lib/rtp/src/processor/source/index.js.map +1 -1
- package/lib/rtp/src/processor/source/rtcpCallback.d.ts +12 -0
- package/lib/rtp/src/processor/source/rtcpCallback.js +33 -0
- package/lib/rtp/src/processor/source/rtcpCallback.js.map +1 -0
- package/lib/rtp/src/processor/source/rtpCallback.js +28 -12
- package/lib/rtp/src/processor/source/rtpCallback.js.map +1 -1
- package/lib/rtp/src/processor/source/rtpStream.js +38 -10
- package/lib/rtp/src/processor/source/rtpStream.js.map +1 -1
- package/lib/rtp/src/processor/webm.d.ts +11 -4
- package/lib/rtp/src/processor/webm.js +169 -46
- package/lib/rtp/src/processor/webm.js.map +1 -1
- package/lib/rtp/src/processor/webmCallback.d.ts +5 -3
- package/lib/rtp/src/processor/webmCallback.js +52 -8
- package/lib/rtp/src/processor/webmCallback.js.map +1 -1
- package/lib/rtp/src/processor/webmStream.d.ts +2 -2
- package/lib/rtp/src/processor/webmStream.js +24 -0
- package/lib/rtp/src/processor/webmStream.js.map +1 -1
- package/lib/rtp/src/processor_old/base.d.ts +18 -0
- package/lib/rtp/src/processor_old/base.js +51 -0
- package/lib/rtp/src/processor_old/base.js.map +1 -0
- package/lib/rtp/src/processor_old/lipsync.d.ts +30 -0
- package/lib/rtp/src/processor_old/lipsync.js +119 -0
- package/lib/rtp/src/processor_old/lipsync.js.map +1 -0
- package/lib/rtp/src/rtcp/header.js +30 -5
- 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/fullIntraRequest.js +30 -3
- package/lib/rtp/src/rtcp/psfb/fullIntraRequest.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/index.d.ts +1 -1
- package/lib/rtp/src/rtcp/psfb/index.js +18 -2
- package/lib/rtp/src/rtcp/psfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js +30 -3
- package/lib/rtp/src/rtcp/psfb/pictureLossIndication.js.map +1 -1
- package/lib/rtp/src/rtcp/psfb/remb.js +66 -5
- package/lib/rtp/src/rtcp/psfb/remb.js.map +1 -1
- package/lib/rtp/src/rtcp/rr.js +68 -4
- package/lib/rtp/src/rtcp/rr.js.map +1 -1
- 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/index.js +24 -2
- package/lib/rtp/src/rtcp/rtpfb/index.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/nack.d.ts +5 -0
- package/lib/rtp/src/rtcp/rtpfb/nack.js +43 -3
- package/lib/rtp/src/rtcp/rtpfb/nack.js.map +1 -1
- package/lib/rtp/src/rtcp/rtpfb/twcc.js +154 -11
- package/lib/rtp/src/rtcp/rtpfb/twcc.js.map +1 -1
- package/lib/rtp/src/rtcp/sdes.js +42 -4
- package/lib/rtp/src/rtcp/sdes.js.map +1 -1
- package/lib/rtp/src/rtcp/sr.js +56 -5
- package/lib/rtp/src/rtcp/sr.js.map +1 -1
- package/lib/rtp/src/rtp/red/encoder.js +18 -3
- package/lib/rtp/src/rtp/red/encoder.js.map +1 -1
- package/lib/rtp/src/rtp/red/handler.js +12 -2
- package/lib/rtp/src/rtp/red/handler.js.map +1 -1
- package/lib/rtp/src/rtp/red/packet.js +18 -2
- package/lib/rtp/src/rtp/red/packet.js.map +1 -1
- package/lib/rtp/src/rtp/rtp.d.ts +3 -3
- package/lib/rtp/src/rtp/rtp.js +104 -17
- package/lib/rtp/src/rtp/rtp.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/ctr.js +26 -10
- package/lib/rtp/src/srtp/cipher/ctr.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/gcm.d.ts +3 -0
- package/lib/rtp/src/srtp/cipher/gcm.js +40 -20
- package/lib/rtp/src/srtp/cipher/gcm.js.map +1 -1
- package/lib/rtp/src/srtp/cipher/index.js +24 -4
- package/lib/rtp/src/srtp/cipher/index.js.map +1 -1
- package/lib/rtp/src/srtp/const.d.ts +1 -1
- package/lib/rtp/src/srtp/context/context.d.ts +1 -1
- package/lib/rtp/src/srtp/context/context.js +84 -5
- package/lib/rtp/src/srtp/context/context.js.map +1 -1
- package/lib/rtp/src/srtp/session.d.ts +2 -2
- package/lib/rtp/src/srtp/session.js +24 -1
- package/lib/rtp/src/srtp/session.js.map +1 -1
- package/lib/rtp/src/srtp/srtcp.js +15 -5
- package/lib/rtp/src/srtp/srtcp.js.map +1 -1
- package/lib/rtp/src/srtp/srtp.js +15 -5
- package/lib/rtp/src/srtp/srtp.js.map +1 -1
- package/lib/sctp/src/chunk.js +349 -69
- package/lib/sctp/src/chunk.js.map +1 -1
- package/lib/sctp/src/helper.d.ts +1 -1
- package/lib/sctp/src/param.d.ts +3 -3
- package/lib/sctp/src/param.js +66 -11
- package/lib/sctp/src/param.js.map +1 -1
- package/lib/sctp/src/sctp.d.ts +1 -1
- package/lib/sctp/src/sctp.js +479 -138
- package/lib/sctp/src/sctp.js.map +1 -1
- package/lib/sctp/src/transport.js +31 -10
- package/lib/sctp/src/transport.js.map +1 -1
- package/lib/webrtc/src/dataChannel.d.ts +1 -1
- package/lib/webrtc/src/dataChannel.js +145 -15
- package/lib/webrtc/src/dataChannel.js.map +1 -1
- package/lib/webrtc/src/helper.js +37 -12
- package/lib/webrtc/src/helper.js.map +1 -1
- package/lib/webrtc/src/media/parameters.d.ts +1 -1
- package/lib/webrtc/src/media/parameters.js +124 -3
- package/lib/webrtc/src/media/parameters.js.map +1 -1
- package/lib/webrtc/src/media/receiver/nack.d.ts +4 -4
- package/lib/webrtc/src/media/receiver/nack.js +85 -33
- package/lib/webrtc/src/media/receiver/nack.js.map +1 -1
- package/lib/webrtc/src/media/receiver/receiverTwcc.d.ts +1 -1
- package/lib/webrtc/src/media/receiver/receiverTwcc.js +42 -6
- package/lib/webrtc/src/media/receiver/receiverTwcc.js.map +1 -1
- package/lib/webrtc/src/media/receiver/statistics.js +61 -5
- package/lib/webrtc/src/media/receiver/statistics.js.map +1 -1
- package/lib/webrtc/src/media/router.d.ts +1 -1
- package/lib/webrtc/src/media/router.js +108 -83
- package/lib/webrtc/src/media/router.js.map +1 -1
- package/lib/webrtc/src/media/rtpReceiver.js +188 -33
- package/lib/webrtc/src/media/rtpReceiver.js.map +1 -1
- package/lib/webrtc/src/media/rtpSender.js +279 -42
- package/lib/webrtc/src/media/rtpSender.js.map +1 -1
- package/lib/webrtc/src/media/rtpTransceiver.d.ts +2 -2
- package/lib/webrtc/src/media/rtpTransceiver.js +102 -18
- package/lib/webrtc/src/media/rtpTransceiver.js.map +1 -1
- package/lib/webrtc/src/media/sender/cumulativeResult.js +36 -6
- package/lib/webrtc/src/media/sender/cumulativeResult.js.map +1 -1
- package/lib/webrtc/src/media/sender/senderBWE.js +57 -12
- package/lib/webrtc/src/media/sender/senderBWE.js.map +1 -1
- package/lib/webrtc/src/media/track.js +135 -24
- package/lib/webrtc/src/media/track.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/index.d.ts +7 -4
- package/lib/webrtc/src/nonstandard/recorder/index.js +50 -6
- package/lib/webrtc/src/nonstandard/recorder/index.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/index.js +12 -2
- package/lib/webrtc/src/nonstandard/recorder/writer/index.js.map +1 -1
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.d.ts +2 -2
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.js +39 -35
- package/lib/webrtc/src/nonstandard/recorder/writer/webm.js.map +1 -1
- package/lib/webrtc/src/nonstandard/userMedia.js +158 -56
- package/lib/webrtc/src/nonstandard/userMedia.js.map +1 -1
- package/lib/webrtc/src/peerConnection.d.ts +2 -2
- package/lib/webrtc/src/peerConnection.js +260 -58
- package/lib/webrtc/src/peerConnection.js.map +1 -1
- package/lib/webrtc/src/sdp.js +287 -24
- package/lib/webrtc/src/sdp.js.map +1 -1
- package/lib/webrtc/src/transport/dtls.d.ts +3 -3
- package/lib/webrtc/src/transport/dtls.js +185 -30
- package/lib/webrtc/src/transport/dtls.js.map +1 -1
- package/lib/webrtc/src/transport/ice.d.ts +2 -2
- package/lib/webrtc/src/transport/ice.js +193 -25
- package/lib/webrtc/src/transport/ice.js.map +1 -1
- package/lib/webrtc/src/transport/sctp.js +193 -101
- package/lib/webrtc/src/transport/sctp.js.map +1 -1
- package/lib/webrtc/src/types/domain.d.ts +3 -3
- package/lib/webrtc/src/types/util.d.ts +2 -2
- package/lib/webrtc/src/utils.js +12 -2
- package/lib/webrtc/src/utils.js.map +1 -1
- package/package.json +15 -15
- package/src/dataChannel.ts +3 -1
- package/src/media/receiver/nack.ts +23 -19
- package/src/media/rtpReceiver.ts +5 -0
- package/src/media/rtpSender.ts +22 -19
- package/src/nonstandard/recorder/index.ts +12 -4
- package/src/nonstandard/recorder/writer/webm.ts +42 -50
- package/src/transport/dtls.ts +7 -3
- package/src/transport/ice.ts +6 -3
- package/src/transport/sctp.ts +3 -1
- package/lib/rtp/src/processor/avBuffer.d.ts +0 -36
- package/lib/rtp/src/processor/avBuffer.js +0 -107
- package/lib/rtp/src/processor/avBuffer.js.map +0 -1
- package/lib/rtp/src/processor/avBufferCallback.d.ts +0 -10
- package/lib/rtp/src/processor/avBufferCallback.js +0 -27
- package/lib/rtp/src/processor/avBufferCallback.js.map +0 -1
|
@@ -2,16 +2,30 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CipherAesCtr = void 0;
|
|
4
4
|
const crypto_1 = require("crypto");
|
|
5
|
-
const helper_1 = require("../../helper");
|
|
6
5
|
const header_1 = require("../../rtcp/header");
|
|
7
6
|
const rtp_1 = require("../../rtp/rtp");
|
|
8
7
|
const _1 = require(".");
|
|
9
8
|
class CipherAesCtr extends _1.CipherAesBase {
|
|
10
9
|
constructor(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt, srtpSessionAuthTag, srtcpSessionAuthTag) {
|
|
11
10
|
super(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt);
|
|
12
|
-
this
|
|
13
|
-
|
|
14
|
-
|
|
11
|
+
Object.defineProperty(this, "srtpSessionAuthTag", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true,
|
|
15
|
+
value: srtpSessionAuthTag
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, "srtcpSessionAuthTag", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: srtcpSessionAuthTag
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "authTagLength", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: 10
|
|
28
|
+
});
|
|
15
29
|
}
|
|
16
30
|
encryptRtp(header, payload, rolloverCounter) {
|
|
17
31
|
const headerBuffer = header.serialize(header.serializeSize);
|
|
@@ -23,15 +37,17 @@ class CipherAesCtr extends _1.CipherAesBase {
|
|
|
23
37
|
}
|
|
24
38
|
decryptRtp(cipherText, rolloverCounter) {
|
|
25
39
|
const header = rtp_1.RtpHeader.deSerialize(cipherText);
|
|
26
|
-
|
|
27
|
-
dst = (0, helper_1.growBufferSize)(dst, cipherText.length - this.authTagLength);
|
|
40
|
+
const size = cipherText.length - this.authTagLength;
|
|
28
41
|
cipherText = cipherText.subarray(0, cipherText.length - this.authTagLength);
|
|
29
|
-
cipherText.subarray(0, header.payloadOffset).copy(dst);
|
|
30
42
|
const counter = this.generateCounter(header.sequenceNumber, rolloverCounter, header.ssrc, this.srtpSessionSalt);
|
|
31
43
|
const cipher = (0, crypto_1.createDecipheriv)("aes-128-ctr", this.srtpSessionKey, counter);
|
|
32
|
-
const payload = cipherText.
|
|
44
|
+
const payload = cipherText.subarray(header.payloadOffset);
|
|
33
45
|
const buf = cipher.update(payload);
|
|
34
|
-
|
|
46
|
+
const dst = Buffer.concat([
|
|
47
|
+
cipherText.subarray(0, header.payloadOffset),
|
|
48
|
+
buf,
|
|
49
|
+
Buffer.alloc(size - header.payloadOffset - buf.length),
|
|
50
|
+
]);
|
|
35
51
|
return [dst, header];
|
|
36
52
|
}
|
|
37
53
|
encryptRTCP(rtcpPacket, srtcpIndex) {
|
|
@@ -77,7 +93,7 @@ class CipherAesCtr extends _1.CipherAesBase {
|
|
|
77
93
|
counter.writeUInt32BE(rolloverCounter, 8);
|
|
78
94
|
counter.writeUInt32BE(Number(BigInt(sequenceNumber) << 16n), 12);
|
|
79
95
|
for (let i = 0; i < sessionSalt.length; i++) {
|
|
80
|
-
counter[i]
|
|
96
|
+
counter[i] ^= sessionSalt[i];
|
|
81
97
|
}
|
|
82
98
|
return counter;
|
|
83
99
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ctr.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/ctr.ts"],"names":[],"mappings":";;;AAAA,mCAAsE;AAEtE,
|
|
1
|
+
{"version":3,"file":"ctr.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/ctr.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, createDecipheriv, createHmac } from \"crypto\";\n\nimport { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\nimport { CipherAesBase } from \".\";\n\nexport class CipherAesCtr extends CipherAesBase {\n readonly authTagLength = 10;\n\n constructor(\n srtpSessionKey: Buffer,\n srtpSessionSalt: Buffer,\n srtcpSessionKey: Buffer,\n srtcpSessionSalt: Buffer,\n private srtpSessionAuthTag: Buffer,\n private srtcpSessionAuthTag: Buffer\n ) {\n super(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt);\n }\n\n encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number) {\n const headerBuffer = header.serialize(header.serializeSize);\n\n const counter = this.generateCounter(\n header.sequenceNumber,\n rolloverCounter,\n header.ssrc,\n this.srtpSessionSalt\n );\n\n const cipher = createCipheriv(\"aes-128-ctr\", this.srtpSessionKey, counter);\n const enc = cipher.update(payload);\n\n const authTag = this.generateSrtpAuthTag(\n rolloverCounter,\n headerBuffer,\n enc\n );\n return Buffer.concat([headerBuffer, enc, authTag]);\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n const header = RtpHeader.deSerialize(cipherText);\n\n const size = cipherText.length - this.authTagLength;\n\n cipherText = cipherText.subarray(0, cipherText.length - this.authTagLength);\n\n const counter = this.generateCounter(\n header.sequenceNumber,\n rolloverCounter,\n header.ssrc,\n this.srtpSessionSalt\n );\n const cipher = createDecipheriv(\n \"aes-128-ctr\",\n this.srtpSessionKey,\n counter\n );\n const payload = cipherText.subarray(header.payloadOffset);\n const buf = cipher.update(payload);\n\n const dst = Buffer.concat([\n cipherText.subarray(0, header.payloadOffset),\n buf,\n Buffer.alloc(size - header.payloadOffset - buf.length),\n ]);\n\n return [dst, header];\n }\n\n encryptRTCP(rtcpPacket: Buffer, srtcpIndex: number): Buffer {\n let out = Buffer.from(rtcpPacket);\n const ssrc = out.readUInt32BE(4);\n\n const counter = this.generateCounter(\n srtcpIndex & 0xffff,\n srtcpIndex >> 16,\n ssrc,\n this.srtcpSessionSalt\n );\n const cipher = createCipheriv(\"aes-128-ctr\", this.srtcpSessionKey, counter);\n // Encrypt everything after header\n const buf = cipher.update(out.slice(8));\n buf.copy(out, 8);\n out = Buffer.concat([out, Buffer.alloc(4)]);\n out.writeUInt32BE(srtcpIndex, out.length - 4);\n out[out.length - 4] |= 0x80;\n const authTag = this.generateSrtcpAuthTag(out);\n out = Buffer.concat([out, authTag]);\n\n return out;\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n const header = RtcpHeader.deSerialize(encrypted);\n\n const tailOffset = encrypted.length - (this.authTagLength + srtcpIndexSize);\n const out = Buffer.from(encrypted).slice(0, tailOffset);\n\n const isEncrypted = encrypted[tailOffset] >> 7;\n if (isEncrypted === 0) return [out, header];\n\n let srtcpIndex = encrypted.readUInt32BE(tailOffset);\n srtcpIndex &= ~(1 << 31);\n\n const ssrc = encrypted.readUInt32BE(4);\n\n // todo impl compare\n const actualTag = encrypted.subarray(encrypted.length - 10);\n\n const counter = this.generateCounter(\n srtcpIndex & 0xffff,\n srtcpIndex >> 16,\n ssrc,\n this.srtcpSessionSalt\n );\n const cipher = createDecipheriv(\n \"aes-128-ctr\",\n this.srtcpSessionKey,\n counter\n );\n const buf = cipher.update(out.subarray(8));\n buf.copy(out, 8);\n return [out, header];\n }\n\n generateSrtcpAuthTag(buf: Buffer) {\n const srtcpSessionAuth = createHmac(\"sha1\", this.srtcpSessionAuthTag);\n return srtcpSessionAuth.update(buf).digest().slice(0, 10);\n }\n\n generateCounter(\n sequenceNumber: number,\n rolloverCounter: number,\n ssrc: number,\n sessionSalt: Buffer\n ) {\n const counter = Buffer.alloc(16);\n counter.writeUInt32BE(ssrc, 4);\n counter.writeUInt32BE(rolloverCounter, 8);\n counter.writeUInt32BE(Number(BigInt(sequenceNumber) << 16n), 12);\n\n for (let i = 0; i < sessionSalt.length; i++) {\n counter[i] ^= sessionSalt[i];\n }\n return counter;\n }\n\n generateSrtpAuthTag(roc: number, ...buffers: Buffer[]) {\n const srtpSessionAuth = createHmac(\"sha1\", this.srtpSessionAuthTag);\n const rocRaw = Buffer.alloc(4);\n rocRaw.writeUInt32BE(roc);\n\n for (const buf of buffers) {\n srtpSessionAuth.update(buf);\n }\n return srtpSessionAuth.update(rocRaw).digest().subarray(0, 10);\n }\n}\n\nconst srtcpIndexSize = 4;\n"]}
|
|
@@ -4,6 +4,9 @@ import { RtpHeader } from "../../rtp/rtp";
|
|
|
4
4
|
import { CipherAesBase } from ".";
|
|
5
5
|
export declare class CipherAesGcm extends CipherAesBase {
|
|
6
6
|
readonly aeadAuthTagLen = 16;
|
|
7
|
+
readonly rtpIvWriter: (values: (number | bigint)[]) => Buffer;
|
|
8
|
+
readonly rtcpIvWriter: (values: (number | bigint)[]) => Buffer;
|
|
9
|
+
readonly aadWriter: (values: (number | bigint)[]) => Buffer;
|
|
7
10
|
constructor(srtpSessionKey: Buffer, srtpSessionSalt: Buffer, srtcpSessionKey: Buffer, srtcpSessionSalt: Buffer);
|
|
8
11
|
encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number): Buffer;
|
|
9
12
|
decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader];
|
|
@@ -1,11 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
-
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
-
};
|
|
5
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
3
|
exports.CipherAesGcm = void 0;
|
|
7
4
|
const crypto_1 = require("crypto");
|
|
8
|
-
const range_1 = __importDefault(require("lodash/range"));
|
|
9
5
|
const src_1 = require("../../../../common/src");
|
|
10
6
|
const helper_1 = require("../../helper");
|
|
11
7
|
const header_1 = require("../../rtcp/header");
|
|
@@ -14,21 +10,40 @@ const _1 = require(".");
|
|
|
14
10
|
class CipherAesGcm extends _1.CipherAesBase {
|
|
15
11
|
constructor(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt) {
|
|
16
12
|
super(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt);
|
|
17
|
-
this
|
|
13
|
+
Object.defineProperty(this, "aeadAuthTagLen", {
|
|
14
|
+
enumerable: true,
|
|
15
|
+
configurable: true,
|
|
16
|
+
writable: true,
|
|
17
|
+
value: 16
|
|
18
|
+
});
|
|
19
|
+
Object.defineProperty(this, "rtpIvWriter", {
|
|
20
|
+
enumerable: true,
|
|
21
|
+
configurable: true,
|
|
22
|
+
writable: true,
|
|
23
|
+
value: (0, src_1.createBufferWriter)([2, 4, 4, 2], true)
|
|
24
|
+
});
|
|
25
|
+
Object.defineProperty(this, "rtcpIvWriter", {
|
|
26
|
+
enumerable: true,
|
|
27
|
+
configurable: true,
|
|
28
|
+
writable: true,
|
|
29
|
+
value: (0, src_1.createBufferWriter)([2, 4, 2, 4], true)
|
|
30
|
+
});
|
|
31
|
+
Object.defineProperty(this, "aadWriter", {
|
|
32
|
+
enumerable: true,
|
|
33
|
+
configurable: true,
|
|
34
|
+
writable: true,
|
|
35
|
+
value: (0, src_1.createBufferWriter)([4], true)
|
|
36
|
+
});
|
|
18
37
|
}
|
|
19
38
|
encryptRtp(header, payload, rolloverCounter) {
|
|
20
|
-
const dst = Buffer.alloc(header.serializeSize + payload.length + this.aeadAuthTagLen);
|
|
21
39
|
const hdr = header.serialize(header.serializeSize);
|
|
22
|
-
hdr.copy(dst);
|
|
23
|
-
const { payloadOffset } = header;
|
|
24
40
|
const iv = this.rtpInitializationVector(header, rolloverCounter);
|
|
25
41
|
const cipher = (0, crypto_1.createCipheriv)("aes-128-gcm", this.srtpSessionKey, iv);
|
|
26
42
|
cipher.setAAD(hdr);
|
|
27
43
|
const enc = cipher.update(payload);
|
|
28
44
|
cipher.final();
|
|
29
|
-
enc.copy(dst, payloadOffset);
|
|
30
45
|
const authTag = cipher.getAuthTag();
|
|
31
|
-
|
|
46
|
+
const dst = Buffer.concat([hdr, enc, authTag]);
|
|
32
47
|
return dst;
|
|
33
48
|
}
|
|
34
49
|
decryptRtp(cipherText, rolloverCounter) {
|
|
@@ -79,25 +94,30 @@ class CipherAesGcm extends _1.CipherAesBase {
|
|
|
79
94
|
}
|
|
80
95
|
// https://tools.ietf.org/html/rfc7714#section-8.1
|
|
81
96
|
rtpInitializationVector(header, rolloverCounter) {
|
|
82
|
-
const iv =
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
97
|
+
const iv = this.rtpIvWriter([
|
|
98
|
+
0,
|
|
99
|
+
header.ssrc,
|
|
100
|
+
rolloverCounter,
|
|
101
|
+
header.sequenceNumber,
|
|
102
|
+
]);
|
|
103
|
+
for (let i = 0; i < iv.length; i++) {
|
|
104
|
+
iv[i] ^= this.srtpSessionSalt[i];
|
|
105
|
+
}
|
|
86
106
|
return iv;
|
|
87
107
|
}
|
|
88
108
|
// https://tools.ietf.org/html/rfc7714#section-9.1
|
|
89
109
|
rtcpInitializationVector(ssrc, srtcpIndex) {
|
|
90
|
-
const iv =
|
|
91
|
-
(
|
|
92
|
-
iv[i]
|
|
93
|
-
}
|
|
110
|
+
const iv = this.rtcpIvWriter([0, ssrc, 0, srtcpIndex]);
|
|
111
|
+
for (let i = 0; i < iv.length; i++) {
|
|
112
|
+
iv[i] ^= this.srtcpSessionSalt[i];
|
|
113
|
+
}
|
|
94
114
|
return iv;
|
|
95
115
|
}
|
|
96
116
|
// https://datatracker.ietf.org/doc/html/rfc7714#section-17
|
|
97
117
|
rtcpAdditionalAuthenticatedData(rtcpPacket, srtcpIndex) {
|
|
98
118
|
const aad = Buffer.concat([
|
|
99
|
-
rtcpPacket.
|
|
100
|
-
|
|
119
|
+
rtcpPacket.subarray(0, 8),
|
|
120
|
+
this.aadWriter([srtcpIndex]),
|
|
101
121
|
]);
|
|
102
122
|
aad[8] |= rtcpEncryptionFlag;
|
|
103
123
|
return aad;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"gcm.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/gcm.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"gcm.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/gcm.ts"],"names":[],"mappings":"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","sourcesContent":["import { createCipheriv, createDecipheriv } from \"crypto\";\n\nimport { createBufferWriter } from \"../../../../common/src\";\nimport { growBufferSize } from \"../../helper\";\nimport { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\nimport { CipherAesBase } from \".\";\n\nexport class CipherAesGcm extends CipherAesBase {\n readonly aeadAuthTagLen = 16;\n readonly rtpIvWriter = createBufferWriter([2, 4, 4, 2], true);\n readonly rtcpIvWriter = createBufferWriter([2, 4, 2, 4], true);\n readonly aadWriter = createBufferWriter([4], true);\n\n constructor(\n srtpSessionKey: Buffer,\n srtpSessionSalt: Buffer,\n srtcpSessionKey: Buffer,\n srtcpSessionSalt: Buffer\n ) {\n super(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt);\n }\n\n encryptRtp(header: RtpHeader, payload: Buffer, rolloverCounter: number) {\n const hdr = header.serialize(header.serializeSize);\n\n const iv = this.rtpInitializationVector(header, rolloverCounter);\n\n const cipher = createCipheriv(\"aes-128-gcm\", this.srtpSessionKey, iv);\n cipher.setAAD(hdr);\n const enc = cipher.update(payload);\n cipher.final();\n\n const authTag = cipher.getAuthTag();\n\n const dst = Buffer.concat([hdr, enc, authTag]);\n return dst;\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n const header = RtpHeader.deSerialize(cipherText);\n\n let dst = Buffer.from([]);\n dst = growBufferSize(dst, cipherText.length - this.aeadAuthTagLen);\n cipherText.slice(0, header.payloadOffset).copy(dst);\n\n const iv = this.rtpInitializationVector(header, rolloverCounter);\n\n const enc = cipherText.slice(\n header.payloadOffset,\n cipherText.length - this.aeadAuthTagLen\n );\n\n const cipher = createDecipheriv(\"aes-128-gcm\", this.srtpSessionKey, iv);\n const dec = cipher.update(enc);\n\n dec.copy(dst, header.payloadOffset);\n\n return [dst, header];\n }\n\n encryptRTCP(rtcpPacket: Buffer, srtcpIndex: number): Buffer {\n const ssrc = rtcpPacket.readUInt32BE(4);\n\n const addPos = rtcpPacket.length + this.aeadAuthTagLen;\n let dst = Buffer.from([]);\n dst = growBufferSize(dst, addPos + srtcpIndexSize);\n rtcpPacket.slice(0, 8).copy(dst);\n\n const iv = this.rtcpInitializationVector(ssrc, srtcpIndex);\n const aad = this.rtcpAdditionalAuthenticatedData(rtcpPacket, srtcpIndex);\n\n const cipher = createCipheriv(\"aes-128-gcm\", this.srtcpSessionKey, iv);\n cipher.setAAD(aad);\n const enc = cipher.update(rtcpPacket.slice(8));\n cipher.final();\n enc.copy(dst, 8);\n\n const authTag = cipher.getAuthTag();\n authTag.copy(dst, 8 + enc.length);\n aad.slice(8, 12).copy(dst, addPos);\n\n return dst;\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n const header = RtcpHeader.deSerialize(encrypted);\n const aadPos = encrypted.length - srtcpIndexSize;\n\n const dst = Buffer.alloc(aadPos - this.aeadAuthTagLen);\n encrypted.slice(0, 8).copy(dst);\n\n const ssrc = encrypted.readUInt32BE(4);\n\n let srtcpIndex = encrypted.readUInt32BE(encrypted.length - 4);\n srtcpIndex &= ~(rtcpEncryptionFlag << 24);\n\n const iv = this.rtcpInitializationVector(ssrc, srtcpIndex);\n const aad = this.rtcpAdditionalAuthenticatedData(encrypted, srtcpIndex);\n\n const cipher = createDecipheriv(\"aes-128-gcm\", this.srtcpSessionKey, iv);\n cipher.setAAD(aad);\n const dec = cipher.update(encrypted.slice(8, aadPos));\n\n dec.copy(dst, 8);\n\n return [dst, header];\n }\n\n // https://tools.ietf.org/html/rfc7714#section-8.1\n private rtpInitializationVector(header: RtpHeader, rolloverCounter: number) {\n const iv = this.rtpIvWriter([\n 0,\n header.ssrc,\n rolloverCounter,\n header.sequenceNumber,\n ]);\n for (let i = 0; i < iv.length; i++) {\n iv[i] ^= this.srtpSessionSalt[i];\n }\n return iv;\n }\n\n // https://tools.ietf.org/html/rfc7714#section-9.1\n private rtcpInitializationVector(ssrc: number, srtcpIndex: number) {\n const iv = this.rtcpIvWriter([0, ssrc, 0, srtcpIndex]);\n for (let i = 0; i < iv.length; i++) {\n iv[i] ^= this.srtcpSessionSalt[i];\n }\n return iv;\n }\n\n // https://datatracker.ietf.org/doc/html/rfc7714#section-17\n private rtcpAdditionalAuthenticatedData(\n rtcpPacket: Buffer,\n srtcpIndex: number\n ) {\n const aad = Buffer.concat([\n rtcpPacket.subarray(0, 8),\n this.aadWriter([srtcpIndex]),\n ]);\n aad[8] |= rtcpEncryptionFlag;\n return aad;\n }\n}\n\nconst srtcpIndexSize = 4;\nconst rtcpEncryptionFlag = 0x80;\n"]}
|
|
@@ -3,10 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.CipherAesBase = void 0;
|
|
4
4
|
class CipherAesBase {
|
|
5
5
|
constructor(srtpSessionKey, srtpSessionSalt, srtcpSessionKey, srtcpSessionSalt) {
|
|
6
|
-
this
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
Object.defineProperty(this, "srtpSessionKey", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: srtpSessionKey
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(this, "srtpSessionSalt", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: srtpSessionSalt
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(this, "srtcpSessionKey", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: srtcpSessionKey
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "srtcpSessionSalt", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: srtcpSessionSalt
|
|
29
|
+
});
|
|
10
30
|
}
|
|
11
31
|
encryptRtp(header, payload, rolloverCounter) {
|
|
12
32
|
return Buffer.from([]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/index.ts"],"names":[],"mappings":";;;AAGA,MAAsB,aAAa;IACjC,YACS,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/cipher/index.ts"],"names":[],"mappings":";;;AAGA,MAAsB,aAAa;IACjC,YACS,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB;;;;;mBAHxB;;;;;;mBACA;;;;;;mBACA;;;;;;mBACA;;IACN,CAAC;IAEJ,UAAU,CACR,MAAiB,EACjB,OAAe,EACf,eAAuB;QAEvB,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,UAAU,CAAC,UAAkB,EAAE,eAAuB;QACpD,OAAO,EAAS,CAAC;IACnB,CAAC;IAED,WAAW,CAAC,OAAe,EAAE,UAAkB;QAC7C,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACzB,CAAC;IAED,WAAW,CAAC,SAAiB;QAC3B,OAAO,EAAS,CAAC;IACnB,CAAC;CACF;AA3BD,sCA2BC","sourcesContent":["import { RtcpHeader } from \"../../rtcp/header\";\nimport { RtpHeader } from \"../../rtp/rtp\";\n\nexport abstract class CipherAesBase {\n constructor(\n public srtpSessionKey: Buffer,\n public srtpSessionSalt: Buffer,\n public srtcpSessionKey: Buffer,\n public srtcpSessionSalt: Buffer\n ) {}\n\n encryptRtp(\n header: RtpHeader,\n payload: Buffer,\n rolloverCounter: number\n ): Buffer {\n return Buffer.from([]);\n }\n\n decryptRtp(cipherText: Buffer, rolloverCounter: number): [Buffer, RtpHeader] {\n return [] as any;\n }\n\n encryptRTCP(rawRtcp: Buffer, srtcpIndex: number): Buffer {\n return Buffer.from([]);\n }\n\n decryptRTCP(encrypted: Buffer): [Buffer, RtcpHeader] {\n return [] as any;\n }\n}\n"]}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
export declare const ProtectionProfileAes128CmHmacSha1_80: 1;
|
|
2
2
|
export declare const ProtectionProfileAeadAes128Gcm: 7;
|
|
3
|
-
export
|
|
3
|
+
export type Profile = typeof ProtectionProfileAes128CmHmacSha1_80 | typeof ProtectionProfileAeadAes128Gcm;
|
|
4
4
|
export declare const keyLength: (profile: Profile) => number;
|
|
5
5
|
export declare const saltLength: (profile: Profile) => 12 | 14;
|
|
@@ -8,11 +8,90 @@ const gcm_1 = require("../cipher/gcm");
|
|
|
8
8
|
const const_1 = require("../const");
|
|
9
9
|
class Context {
|
|
10
10
|
constructor(masterKey, masterSalt, profile) {
|
|
11
|
-
this
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
11
|
+
Object.defineProperty(this, "masterKey", {
|
|
12
|
+
enumerable: true,
|
|
13
|
+
configurable: true,
|
|
14
|
+
writable: true,
|
|
15
|
+
value: masterKey
|
|
16
|
+
});
|
|
17
|
+
Object.defineProperty(this, "masterSalt", {
|
|
18
|
+
enumerable: true,
|
|
19
|
+
configurable: true,
|
|
20
|
+
writable: true,
|
|
21
|
+
value: masterSalt
|
|
22
|
+
});
|
|
23
|
+
Object.defineProperty(this, "profile", {
|
|
24
|
+
enumerable: true,
|
|
25
|
+
configurable: true,
|
|
26
|
+
writable: true,
|
|
27
|
+
value: profile
|
|
28
|
+
});
|
|
29
|
+
Object.defineProperty(this, "srtpSSRCStates", {
|
|
30
|
+
enumerable: true,
|
|
31
|
+
configurable: true,
|
|
32
|
+
writable: true,
|
|
33
|
+
value: {}
|
|
34
|
+
});
|
|
35
|
+
Object.defineProperty(this, "srtpSessionKey", {
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
writable: true,
|
|
39
|
+
value: void 0
|
|
40
|
+
});
|
|
41
|
+
Object.defineProperty(this, "srtpSessionSalt", {
|
|
42
|
+
enumerable: true,
|
|
43
|
+
configurable: true,
|
|
44
|
+
writable: true,
|
|
45
|
+
value: void 0
|
|
46
|
+
});
|
|
47
|
+
Object.defineProperty(this, "srtpSessionAuthTag", {
|
|
48
|
+
enumerable: true,
|
|
49
|
+
configurable: true,
|
|
50
|
+
writable: true,
|
|
51
|
+
value: void 0
|
|
52
|
+
});
|
|
53
|
+
Object.defineProperty(this, "srtpSessionAuth", {
|
|
54
|
+
enumerable: true,
|
|
55
|
+
configurable: true,
|
|
56
|
+
writable: true,
|
|
57
|
+
value: void 0
|
|
58
|
+
});
|
|
59
|
+
Object.defineProperty(this, "srtcpSSRCStates", {
|
|
60
|
+
enumerable: true,
|
|
61
|
+
configurable: true,
|
|
62
|
+
writable: true,
|
|
63
|
+
value: {}
|
|
64
|
+
});
|
|
65
|
+
Object.defineProperty(this, "srtcpSessionKey", {
|
|
66
|
+
enumerable: true,
|
|
67
|
+
configurable: true,
|
|
68
|
+
writable: true,
|
|
69
|
+
value: void 0
|
|
70
|
+
});
|
|
71
|
+
Object.defineProperty(this, "srtcpSessionSalt", {
|
|
72
|
+
enumerable: true,
|
|
73
|
+
configurable: true,
|
|
74
|
+
writable: true,
|
|
75
|
+
value: void 0
|
|
76
|
+
});
|
|
77
|
+
Object.defineProperty(this, "srtcpSessionAuthTag", {
|
|
78
|
+
enumerable: true,
|
|
79
|
+
configurable: true,
|
|
80
|
+
writable: true,
|
|
81
|
+
value: void 0
|
|
82
|
+
});
|
|
83
|
+
Object.defineProperty(this, "srtcpSessionAuth", {
|
|
84
|
+
enumerable: true,
|
|
85
|
+
configurable: true,
|
|
86
|
+
writable: true,
|
|
87
|
+
value: void 0
|
|
88
|
+
});
|
|
89
|
+
Object.defineProperty(this, "cipher", {
|
|
90
|
+
enumerable: true,
|
|
91
|
+
configurable: true,
|
|
92
|
+
writable: true,
|
|
93
|
+
value: void 0
|
|
94
|
+
});
|
|
16
95
|
{
|
|
17
96
|
// aes-js plaintext require 16byte
|
|
18
97
|
// so need to padding to 14 byte
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../../../../../rtp/src/srtp/context/context.ts"],"names":[],"mappings":"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","sourcesContent":["import { AES } from \"aes-js\";\nimport { createHmac, Hmac } from \"crypto\";\n\nimport { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n 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(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(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(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 { AES } from \"aes-js\";\nimport { createHmac, Hmac } from \"crypto\";\n\nimport { CipherAesBase } from \"../cipher\";\nimport { CipherAesCtr } from \"../cipher/ctr\";\nimport { CipherAesGcm } from \"../cipher/gcm\";\nimport {\n 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(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(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(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,12 +1,12 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
2
|
import { Context } from "./context/context";
|
|
3
|
-
export
|
|
3
|
+
export type SessionKeys = {
|
|
4
4
|
localMasterKey: Buffer;
|
|
5
5
|
localMasterSalt: Buffer;
|
|
6
6
|
remoteMasterKey: Buffer;
|
|
7
7
|
remoteMasterSalt: Buffer;
|
|
8
8
|
};
|
|
9
|
-
export
|
|
9
|
+
export type Config = {
|
|
10
10
|
keys: SessionKeys;
|
|
11
11
|
profile: number;
|
|
12
12
|
};
|
|
@@ -3,7 +3,30 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.Session = void 0;
|
|
4
4
|
class Session {
|
|
5
5
|
constructor(ContextCls) {
|
|
6
|
-
this
|
|
6
|
+
Object.defineProperty(this, "ContextCls", {
|
|
7
|
+
enumerable: true,
|
|
8
|
+
configurable: true,
|
|
9
|
+
writable: true,
|
|
10
|
+
value: ContextCls
|
|
11
|
+
});
|
|
12
|
+
Object.defineProperty(this, "localContext", {
|
|
13
|
+
enumerable: true,
|
|
14
|
+
configurable: true,
|
|
15
|
+
writable: true,
|
|
16
|
+
value: void 0
|
|
17
|
+
});
|
|
18
|
+
Object.defineProperty(this, "remoteContext", {
|
|
19
|
+
enumerable: true,
|
|
20
|
+
configurable: true,
|
|
21
|
+
writable: true,
|
|
22
|
+
value: void 0
|
|
23
|
+
});
|
|
24
|
+
Object.defineProperty(this, "onData", {
|
|
25
|
+
enumerable: true,
|
|
26
|
+
configurable: true,
|
|
27
|
+
writable: true,
|
|
28
|
+
value: void 0
|
|
29
|
+
});
|
|
7
30
|
}
|
|
8
31
|
start(localMasterKey, localMasterSalt, remoteMasterKey, remoteMasterSalt, profile) {
|
|
9
32
|
this.localContext = new this.ContextCls(localMasterKey, localMasterSalt, profile);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/session.ts"],"names":[],"mappings":";;;AAcA,MAAa,OAAO;IAKlB,YAAoB,UAAe;
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/session.ts"],"names":[],"mappings":";;;AAcA,MAAa,OAAO;IAKlB,YAAoB,UAAe;;;;;mBAAf;;QAJpB;;;;;WAAiB;QACjB;;;;;WAAkB;QAClB;;;;;WAA+B;IAEO,CAAC;IAEvC,KAAK,CACH,cAAsB,EACtB,eAAuB,EACvB,eAAuB,EACvB,gBAAwB,EACxB,OAAe;QAEf,IAAI,CAAC,YAAY,GAAG,IAAI,IAAI,CAAC,UAAU,CACrC,cAAc,EACd,eAAe,EACf,OAAO,CACR,CAAC;QACF,IAAI,CAAC,aAAa,GAAG,IAAI,IAAI,CAAC,UAAU,CACtC,eAAe,EACf,gBAAgB,EAChB,OAAO,CACR,CAAC;IACJ,CAAC;CACF;AAzBD,0BAyBC","sourcesContent":["import { Context } from \"./context/context\";\n\nexport type SessionKeys = {\n localMasterKey: Buffer;\n localMasterSalt: Buffer;\n remoteMasterKey: Buffer;\n remoteMasterSalt: Buffer;\n};\n\nexport type Config = {\n keys: SessionKeys;\n profile: number;\n};\n\nexport class Session<T extends Context> {\n localContext!: T;\n remoteContext!: T;\n onData?: (buf: Buffer) => void;\n\n constructor(private ContextCls: any) {}\n\n start(\n localMasterKey: Buffer,\n localMasterSalt: Buffer,\n remoteMasterKey: Buffer,\n remoteMasterSalt: Buffer,\n profile: number\n ) {\n this.localContext = new this.ContextCls(\n localMasterKey,\n localMasterSalt,\n profile\n );\n this.remoteContext = new this.ContextCls(\n remoteMasterKey,\n remoteMasterSalt,\n profile\n );\n }\n}\n"]}
|
|
@@ -6,11 +6,21 @@ const session_1 = require("./session");
|
|
|
6
6
|
class SrtcpSession extends session_1.Session {
|
|
7
7
|
constructor(config) {
|
|
8
8
|
super(srtcp_1.SrtcpContext);
|
|
9
|
-
this
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
Object.defineProperty(this, "config", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: config
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(this, "decrypt", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: (buf) => {
|
|
20
|
+
const [decrypted] = this.remoteContext.decryptRTCP(buf);
|
|
21
|
+
return decrypted;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
14
24
|
this.start(config.keys.localMasterKey, config.keys.localMasterSalt, config.keys.remoteMasterKey, config.keys.remoteMasterSalt, config.profile);
|
|
15
25
|
}
|
|
16
26
|
encrypt(rawRtcp) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"srtcp.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/srtcp.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,uCAA4C;AAE5C,MAAa,YAAa,SAAQ,iBAAqB;IACrD,YAAmB,MAAc;QAC/B,KAAK,CAAC,oBAAY,CAAC,CAAC
|
|
1
|
+
{"version":3,"file":"srtcp.js","sourceRoot":"","sources":["../../../../../rtp/src/srtp/srtcp.ts"],"names":[],"mappings":";;;AAAA,2CAA+C;AAC/C,uCAA4C;AAE5C,MAAa,YAAa,SAAQ,iBAAqB;IACrD,YAAmB,MAAc;QAC/B,KAAK,CAAC,oBAAY,CAAC,CAAC;;;;;mBADH;;QAYnB;;;;mBAAU,CAAC,GAAW,EAAE,EAAE;gBACxB,MAAM,CAAC,SAAS,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;gBACxD,OAAO,SAAS,CAAC;YACnB,CAAC;WAAC;QAZA,IAAI,CAAC,KAAK,CACR,MAAM,CAAC,IAAI,CAAC,cAAc,EAC1B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,eAAe,EAC3B,MAAM,CAAC,IAAI,CAAC,gBAAgB,EAC5B,MAAM,CAAC,OAAO,CACf,CAAC;IACJ,CAAC;IAOD,OAAO,CAAC,OAAe;QACrB,MAAM,GAAG,GAAG,IAAI,CAAC,YAAY,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;QACnD,OAAO,GAAG,CAAC;IACb,CAAC;CACF;AAtBD,oCAsBC","sourcesContent":["import { SrtcpContext } from \"./context/srtcp\";\nimport { Config, Session } from \"./session\";\n\nexport class SrtcpSession extends Session<SrtcpContext> {\n constructor(public config: Config) {\n super(SrtcpContext);\n\n this.start(\n config.keys.localMasterKey,\n config.keys.localMasterSalt,\n config.keys.remoteMasterKey,\n config.keys.remoteMasterSalt,\n config.profile\n );\n }\n\n decrypt = (buf: Buffer) => {\n const [decrypted] = this.remoteContext.decryptRTCP(buf);\n return decrypted;\n };\n\n encrypt(rawRtcp: Buffer) {\n const enc = this.localContext.encryptRTCP(rawRtcp);\n return enc;\n }\n}\n"]}
|
package/lib/rtp/src/srtp/srtp.js
CHANGED
|
@@ -6,11 +6,21 @@ const session_1 = require("./session");
|
|
|
6
6
|
class SrtpSession extends session_1.Session {
|
|
7
7
|
constructor(config) {
|
|
8
8
|
super(srtp_1.SrtpContext);
|
|
9
|
-
this
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
9
|
+
Object.defineProperty(this, "config", {
|
|
10
|
+
enumerable: true,
|
|
11
|
+
configurable: true,
|
|
12
|
+
writable: true,
|
|
13
|
+
value: config
|
|
14
|
+
});
|
|
15
|
+
Object.defineProperty(this, "decrypt", {
|
|
16
|
+
enumerable: true,
|
|
17
|
+
configurable: true,
|
|
18
|
+
writable: true,
|
|
19
|
+
value: (buf) => {
|
|
20
|
+
const [decrypted] = this.remoteContext.decryptRtp(buf);
|
|
21
|
+
return decrypted;
|
|
22
|
+
}
|
|
23
|
+
});
|
|
14
24
|
this.start(config.keys.localMasterKey, config.keys.localMasterSalt, config.keys.remoteMasterKey, config.keys.remoteMasterSalt, config.profile);
|
|
15
25
|
}
|
|
16
26
|
encrypt(payload, header) {
|