1010 *
1111 * Copyright (c) 2014-2015 Digital Bazaar, Inc.
1212 */
13- import { ByteStringBuffer , createBuffer , fillString } from './utils'
13+ import type { ByteStringBuffer } from './utils'
14+ import { createBuffer , fillString } from './utils'
1415
1516// SHA-512 state interface (each value is represented as two 32-bit integers)
1617interface SHA512State {
@@ -198,9 +199,11 @@ export function create(algorithm: SHA512Algorithm = 'SHA-512'): MessageDigest {
198199
199200 // Build final hash value
200201 const rval = createBuffer ( )
201- const hlen = algorithm === 'SHA-512' ? finalState . length :
202- algorithm === 'SHA-384' ? finalState . length - 2 :
203- finalState . length - 4
202+ const hlen = algorithm === 'SHA-512'
203+ ? finalState . length
204+ : algorithm === 'SHA-384'
205+ ? finalState . length - 2
206+ : finalState . length - 4
204207
205208 for ( let i = 0 ; i < hlen ; ++ i ) {
206209 rval . putInt32 ( finalState [ i ] [ 0 ] )
@@ -227,73 +230,129 @@ function _init(): void {
227230
228231 // Create K table for SHA-512
229232 _k = [
230- [ 0x428A2F98 , 0xD728AE22 ] , [ 0x71374491 , 0x23EF65CD ] ,
231- [ 0xB5C0FBCF , 0xEC4D3B2F ] , [ 0xE9B5DBA5 , 0x8189DBBC ] ,
232- [ 0x3956C25B , 0xF348B538 ] , [ 0x59F111F1 , 0xB605D019 ] ,
233- [ 0x923F82A4 , 0xAF194F9B ] , [ 0xAB1C5ED5 , 0xDA6D8118 ] ,
234- [ 0xD807AA98 , 0xA3030242 ] , [ 0x12835B01 , 0x45706FBE ] ,
235- [ 0x243185BE , 0x4EE4B28C ] , [ 0x550C7DC3 , 0xD5FFB4E2 ] ,
236- [ 0x72BE5D74 , 0xF27B896F ] , [ 0x80DEB1FE , 0x3B1696B1 ] ,
237- [ 0x9BDC06A7 , 0x25C71235 ] , [ 0xC19BF174 , 0xCF692694 ] ,
238- [ 0xE49B69C1 , 0x9EF14AD2 ] , [ 0xEFBE4786 , 0x384F25E3 ] ,
239- [ 0x0FC19DC6 , 0x8B8CD5B5 ] , [ 0x240CA1CC , 0x77AC9C65 ] ,
240- [ 0x2DE92C6F , 0x592B0275 ] , [ 0x4A7484AA , 0x6EA6E483 ] ,
241- [ 0x5CB0A9DC , 0xBD41FBD4 ] , [ 0x76F988DA , 0x831153B5 ] ,
242- [ 0x983E5152 , 0xEE66DFAB ] , [ 0xA831C66D , 0x2DB43210 ] ,
243- [ 0xB00327C8 , 0x98FB213F ] , [ 0xBF597FC7 , 0xBEEF0EE4 ] ,
244- [ 0xC6E00BF3 , 0x3DA88FC2 ] , [ 0xD5A79147 , 0x930AA725 ] ,
245- [ 0x06CA6351 , 0xE003826F ] , [ 0x14292967 , 0x0A0E6E70 ] ,
246- [ 0x27B70A85 , 0x46D22FFC ] , [ 0x2E1B2138 , 0x5C26C926 ] ,
247- [ 0x4D2C6DFC , 0x5AC42AED ] , [ 0x53380D13 , 0x9D95B3DF ] ,
248- [ 0x650A7354 , 0x8BAF63DE ] , [ 0x766A0ABB , 0x3C77B2A8 ] ,
249- [ 0x81C2C92E , 0x47EDAEE6 ] , [ 0x92722C85 , 0x1482353B ] ,
250- [ 0xA2BFE8A1 , 0x4CF10364 ] , [ 0xA81A664B , 0xBC423001 ] ,
251- [ 0xC24B8B70 , 0xD0F89791 ] , [ 0xC76C51A3 , 0x0654BE30 ] ,
252- [ 0xD192E819 , 0xD6EF5218 ] , [ 0xD6990624 , 0x5565A910 ] ,
253- [ 0xF40E3585 , 0x5771202A ] , [ 0x106AA070 , 0x32BBD1B8 ] ,
254- [ 0x19A4C116 , 0xB8D2D0C8 ] , [ 0x1E376C08 , 0x5141AB53 ] ,
255- [ 0x2748774C , 0xDF8EEB99 ] , [ 0x34B0BCB5 , 0xE19B48A8 ] ,
256- [ 0x391C0CB3 , 0xC5C95A63 ] , [ 0x4ED8AA4A , 0xE3418ACB ] ,
257- [ 0x5B9CCA4F , 0x7763E373 ] , [ 0x682E6FF3 , 0xD6B2B8A3 ] ,
258- [ 0x748F82EE , 0x5DEFB2FC ] , [ 0x78A5636F , 0x43172F60 ] ,
259- [ 0x84C87814 , 0xA1F0AB72 ] , [ 0x8CC70208 , 0x1A6439EC ] ,
260- [ 0x90BEFFFA , 0x23631E28 ] , [ 0xA4506CEB , 0xDE82BDE9 ] ,
261- [ 0xBEF9A3F7 , 0xB2C67915 ] , [ 0xC67178F2 , 0xE372532B ] ,
262- [ 0xCA273ECE , 0xEA26619C ] , [ 0xD186B8C7 , 0x21C0C207 ] ,
263- [ 0xEADA7DD6 , 0xCDE0EB1E ] , [ 0xF57D4F7F , 0xEE6ED178 ] ,
264- [ 0x06F067AA , 0x72176FBA ] , [ 0x0A637DC5 , 0xA2C898A6 ] ,
265- [ 0x113F9804 , 0xBEF90DAE ] , [ 0x1B710B35 , 0x131C471B ] ,
266- [ 0x28DB77F5 , 0x23047D84 ] , [ 0x32CAAB7B , 0x40C72493 ] ,
267- [ 0x3C9EBE0A , 0x15C9BEBC ] , [ 0x431D67C4 , 0x9C100D4C ] ,
268- [ 0x4CC5D4BE , 0xCB3E42B6 ] , [ 0x597F299C , 0xFC657E2A ] ,
269- [ 0x5FCB6FAB , 0x3AD6FAEC ] , [ 0x6C44198C , 0x4A475817 ] ,
233+ [ 0x428A2F98 , 0xD728AE22 ] ,
234+ [ 0x71374491 , 0x23EF65CD ] ,
235+ [ 0xB5C0FBCF , 0xEC4D3B2F ] ,
236+ [ 0xE9B5DBA5 , 0x8189DBBC ] ,
237+ [ 0x3956C25B , 0xF348B538 ] ,
238+ [ 0x59F111F1 , 0xB605D019 ] ,
239+ [ 0x923F82A4 , 0xAF194F9B ] ,
240+ [ 0xAB1C5ED5 , 0xDA6D8118 ] ,
241+ [ 0xD807AA98 , 0xA3030242 ] ,
242+ [ 0x12835B01 , 0x45706FBE ] ,
243+ [ 0x243185BE , 0x4EE4B28C ] ,
244+ [ 0x550C7DC3 , 0xD5FFB4E2 ] ,
245+ [ 0x72BE5D74 , 0xF27B896F ] ,
246+ [ 0x80DEB1FE , 0x3B1696B1 ] ,
247+ [ 0x9BDC06A7 , 0x25C71235 ] ,
248+ [ 0xC19BF174 , 0xCF692694 ] ,
249+ [ 0xE49B69C1 , 0x9EF14AD2 ] ,
250+ [ 0xEFBE4786 , 0x384F25E3 ] ,
251+ [ 0x0FC19DC6 , 0x8B8CD5B5 ] ,
252+ [ 0x240CA1CC , 0x77AC9C65 ] ,
253+ [ 0x2DE92C6F , 0x592B0275 ] ,
254+ [ 0x4A7484AA , 0x6EA6E483 ] ,
255+ [ 0x5CB0A9DC , 0xBD41FBD4 ] ,
256+ [ 0x76F988DA , 0x831153B5 ] ,
257+ [ 0x983E5152 , 0xEE66DFAB ] ,
258+ [ 0xA831C66D , 0x2DB43210 ] ,
259+ [ 0xB00327C8 , 0x98FB213F ] ,
260+ [ 0xBF597FC7 , 0xBEEF0EE4 ] ,
261+ [ 0xC6E00BF3 , 0x3DA88FC2 ] ,
262+ [ 0xD5A79147 , 0x930AA725 ] ,
263+ [ 0x06CA6351 , 0xE003826F ] ,
264+ [ 0x14292967 , 0x0A0E6E70 ] ,
265+ [ 0x27B70A85 , 0x46D22FFC ] ,
266+ [ 0x2E1B2138 , 0x5C26C926 ] ,
267+ [ 0x4D2C6DFC , 0x5AC42AED ] ,
268+ [ 0x53380D13 , 0x9D95B3DF ] ,
269+ [ 0x650A7354 , 0x8BAF63DE ] ,
270+ [ 0x766A0ABB , 0x3C77B2A8 ] ,
271+ [ 0x81C2C92E , 0x47EDAEE6 ] ,
272+ [ 0x92722C85 , 0x1482353B ] ,
273+ [ 0xA2BFE8A1 , 0x4CF10364 ] ,
274+ [ 0xA81A664B , 0xBC423001 ] ,
275+ [ 0xC24B8B70 , 0xD0F89791 ] ,
276+ [ 0xC76C51A3 , 0x0654BE30 ] ,
277+ [ 0xD192E819 , 0xD6EF5218 ] ,
278+ [ 0xD6990624 , 0x5565A910 ] ,
279+ [ 0xF40E3585 , 0x5771202A ] ,
280+ [ 0x106AA070 , 0x32BBD1B8 ] ,
281+ [ 0x19A4C116 , 0xB8D2D0C8 ] ,
282+ [ 0x1E376C08 , 0x5141AB53 ] ,
283+ [ 0x2748774C , 0xDF8EEB99 ] ,
284+ [ 0x34B0BCB5 , 0xE19B48A8 ] ,
285+ [ 0x391C0CB3 , 0xC5C95A63 ] ,
286+ [ 0x4ED8AA4A , 0xE3418ACB ] ,
287+ [ 0x5B9CCA4F , 0x7763E373 ] ,
288+ [ 0x682E6FF3 , 0xD6B2B8A3 ] ,
289+ [ 0x748F82EE , 0x5DEFB2FC ] ,
290+ [ 0x78A5636F , 0x43172F60 ] ,
291+ [ 0x84C87814 , 0xA1F0AB72 ] ,
292+ [ 0x8CC70208 , 0x1A6439EC ] ,
293+ [ 0x90BEFFFA , 0x23631E28 ] ,
294+ [ 0xA4506CEB , 0xDE82BDE9 ] ,
295+ [ 0xBEF9A3F7 , 0xB2C67915 ] ,
296+ [ 0xC67178F2 , 0xE372532B ] ,
297+ [ 0xCA273ECE , 0xEA26619C ] ,
298+ [ 0xD186B8C7 , 0x21C0C207 ] ,
299+ [ 0xEADA7DD6 , 0xCDE0EB1E ] ,
300+ [ 0xF57D4F7F , 0xEE6ED178 ] ,
301+ [ 0x06F067AA , 0x72176FBA ] ,
302+ [ 0x0A637DC5 , 0xA2C898A6 ] ,
303+ [ 0x113F9804 , 0xBEF90DAE ] ,
304+ [ 0x1B710B35 , 0x131C471B ] ,
305+ [ 0x28DB77F5 , 0x23047D84 ] ,
306+ [ 0x32CAAB7B , 0x40C72493 ] ,
307+ [ 0x3C9EBE0A , 0x15C9BEBC ] ,
308+ [ 0x431D67C4 , 0x9C100D4C ] ,
309+ [ 0x4CC5D4BE , 0xCB3E42B6 ] ,
310+ [ 0x597F299C , 0xFC657E2A ] ,
311+ [ 0x5FCB6FAB , 0x3AD6FAEC ] ,
312+ [ 0x6C44198C , 0x4A475817 ] ,
270313 ] . map ( pair => [ pair [ 0 ] , pair [ 1 ] ] as [ number , number ] )
271314
272315 // Initial hash states
273316 _states = {
274317 'SHA-512' : [
275- [ 0x6A09E667 , 0xF3BCC908 ] , [ 0xBB67AE85 , 0x84CAA73B ] ,
276- [ 0x3C6EF372 , 0xFE94F82B ] , [ 0xA54FF53A , 0x5F1D36F1 ] ,
277- [ 0x510E527F , 0xADE682D1 ] , [ 0x9B05688C , 0x2B3E6C1F ] ,
278- [ 0x1F83D9AB , 0xFB41BD6B ] , [ 0x5BE0CD19 , 0x137E2179 ] ,
318+ [ 0x6A09E667 , 0xF3BCC908 ] ,
319+ [ 0xBB67AE85 , 0x84CAA73B ] ,
320+ [ 0x3C6EF372 , 0xFE94F82B ] ,
321+ [ 0xA54FF53A , 0x5F1D36F1 ] ,
322+ [ 0x510E527F , 0xADE682D1 ] ,
323+ [ 0x9B05688C , 0x2B3E6C1F ] ,
324+ [ 0x1F83D9AB , 0xFB41BD6B ] ,
325+ [ 0x5BE0CD19 , 0x137E2179 ] ,
279326 ] . map ( pair => [ pair [ 0 ] , pair [ 1 ] ] as [ number , number ] ) ,
280327 'SHA-384' : [
281- [ 0xCBBB9D5D , 0xC1059ED8 ] , [ 0x629A292A , 0x367CD507 ] ,
282- [ 0x9159015A , 0x3070DD17 ] , [ 0x152FECD8 , 0xF70E5939 ] ,
283- [ 0x67332667 , 0xFFC00B31 ] , [ 0x8EB44A87 , 0x68581511 ] ,
284- [ 0xDB0C2E0D , 0x64F98FA7 ] , [ 0x47B5481D , 0xBEFA4FA4 ] ,
328+ [ 0xCBBB9D5D , 0xC1059ED8 ] ,
329+ [ 0x629A292A , 0x367CD507 ] ,
330+ [ 0x9159015A , 0x3070DD17 ] ,
331+ [ 0x152FECD8 , 0xF70E5939 ] ,
332+ [ 0x67332667 , 0xFFC00B31 ] ,
333+ [ 0x8EB44A87 , 0x68581511 ] ,
334+ [ 0xDB0C2E0D , 0x64F98FA7 ] ,
335+ [ 0x47B5481D , 0xBEFA4FA4 ] ,
285336 ] . map ( pair => [ pair [ 0 ] , pair [ 1 ] ] as [ number , number ] ) ,
286337 'SHA-512/256' : [
287- [ 0x22312194 , 0xFC2BF72C ] , [ 0x9F555FA3 , 0xC84C64C2 ] ,
288- [ 0x2393B86B , 0x6F53B151 ] , [ 0x96387719 , 0x5940EABD ] ,
289- [ 0x96283EE2 , 0xA88EFFE3 ] , [ 0xBE5E1E25 , 0x53863992 ] ,
290- [ 0x2B0199FC , 0x2C85B8AA ] , [ 0x0EB72DDC , 0x81C52CA2 ] ,
338+ [ 0x22312194 , 0xFC2BF72C ] ,
339+ [ 0x9F555FA3 , 0xC84C64C2 ] ,
340+ [ 0x2393B86B , 0x6F53B151 ] ,
341+ [ 0x96387719 , 0x5940EABD ] ,
342+ [ 0x96283EE2 , 0xA88EFFE3 ] ,
343+ [ 0xBE5E1E25 , 0x53863992 ] ,
344+ [ 0x2B0199FC , 0x2C85B8AA ] ,
345+ [ 0x0EB72DDC , 0x81C52CA2 ] ,
291346 ] . map ( pair => [ pair [ 0 ] , pair [ 1 ] ] as [ number , number ] ) ,
292347 'SHA-512/224' : [
293- [ 0x8C3D37C8 , 0x19544DA2 ] , [ 0x73E19966 , 0x89DCD4D6 ] ,
294- [ 0x1DFAB7AE , 0x32FF9C82 ] , [ 0x679DD514 , 0x582F9FCF ] ,
295- [ 0x0F6D2B69 , 0x7BD44DA8 ] , [ 0x77E36F73 , 0x04C48942 ] ,
296- [ 0x3F9D85A8 , 0x6A1D36C8 ] , [ 0x1112E6AD , 0x91D692A1 ] ,
348+ [ 0x8C3D37C8 , 0x19544DA2 ] ,
349+ [ 0x73E19966 , 0x89DCD4D6 ] ,
350+ [ 0x1DFAB7AE , 0x32FF9C82 ] ,
351+ [ 0x679DD514 , 0x582F9FCF ] ,
352+ [ 0x0F6D2B69 , 0x7BD44DA8 ] ,
353+ [ 0x77E36F73 , 0x04C48942 ] ,
354+ [ 0x3F9D85A8 , 0x6A1D36C8 ] ,
355+ [ 0x1112E6AD , 0x91D692A1 ] ,
297356 ] . map ( pair => [ pair [ 0 ] , pair [ 1 ] ] as [ number , number ] ) ,
298357 }
299358
@@ -514,16 +573,16 @@ const createSHA512_224: () => MessageDigest = () => create('SHA-512/224')
514573
515574// Export all implementations
516575export const sha512 : SHA512API = {
517- create : create ,
576+ create,
518577 sha384 : { create : createSHA384 } ,
519578 sha256 : { create : createSHA512_256 } ,
520579 sha224 : { create : createSHA512_224 } ,
521580}
522581
523582// Export for compatibility with forge namespace
524583export const algorithms : Record < string , { create : ( ) => MessageDigest } > = {
525- sha512 : { create : create } ,
526- sha384 : { create : createSHA384 } ,
584+ ' sha512' : { create } ,
585+ ' sha384' : { create : createSHA384 } ,
527586 'sha512/256' : { create : createSHA512_256 } ,
528587 'sha512/224' : { create : createSHA512_224 } ,
529588}
0 commit comments