/** * Do we know about the following key? * * @since 0.7.12 */ public boolean haveKey(String key) { if (key.length() != KEYSIZE_B64_BYTES) return false; SigningPublicKey signingPublicKey = new SigningPublicKey(); try { signingPublicKey.fromBase64(key); } catch (DataFormatException dfe) { return false; } return _trustedKeys.containsKey(signingPublicKey); }
/** * Duplicate keys or names rejected, except that duplicate empty names are allowed * * @param key 172 character base64 string * @param name non-null but "" ok * @since 0.7.12 * @return true if successful */ public boolean addKey(String key, String name) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Adding " + name + ": " + key); SigningPublicKey signingPublicKey = new SigningPublicKey(); try { // fromBase64() will throw a DFE if length is not right signingPublicKey.fromBase64(key); } catch (DataFormatException dfe) { _log.error("Invalid signing key for " + name + " : " + key, dfe); return false; } String oldName = _trustedKeys.get(signingPublicKey); // already there? if (name.equals(oldName)) return true; if (oldName != null && !oldName.equals("")) { _log.error("Key for " + name + " already stored for different name " + oldName + " : " + key); return false; } if ((!name.equals("")) && _trustedKeys.containsValue(name)) { _log.error("Key mismatch for " + name + ", spoof attempt? : " + key); return false; } _trustedKeys.put(signingPublicKey, name); return true; }