1- import { Buffer } from 'buffer'
21import { bytes } from './@types/basic'
32import { MessageBuffer } from './@types/handshake'
4- import BufferList from 'bl'
3+ import BufferList from 'bl/BufferList'
4+ import { concat as uint8ArrayConcat } from 'uint8arrays/concat'
55
6- export const uint16BEEncode = ( value : number , target : Buffer , offset : number ) : Buffer => {
7- target = target || Buffer . allocUnsafe ( 2 )
8- target . writeUInt16BE ( value , offset )
6+ const allocUnsafe = ( len : number ) : Uint8Array => {
7+ if ( globalThis . Buffer ) {
8+ return globalThis . Buffer . allocUnsafe ( len )
9+ }
10+
11+ return new Uint8Array ( len )
12+ }
13+
14+ export const uint16BEEncode = ( value : number , target : Uint8Array , offset : number ) : Uint8Array => {
15+ target = target || allocUnsafe ( 2 )
16+ new DataView ( target . buffer , target . byteOffset , target . byteLength ) . setUint16 ( offset , value , false )
917 return target
1018}
1119uint16BEEncode . bytes = 2
1220
13- export const uint16BEDecode = ( data : Buffer | BufferList ) : number => {
21+ export const uint16BEDecode = ( data : Uint8Array | BufferList ) : number => {
1422 if ( data . length < 2 ) throw RangeError ( 'Could not decode int16BE' )
15- return data . readUInt16BE ( 0 )
23+
24+ if ( data instanceof BufferList ) {
25+ return data . readUInt16BE ( 0 )
26+ }
27+
28+ return new DataView ( data . buffer , data . byteOffset , data . byteLength ) . getUint16 ( 0 , false )
1629}
1730uint16BEDecode . bytes = 2
1831
1932// Note: IK and XX encoder usage is opposite (XX uses in stages encode0 where IK uses encode1)
2033
2134export function encode0 ( message : MessageBuffer ) : bytes {
22- return Buffer . concat ( [ message . ne , message . ciphertext ] )
35+ return uint8ArrayConcat ( [ message . ne , message . ciphertext ] , message . ne . length + message . ciphertext . length )
2336}
2437
2538export function encode1 ( message : MessageBuffer ) : bytes {
26- return Buffer . concat ( [ message . ne , message . ns , message . ciphertext ] )
39+ return uint8ArrayConcat ( [ message . ne , message . ns , message . ciphertext ] , message . ne . length + message . ns . length + message . ciphertext . length )
2740}
2841
2942export function encode2 ( message : MessageBuffer ) : bytes {
30- return Buffer . concat ( [ message . ns , message . ciphertext ] )
43+ return uint8ArrayConcat ( [ message . ns , message . ciphertext ] , message . ns . length + message . ciphertext . length )
3144}
3245
3346export function decode0 ( input : bytes ) : MessageBuffer {
@@ -38,7 +51,7 @@ export function decode0 (input: bytes): MessageBuffer {
3851 return {
3952 ne : input . slice ( 0 , 32 ) ,
4053 ciphertext : input . slice ( 32 , input . length ) ,
41- ns : Buffer . alloc ( 0 )
54+ ns : new Uint8Array ( 0 )
4255 }
4356}
4457
@@ -60,7 +73,7 @@ export function decode2 (input: bytes): MessageBuffer {
6073 }
6174
6275 return {
63- ne : Buffer . alloc ( 0 ) ,
76+ ne : new Uint8Array ( 0 ) ,
6477 ns : input . slice ( 0 , 48 ) ,
6578 ciphertext : input . slice ( 48 , input . length )
6679 }
0 commit comments