public byte[] encryptBytes(byte[] body) {
    try {
      ECPublicKey theirPublic = asymmetricMasterSecret.getDjbPublicKey();
      ECKeyPair ourKeyPair = Curve.generateKeyPair();
      byte[] secret = Curve.calculateAgreement(theirPublic, ourKeyPair.getPrivateKey());
      MasterCipher masterCipher = getMasterCipherForSecret(secret);
      byte[] encryptedBodyBytes = masterCipher.encryptBytes(body);

      PublicKey ourPublicKey = new PublicKey(31337, ourKeyPair.getPublicKey());
      byte[] publicKeyBytes = ourPublicKey.serialize();

      return Util.combine(publicKeyBytes, encryptedBodyBytes);
    } catch (InvalidKeyException e) {
      throw new AssertionError(e);
    }
  }