@@ -399,7 +399,7 @@ class SecretKeyPacket extends PublicKeyPacket {
399399 this . usedModernAEAD = ! this . isLegacyAEAD ; // legacy AEAD does not guarantee integrity of public key material
400400
401401 const serializedPacketTag = writeTag ( this . constructor . tag ) ;
402- const key = await produceEncryptionKey ( this . version , this . s2k , passphrase , this . symmetric , this . aead , serializedPacketTag , this . isLegacyAEAD ) ;
402+ const key = await produceEncryptionKey ( this . version , this . s2k , passphrase , this . symmetric , this . aead , serializedPacketTag , this . isLegacyAEAD , config ) ;
403403
404404 const modeInstance = await mode ( this . symmetric , key ) ;
405405 this . iv = this . isLegacyAEAD ? getRandomBytes ( blockSize ) : getRandomBytes ( mode . ivLength ) ;
@@ -411,7 +411,7 @@ class SecretKeyPacket extends PublicKeyPacket {
411411 } else {
412412 this . s2kUsage = 254 ;
413413 this . usedModernAEAD = false ;
414- const key = await produceEncryptionKey ( this . version , this . s2k , passphrase , this . symmetric ) ;
414+ const key = await produceEncryptionKey ( this . version , this . s2k , passphrase , this . symmetric , undefined , undefined , undefined , config ) ;
415415 this . iv = getRandomBytes ( blockSize ) ;
416416 this . keyMaterial = await cipherMode . cfb . encrypt ( this . symmetric , key , util . concatUint8Array ( [
417417 cleartext ,
@@ -426,10 +426,11 @@ class SecretKeyPacket extends PublicKeyPacket {
426426 * {@link SecretKeyPacket.isDecrypted} should be false, as
427427 * otherwise calls to this function will throw an error.
428428 * @param {String } passphrase - The passphrase for this private key as string
429+ * @param {Object } config
429430 * @throws {Error } if the key is already decrypted, or if decryption was not successful
430431 * @async
431432 */
432- async decrypt ( passphrase ) {
433+ async decrypt ( passphrase , config = defaultConfig ) {
433434 if ( this . isDummy ( ) ) {
434435 return false ;
435436 }
@@ -446,7 +447,7 @@ class SecretKeyPacket extends PublicKeyPacket {
446447 const serializedPacketTag = writeTag ( this . constructor . tag ) ; // relevant for AEAD only
447448 if ( this . s2kUsage === 254 || this . s2kUsage === 253 ) {
448449 key = await produceEncryptionKey (
449- this . version , this . s2k , passphrase , this . symmetric , this . aead , serializedPacketTag , this . isLegacyAEAD ) ;
450+ this . version , this . s2k , passphrase , this . symmetric , this . aead , serializedPacketTag , this . isLegacyAEAD , config ) ;
450451 } else if ( this . s2kUsage === 255 ) {
451452 throw new Error ( 'Encrypted private key is authenticated using an insecure two-byte hash' ) ;
452453 } else {
@@ -569,18 +570,19 @@ class SecretKeyPacket extends PublicKeyPacket {
569570 * @param {module:enums.aead } [aeadMode] - for AEAD-encrypted keys only (excluding v5)
570571 * @param {Uint8Array } [serializedPacketTag] - for AEAD-encrypted keys only (excluding v5)
571572 * @param {Boolean } [isLegacyAEAD] - for AEAD-encrypted keys from RFC4880bis (v4 and v5 only)
573+ * @param {Object } config
572574 * @returns encryption key
573575 * @access private
574576 */
575- async function produceEncryptionKey ( keyVersion , s2k , passphrase , cipherAlgo , aeadMode , serializedPacketTag , isLegacyAEAD ) {
577+ async function produceEncryptionKey ( keyVersion , s2k , passphrase , cipherAlgo , aeadMode , serializedPacketTag , isLegacyAEAD , config ) {
576578 if ( s2k . type === 'argon2' && ! aeadMode ) {
577579 throw new Error ( 'Using Argon2 S2K without AEAD is not allowed' ) ;
578580 }
579581 if ( s2k . type === 'simple' && keyVersion === 6 ) {
580582 throw new Error ( 'Using Simple S2K with version 6 keys is not allowed' ) ;
581583 }
582584 const { keySize } = getCipherParams ( cipherAlgo ) ;
583- const derivedKey = await s2k . produceKey ( passphrase , keySize ) ;
585+ const derivedKey = await s2k . produceKey ( passphrase , keySize , config ) ;
584586 if ( ! aeadMode || keyVersion === 5 || isLegacyAEAD ) {
585587 return derivedKey ;
586588 }
0 commit comments