コード例 #1
0
  @SuppressWarnings("unchecked")
  public static boolean isSigningKey(PGPPublicKey key) {
    if (key.getVersion() <= 3) {
      return true;
    }

    // special case
    if (key.getAlgorithm() == PGPPublicKey.RSA_SIGN) {
      return true;
    }

    for (PGPSignature sig : new IterableIterator<PGPSignature>(key.getSignatures())) {
      if (key.isMasterKey() && sig.getKeyID() != key.getKeyID()) {
        continue;
      }
      PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets();

      if (hashed != null && (hashed.getKeyFlags() & KeyFlags.SIGN_DATA) != 0) {
        return true;
      }

      PGPSignatureSubpacketVector unhashed = sig.getUnhashedSubPackets();

      if (unhashed != null && (unhashed.getKeyFlags() & KeyFlags.SIGN_DATA) != 0) {
        return true;
      }
    }

    return false;
  }
コード例 #2
0
  @SuppressWarnings("unchecked")
  public static boolean isCertificationKey(PGPPublicKey key) {
    if (key.getVersion() <= 3) {
      return true;
    }

    for (PGPSignature sig : new IterableIterator<PGPSignature>(key.getSignatures())) {
      if (key.isMasterKey() && sig.getKeyID() != key.getKeyID()) {
        continue;
      }
      PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets();

      if (hashed != null && (hashed.getKeyFlags() & KeyFlags.CERTIFY_OTHER) != 0) {
        return true;
      }

      PGPSignatureSubpacketVector unhashed = sig.getUnhashedSubPackets();

      if (unhashed != null && (unhashed.getKeyFlags() & KeyFlags.CERTIFY_OTHER) != 0) {
        return true;
      }
    }

    return false;
  }
コード例 #3
0
  @SuppressWarnings("unchecked")
  public static boolean isEncryptionKey(PGPPublicKey key) {
    if (!key.isEncryptionKey()) {
      return false;
    }

    if (key.getVersion() <= 3) {
      // this must be true now
      return key.isEncryptionKey();
    }

    // special cases
    if (key.getAlgorithm() == PGPPublicKey.ELGAMAL_ENCRYPT) {
      return true;
    }

    if (key.getAlgorithm() == PGPPublicKey.RSA_ENCRYPT) {
      return true;
    }

    for (PGPSignature sig : new IterableIterator<PGPSignature>(key.getSignatures())) {
      if (key.isMasterKey() && sig.getKeyID() != key.getKeyID()) {
        continue;
      }
      PGPSignatureSubpacketVector hashed = sig.getHashedSubPackets();

      if (hashed != null
          && (hashed.getKeyFlags() & (KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE)) != 0) {
        return true;
      }

      PGPSignatureSubpacketVector unhashed = sig.getUnhashedSubPackets();

      if (unhashed != null
          && (unhashed.getKeyFlags() & (KeyFlags.ENCRYPT_COMMS | KeyFlags.ENCRYPT_STORAGE)) != 0) {
        return true;
      }
    }
    return false;
  }