@@ -74,6 +74,49 @@ describe('HMAC Utility Functions', () => {
7474 } )
7575 ) . to . equal ( expectedSubject ) ;
7676 } ) ;
77+
78+ it ( 'should handle Buffer text input and return a Buffer for requests' , ( ) => {
79+ const buffer = Buffer . from ( 'binary-data-content' ) ;
80+ const result = calculateHMACSubject ( {
81+ urlPath : '/api/test' ,
82+ text : buffer ,
83+ timestamp : MOCK_TIMESTAMP ,
84+ method : 'get' ,
85+ authVersion : 3 ,
86+ } ) ;
87+
88+ expect ( Buffer . isBuffer ( result ) ) . to . be . true ;
89+
90+ // Check the content structure
91+ const expectedPrefix = 'GET|1672531200000|3.0|/api/test|' ;
92+ const prefixBuffer = Buffer . from ( expectedPrefix , 'utf8' ) ;
93+
94+ // Manually reconstruct the expected buffer to compare
95+ const expectedBuffer = Buffer . concat ( [ prefixBuffer , buffer ] ) ;
96+ expect ( result ) . to . deep . equal ( expectedBuffer ) ;
97+ } ) ;
98+
99+ it ( 'should handle Buffer text input and return a Buffer for responses' , ( ) => {
100+ const buffer = Buffer . from ( 'binary-response-data' ) ;
101+ const result = calculateHMACSubject ( {
102+ urlPath : '/api/test' ,
103+ text : buffer ,
104+ timestamp : MOCK_TIMESTAMP ,
105+ statusCode : 200 ,
106+ method : 'get' ,
107+ authVersion : 3 ,
108+ } ) ;
109+
110+ expect ( Buffer . isBuffer ( result ) ) . to . be . true ;
111+
112+ // Check the content structure
113+ const expectedPrefix = 'GET|1672531200000|/api/test|200|' ;
114+ const prefixBuffer = Buffer . from ( expectedPrefix , 'utf8' ) ;
115+
116+ // Manually reconstruct the expected buffer to compare
117+ const expectedBuffer = Buffer . concat ( [ prefixBuffer , buffer ] ) ;
118+ expect ( result ) . to . deep . equal ( expectedBuffer ) ;
119+ } ) ;
77120 } ) ;
78121
79122 describe ( 'calculateRequestHMAC' , ( ) => {
@@ -161,5 +204,37 @@ describe('HMAC Utility Functions', () => {
161204
162205 expect ( result . isInResponseValidityWindow ) . to . be . false ;
163206 } ) ;
207+
208+ it ( 'should verify response with Buffer data' , ( ) => {
209+ const responseData = Buffer . from ( 'binary-response-data' ) ;
210+
211+ // First create an HMAC for this binary data
212+ const signatureSubject = calculateHMACSubject ( {
213+ urlPath : '/api/test' ,
214+ text : responseData ,
215+ timestamp : MOCK_TIMESTAMP ,
216+ statusCode : 200 ,
217+ method : 'post' ,
218+ authVersion : 3 ,
219+ } ) ;
220+
221+ const token = 'test-token' ;
222+ const expectedHmac = calculateHMAC ( token , signatureSubject ) ;
223+
224+ // Now verify using the generated HMAC
225+ const result = verifyResponse ( {
226+ url : '/api/test' ,
227+ statusCode : 200 ,
228+ text : responseData , // Use binary data here
229+ timestamp : MOCK_TIMESTAMP ,
230+ token : token ,
231+ hmac : expectedHmac ,
232+ method : 'post' ,
233+ authVersion : 3 ,
234+ } ) ;
235+ expect ( result . isValid ) . to . be . true ;
236+ expect ( result . expectedHmac ) . to . equal ( expectedHmac ) ;
237+ expect ( Buffer . isBuffer ( result . signatureSubject ) ) . to . be . true ;
238+ } ) ;
164239 } ) ;
165240} ) ;
0 commit comments