diff --git a/src/key.js b/src/key.js
index 1b1b375f..5e9ae18d 100644
--- a/src/key.js
+++ b/src/key.js
@@ -287,11 +287,6 @@ function isValidSigningKeyPacket(keyPacket, signature, date=new Date()) {
 Key.prototype.getSigningKeyPacket = async function (keyId=null, date=new Date(), userId={}) {
   const primaryKey = this.primaryKey;
   if (await this.verifyPrimaryKey(date, userId) === enums.keyStatus.valid) {
-    const primaryUser = await this.getPrimaryUser(date, userId);
-    if (primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) &&
-        isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, date)) {
-      return primaryKey;
-    }
     for (let i = 0; i < this.subKeys.length; i++) {
       if (!keyId || this.subKeys[i].subKey.getKeyId().equals(keyId)) {
         // eslint-disable-next-line no-await-in-loop
@@ -303,6 +298,11 @@ Key.prototype.getSigningKeyPacket = async function (keyId=null, date=new Date(),
         }
       }
     }
+    const primaryUser = await this.getPrimaryUser(date, userId);
+    if (primaryUser && (!keyId || primaryKey.getKeyId().equals(keyId)) &&
+        isValidSigningKeyPacket(primaryKey, primaryUser.selfCertification, date)) {
+      return primaryKey;
+    }
   }
   return null;
 };
diff --git a/test/general/signature.js b/test/general/signature.js
index 45d09779..7657db8c 100644
--- a/test/general/signature.js
+++ b/test/general/signature.js
@@ -653,7 +653,7 @@ yYDnCgA=
     const plaintext = 'short message\nnext line\n한국어/조선말';
     const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0];
     const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0];
-    await privKey.primaryKey.decrypt('hello world');
+    await privKey.decrypt('hello world');
 
     return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) {
 
@@ -673,7 +673,7 @@ yYDnCgA=
     const plaintext = pub_key_arm2;
     const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0];
     const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0];
-    await privKey.primaryKey.decrypt('hello world');
+    await privKey.decrypt('hello world');
 
     return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) {
 
@@ -693,7 +693,7 @@ yYDnCgA=
     const plaintext = 'space: \nspace and tab: \t\nno trailing space\n  \ntab:\t\ntab and space:\t ';
     const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0];
     const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0];
-    await privKey.primaryKey.decrypt('hello world');
+    await privKey.decrypt('hello world');
 
     return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) {
 
@@ -713,7 +713,7 @@ yYDnCgA=
     const plaintext = openpgp.util.str_to_Uint8Array('short message\nnext line\n한국어/조선말');
     const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0];
     const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0];
-    await privKey.primaryKey.decrypt('hello world');
+    await privKey.decrypt('hello world');
 
     return openpgp.sign({ privateKeys:[privKey], data:plaintext }).then(function(signed) {
 
@@ -733,7 +733,7 @@ yYDnCgA=
     const plaintext = openpgp.util.str_to_Uint8Array('short message\nnext line\n한국어/조선말');
     const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0];
     const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0];
-    await privKey.primaryKey.decrypt('hello world');
+    await privKey.decrypt('hello world');
 
     return openpgp.sign({ privateKeys:[privKey], data:plaintext, armor:false }).then(function(signed) {
 
@@ -753,7 +753,7 @@ yYDnCgA=
     const plaintext = 'short message\nnext line\n한국어/조선말';
     const pubKey = openpgp.key.readArmored(pub_key_arm2).keys[0];
     const privKey = openpgp.key.readArmored(priv_key_arm2).keys[0];
-    await privKey.primaryKey.decrypt('hello world');
+    await privKey.decrypt('hello world');
     return openpgp.sign({ privateKeys:[privKey], data:plaintext, detached: true}).then(function(signed) {
       const signature = openpgp.signature.readArmored(signed.signature);
       return openpgp.verify({ publicKeys:[pubKey], message: openpgp.message.fromBinary(openpgp.util.str_to_Uint8Array(openpgp.util.encode_utf8(plaintext))), signature: signature });