1+ import crypto from 'crypto'
12import jose from 'jose'
2- import hkdf from 'futoin-hkdf'
33import logger from './logger'
44
55// Set default algorithm to use for auto-generated signing key
@@ -136,13 +136,32 @@ async function getToken (params) {
136136let DERIVED_SIGNING_KEY_WARNING = false
137137let DERIVED_ENCRYPTION_KEY_WARNING = false
138138
139+ // Do the better hkdf of Node.js one added in `v15.0.0` and Third Party one
140+ function hkdf ( secret , { byteLength, encryptionInfo, digest = 'sha256' } ) {
141+ if ( crypto . hkdfSync ) {
142+ return Buffer . from (
143+ crypto . hkdfSync (
144+ digest ,
145+ secret ,
146+ Buffer . alloc ( 0 ) ,
147+ encryptionInfo ,
148+ byteLength
149+ )
150+ )
151+ }
152+ return require ( 'futoin-hkdf' ) ( secret , byteLength , { info : encryptionInfo , hash : digest } )
153+ }
154+
139155function getDerivedSigningKey ( secret ) {
140156 if ( ! DERIVED_SIGNING_KEY_WARNING ) {
141157 logger . warn ( 'JWT_AUTO_GENERATED_SIGNING_KEY' )
142158 DERIVED_SIGNING_KEY_WARNING = true
143159 }
144160
145- const buffer = hkdf ( secret , 64 , { info : 'NextAuth.js Generated Signing Key' , hash : 'SHA-256' } )
161+ const buffer = hkdf ( secret , {
162+ byteLength : 64 ,
163+ encryptionInfo : 'NextAuth.js Generated Signing Key'
164+ } )
146165 const key = jose . JWK . asKey ( buffer , { alg : DEFAULT_SIGNATURE_ALGORITHM , use : 'sig' , kid : 'nextauth-auto-generated-signing-key' } )
147166 return key
148167}
@@ -153,7 +172,10 @@ function getDerivedEncryptionKey (secret) {
153172 DERIVED_ENCRYPTION_KEY_WARNING = true
154173 }
155174
156- const buffer = hkdf ( secret , 32 , { info : 'NextAuth.js Generated Encryption Key' , hash : 'SHA-256' } )
175+ const buffer = hkdf ( secret , {
176+ byteLength : 32 ,
177+ encryptionInfo : 'NextAuth.js Generated Encryption Key'
178+ } )
157179 const key = jose . JWK . asKey ( buffer , { alg : DEFAULT_ENCRYPTION_ALGORITHM , use : 'enc' , kid : 'nextauth-auto-generated-encryption-key' } )
158180 return key
159181}
0 commit comments