@Override public void prepare(SubRequest subRequest, MOTableRow row, MOTableRow changeSet, int column) { super.prepare(subRequest, row, changeSet, column); DHKeyInfo keyInfo = getDHKeyInfo(row, column); if (keyInfo == null || keyInfo.getKeyPair() == null || !(keyInfo.getKeyPair().getPublic() instanceof DHPublicKey)) { subRequest.setErrorStatus(SnmpConstants.SNMP_ERROR_WRONG_VALUE); } Variable variable = subRequest.getVariableBinding().getVariable(); if (variable instanceof OctetString) { OctetString yz = (OctetString)variable; OctetString yl = DHOperations.derivePublicKey(keyInfo.getKeyPair()); try { OctetString yr = yz.substring(0, yl.length()); if (!yr.equals(yl)) { subRequest.setErrorStatus(SnmpConstants.SNMP_ERROR_WRONG_VALUE); } } catch (IndexOutOfBoundsException ioobe) { subRequest.setErrorStatus(SnmpConstants.SNMP_ERROR_WRONG_VALUE); } } }
@Override public void get(SubRequest subRequest, MOTableRow row, int column) { DHKeyInfo keyInfo = getDHKeyInfo(row, column); if (keyInfo != null && getAccess().isAccessibleForRead()) { if (keyInfo.getKeyPair() == null) { try { keyInfo.generatePublicKey(dhParameters); } catch (NoSuchAlgorithmException e) { LOGGER.error("Failed to generate DH public key because Diffie-Hellman algorithm is not available", e); } catch (InvalidAlgorithmParameterException e) { LOGGER.error("Failed to generate DH public key because of invalid parameters", e); } } subRequest.getVariableBinding().setVariable(DHOperations.derivePublicKey(keyInfo.getKeyPair())); } else { subRequest.getStatus().setErrorStatus(SnmpConstants.SNMP_ERROR_NO_ACCESS); } subRequest.completed(); }
OctetString yl = DHOperations.derivePublicKey(keyInfo.getKeyPair()); OctetString z = new OctetString(yz.substring(yl.length(), yz.length())); if (keyInfo.getKeyAgreement() == null) {