From c6559631a23a92c60b75f9ee07e9b9f06dc2dcd3 Mon Sep 17 00:00:00 2001 From: Gert-Jan van der Heiden Date: Wed, 23 Dec 2020 18:09:17 +0100 Subject: [PATCH 01/17] [#130](https://github.com/hap-java/HAP-Java/pull/130) --- CHANGES.md | 1 + pom.xml | 14 ++++---------- .../hapjava/server/impl/HomekitUtils.java | 2 +- .../server/impl/crypto/ChachaDecoder.java | 8 ++------ .../server/impl/crypto/ChachaEncoder.java | 4 +--- .../hapjava/server/impl/pairing/ByteUtils.java | 2 +- .../impl/pairing/ClientEvidenceRoutineImpl.java | 4 +--- .../impl/pairing/HomekitSRP6ServerSession.java | 17 ++++++++++------- .../hapjava/server/impl/pairing/SrpHandler.java | 4 ++-- .../impl/pairing/TypeLengthValueUtils.java | 2 +- 10 files changed, 24 insertions(+), 34 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 758ddf6f7..cfa0188e1 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ * Valid values are supported for enum characteristics instead of min and max values * Supported valid states for Thermostat, SecuritySystem, HeaterCooler and HumidifierDehumidifier [#108] [#120](https://github.com/hap-java/HAP-Java/pull/120) * Support for FilterMaintenance. Can be used as a linked service for an Air Purifier [#124](https://github.com/hap-java/HAP-Java/pull/124) +* Update crypto libs [#130](https://github.com/hap-java/HAP-Java/pull/130) # HAP-Java 1.1.5 diff --git a/pom.xml b/pom.xml index 5faf6eafc..5ffbd9609 100644 --- a/pom.xml +++ b/pom.xml @@ -100,13 +100,13 @@ com.nimbusds srp6a - 1.5.2 + 2.1.0 org.bouncycastle bcprov-jdk15on - 1.51 + 1.67 @@ -115,22 +115,16 @@ 1.0.1 - - org.zeromq - curve25519-java - 0.1.0 - - javax.json javax.json-api - 1.0 + 1.1.4 org.glassfish javax.json - 1.0.4 + 1.1.4 diff --git a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java index 9b5b2b8ee..9facbeb0b 100644 --- a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java @@ -14,7 +14,7 @@ public class HomekitUtils { private static volatile SecureRandom secureRandom; public static BigInteger generateSalt() { - return new BigInteger(SRP6Routines.generateRandomSalt(16)); + return new BigInteger(new SRP6Routines().generateRandomSalt(16)); } public static byte[] generateKey() throws InvalidAlgorithmParameterException { diff --git a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java index 4c74a469d..9b9c2cc5d 100644 --- a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java +++ b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java @@ -5,8 +5,6 @@ import org.bouncycastle.crypto.generators.Poly1305KeyGenerator; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.crypto.tls.AlertDescription; -import org.bouncycastle.crypto.tls.TlsFatalAlert; import org.bouncycastle.util.Arrays; public class ChachaDecoder { @@ -28,7 +26,7 @@ public byte[] decodeCiphertext(byte[] receivedMAC, byte[] additionalData, byte[] byte[] calculatedMAC = PolyKeyCreator.create(macKey, additionalData, ciphertext); if (!Arrays.constantTimeAreEqual(calculatedMAC, receivedMAC)) { - throw new TlsFatalAlert(AlertDescription.bad_record_mac); + throw new IOException("received an incorrect MAC"); } byte[] output = new byte[ciphertext.length]; @@ -45,9 +43,7 @@ private KeyParameter initRecordMAC(ChaChaEngine cipher) { byte[] firstBlock = new byte[64]; cipher.processBytes(firstBlock, 0, firstBlock.length, firstBlock, 0); - // NOTE: The BC implementation puts 'r' after 'k' - System.arraycopy(firstBlock, 0, firstBlock, 32, 16); - KeyParameter macKey = new KeyParameter(firstBlock, 16, 32); + KeyParameter macKey = new KeyParameter(firstBlock, 0, 32); Poly1305KeyGenerator.clamp(macKey.getKey()); return macKey; } diff --git a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java index 3304e7d9a..3649844eb 100644 --- a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java +++ b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java @@ -39,9 +39,7 @@ private KeyParameter initRecordMAC(ChaChaEngine cipher) { byte[] firstBlock = new byte[64]; cipher.processBytes(firstBlock, 0, firstBlock.length, firstBlock, 0); - // NOTE: The BC implementation puts 'r' after 'k' - System.arraycopy(firstBlock, 0, firstBlock, 32, 16); - KeyParameter macKey = new KeyParameter(firstBlock, 16, 32); + KeyParameter macKey = new KeyParameter(firstBlock, 0, 32); Poly1305KeyGenerator.clamp(macKey.getKey()); return macKey; } diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java b/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java index 6516e2e29..e65beec3c 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java @@ -22,7 +22,7 @@ public static byte[] joinBytes(byte[]... piece) { return ret; } - public static byte[] toByteArray(BigInteger i) { + public static byte[] toUnsignedByteArray(BigInteger i) { byte[] array = i.toByteArray(); if (array[0] == 0) { array = Arrays.copyOfRange(array, 1, array.length); diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java index 16c514707..0d55985f9 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java @@ -8,9 +8,7 @@ class ClientEvidenceRoutineImpl implements ClientEvidenceRoutine { - public ClientEvidenceRoutineImpl() { - // TODO Auto-generated constructor stub - } + public ClientEvidenceRoutineImpl() {} /** * Calculates M1 according to the following formula: diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java b/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java index 3841d9fb7..116fced13 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java @@ -8,6 +8,7 @@ import com.nimbusds.srp6.SRP6Session; import com.nimbusds.srp6.URoutineContext; import java.math.BigInteger; +import java.security.MessageDigest; /** * This is a slightly modified version of the SRP6ServerSession class included with nimbus. The only @@ -74,6 +75,8 @@ public static enum State { /** The current SRP-6a auth state. */ private State state; + private MessageDigest digest; + /** * Creates a new server-side SRP-6a authentication session and sets its state to {@link * State#INIT}. @@ -92,7 +95,7 @@ public HomekitSRP6ServerSession(final SRP6CryptoParams config, final int timeout this.config = config; - digest = config.getMessageDigestInstance(); + this.digest = config.getMessageDigestInstance(); if (digest == null) throw new IllegalArgumentException("Unsupported hash algorithm 'H': " + config.H); @@ -151,13 +154,13 @@ public BigInteger step1(final String userID, final BigInteger s, final BigIntege throw new IllegalStateException("State violation: Session must be in INIT state"); // Generate server private and public values - k = SRP6Routines.computeK(digest, config.N, config.g); + k = new SRP6Routines().computeK(digest, config.N, config.g); digest.reset(); b = HomekitSRP6Routines.generatePrivateValue(config.N, random); digest.reset(); - B = SRP6Routines.computePublicServerValue(config.N, config.g, k, v, b); + B = new SRP6Routines().computePublicServerValue(config.N, config.g, k, v, b); state = State.STEP_1; @@ -234,7 +237,7 @@ public BigInteger step2(final BigInteger A, final BigInteger M1) throws SRP6Exce if (hasTimedOut()) throw new SRP6Exception("Session timeout", SRP6Exception.CauseType.TIMEOUT); // Check A validity - if (!SRP6Routines.isValidPublicValue(config.N, A)) + if (!new SRP6Routines().isValidPublicValue(config.N, A)) throw new SRP6Exception( "Bad client public value 'A'", SRP6Exception.CauseType.BAD_PUBLIC_VALUE); @@ -246,11 +249,11 @@ public BigInteger step2(final BigInteger A, final BigInteger M1) throws SRP6Exce URoutineContext hashedKeysContext = new URoutineContext(A, B); u = hashedKeysRoutine.computeU(config, hashedKeysContext); } else { - u = SRP6Routines.computeU(digest, config.N, A, B); + u = new SRP6Routines().computeU(digest, config.N, A, B); digest.reset(); } - S = SRP6Routines.computeSessionKey(config.N, v, u, A, b); + S = new SRP6Routines().computeSessionKey(config.N, v, u, A, b); // Compute the own client evidence message 'M1' BigInteger computedM1; @@ -262,7 +265,7 @@ public BigInteger step2(final BigInteger A, final BigInteger M1) throws SRP6Exce computedM1 = clientEvidenceRoutine.computeClientEvidence(config, ctx); } else { // With default routine - computedM1 = SRP6Routines.computeClientEvidence(digest, A, B, S); + computedM1 = new SRP6Routines().computeClientEvidence(digest, A, B, S); digest.reset(); } diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java index e02ccdb90..8d26d62dc 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java @@ -82,8 +82,8 @@ private HttpResponse step2(Stage2Request request) throws Exception { public byte[] getK() { MessageDigest digest = session.getCryptoParams().getMessageDigestInstance(); - BigInteger S = session.getSessionKey(false); - byte[] sBytes = bigIntegerToUnsignedByteArray(S); + BigInteger S = session.getSessionKey(); + byte[] sBytes = toUnsignedByteArray(S); return digest.digest(sBytes); } diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java b/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java index 396829d34..03665d94d 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java @@ -38,7 +38,7 @@ private Encoder() { } public void add(MessageType type, BigInteger i) throws IOException { - add(type, ByteUtils.toByteArray(i)); + add(type, ByteUtils.toUnsignedByteArray(i)); } public void add(MessageType type, short b) { From 1061cbe7dc4514d35a343f3e7b7f4efecda5cbc0 Mon Sep 17 00:00:00 2001 From: Gert-Jan van der Heiden Date: Wed, 23 Dec 2020 18:16:34 +0100 Subject: [PATCH 02/17] #130(https://github.com/hap-java/HAP-Java/pull/130) --- pom.xml | 2 +- .../hapjava/server/impl/HomekitUtils.java | 6 +-- .../pairing/ClientEvidenceRoutineImpl.java | 14 ++++--- .../server/impl/pairing/PairingManager.java | 4 +- .../pairing/ServerEvidenceRoutineImpl.java | 8 ++-- .../server/impl/pairing/SrpHandler.java | 40 ++++--------------- 6 files changed, 27 insertions(+), 47 deletions(-) diff --git a/pom.xml b/pom.xml index 5ffbd9609..d4f47b432 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ net.vrallev.ecc ecc-25519-java - 1.0.1 + 1.0.3 diff --git a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java index 9facbeb0b..20a697ff9 100644 --- a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java @@ -2,7 +2,6 @@ import com.nimbusds.srp6.SRP6Routines; import java.math.BigInteger; -import java.security.InvalidAlgorithmParameterException; import java.security.SecureRandom; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -17,8 +16,9 @@ public static BigInteger generateSalt() { return new BigInteger(new SRP6Routines().generateRandomSalt(16)); } - public static byte[] generateKey() throws InvalidAlgorithmParameterException { - EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName("ed25519-sha-512"); + public static byte[] generateKey() { + EdDSAParameterSpec spec = + EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.CURVE_ED25519_SHA512); byte[] seed = new byte[spec.getCurve().getField().getb() / 8]; getSecureRandom().nextBytes(seed); return seed; diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java index 0d55985f9..7e139296c 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java @@ -1,5 +1,7 @@ package io.github.hapjava.server.impl.pairing; +import static io.github.hapjava.server.impl.pairing.ByteUtils.toUnsignedByteArray; + import com.nimbusds.srp6.*; import java.math.BigInteger; import java.nio.charset.StandardCharsets; @@ -25,10 +27,10 @@ public BigInteger computeClientEvidence( } catch (NoSuchAlgorithmException e) { throw new RuntimeException("Could not locate requested algorithm", e); } - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(cryptoParams.N)); + digest.update(toUnsignedByteArray(cryptoParams.N)); byte[] hN = digest.digest(); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(cryptoParams.g)); + digest.update(toUnsignedByteArray(cryptoParams.g)); byte[] hg = digest.digest(); byte[] hNhg = xor(hN, hg); @@ -36,14 +38,14 @@ public BigInteger computeClientEvidence( digest.update(ctx.userID.getBytes(StandardCharsets.UTF_8)); byte[] hu = digest.digest(); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.S)); + digest.update(toUnsignedByteArray(ctx.S)); byte[] hS = digest.digest(); digest.update(hNhg); digest.update(hu); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.s)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.A)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.B)); + digest.update(toUnsignedByteArray(ctx.s)); + digest.update(toUnsignedByteArray(ctx.A)); + digest.update(toUnsignedByteArray(ctx.B)); digest.update(hS); BigInteger ret = new BigInteger(1, digest.digest()); return ret; diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java b/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java index af6a6e01f..ee4b772f9 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java @@ -29,7 +29,7 @@ public HttpResponse handle(HttpRequest httpRequest) throws Exception { if (req.getStage() == Stage.ONE) { logger.trace("Starting pair for " + registry.getLabel()); srpHandler = new SrpHandler(authInfo.getPin(), authInfo.getSalt()); - return srpHandler.handle(req); + return srpHandler.step1(); } else if (req.getStage() == Stage.TWO) { logger.trace("Entering second stage of pair for " + registry.getLabel()); if (srpHandler == null) { @@ -37,7 +37,7 @@ public HttpResponse handle(HttpRequest httpRequest) throws Exception { return new UnauthorizedResponse(); } else { try { - return srpHandler.handle(req); + return srpHandler.step2((PairSetupRequest.Stage2Request) req); } catch (Exception e) { srpHandler = null; // You don't get to try again - need a new key logger.warn("Exception encountered while processing pairing request", e); diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java b/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java index 7cf7b3164..77739e9b2 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java @@ -1,5 +1,7 @@ package io.github.hapjava.server.impl.pairing; +import static io.github.hapjava.server.impl.pairing.ByteUtils.toUnsignedByteArray; + import com.nimbusds.srp6.SRP6CryptoParams; import com.nimbusds.srp6.SRP6ServerEvidenceContext; import com.nimbusds.srp6.ServerEvidenceRoutine; @@ -20,10 +22,10 @@ public BigInteger computeServerEvidence( throw new RuntimeException("Could not locate requested algorithm", e); } - byte[] hS = digest.digest(SrpHandler.bigIntegerToUnsignedByteArray(ctx.S)); + byte[] hS = digest.digest(toUnsignedByteArray(ctx.S)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.A)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.M1)); + digest.update(toUnsignedByteArray(ctx.A)); + digest.update(toUnsignedByteArray(ctx.M1)); digest.update(hS); return new BigInteger(1, digest.digest()); diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java index 8d26d62dc..ec4b34c97 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java @@ -1,25 +1,22 @@ package io.github.hapjava.server.impl.pairing; +import static io.github.hapjava.server.impl.pairing.ByteUtils.toUnsignedByteArray; + import com.nimbusds.srp6.*; import io.github.hapjava.server.impl.http.HttpResponse; import io.github.hapjava.server.impl.pairing.HomekitSRP6ServerSession.State; import io.github.hapjava.server.impl.pairing.PairSetupRequest.Stage2Request; import io.github.hapjava.server.impl.pairing.TypeLengthValueUtils.Encoder; import io.github.hapjava.server.impl.responses.ConflictResponse; -import io.github.hapjava.server.impl.responses.NotFoundResponse; import java.math.BigInteger; import java.security.MessageDigest; -import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; class SrpHandler { - // Precomputed safe 3072 bit prime 'N'. Origin RFC 5054, appendix A. - private static final BigInteger N_3072 = - new BigInteger( - "5809605995369958062791915965639201402176612226902900533702900882779736177890990861472094774477339581147373410185646378328043729800750470098210924487866935059164371588168047540943981644516632755067501626434556398193186628990071248660819361205119793693985433297036118232914410171876807536457391277857011849897410207519105333355801121109356897459426271845471397952675959440793493071628394122780510124618488232602464649876850458861245784240929258426287699705312584509625419513463605155428017165714465363094021609290561084025893662561222573202082865797821865270991145082200656978177192827024538990239969175546190770645685893438011714430426409338676314743571154537142031573004276428701433036381801705308659830751190352946025482059931306571004727362479688415574702596946457770284148435989129632853918392117997472632693078113129886487399347796982772784615865232621289656944284216824611318709764535152507354116344703769998514148343807"); - private static final BigInteger G = BigInteger.valueOf(5); + private static final int BIT_SIZE = 3072; + private static final String HASH_ALG_H = "SHA-512"; private static final String IDENTIFIER = "Pair-Setup"; private static final Logger logger = LoggerFactory.getLogger(SrpHandler.class); @@ -30,7 +27,7 @@ class SrpHandler { private final String pin; public SrpHandler(String pin, BigInteger salt) { - config = new SRP6CryptoParams(N_3072, G, "SHA-512"); + config = SRP6CryptoParams.getInstance(BIT_SIZE, HASH_ALG_H); session = new HomekitSRP6ServerSession(config); session.setClientEvidenceRoutine(new ClientEvidenceRoutineImpl()); session.setServerEvidenceRoutine(new ServerEvidenceRoutineImpl()); @@ -38,20 +35,7 @@ public SrpHandler(String pin, BigInteger salt) { this.salt = salt; } - public HttpResponse handle(PairSetupRequest request) throws Exception { - switch (request.getStage()) { - case ONE: - return step1(); - - case TWO: - return step2((Stage2Request) request); - - default: - return new NotFoundResponse(); - } - } - - private HttpResponse step1() throws Exception { + HttpResponse step1() throws Exception { if (session.getState() != State.INIT) { logger.warn("Session is not in state INIT when receiving step1"); return new ConflictResponse(); @@ -68,7 +52,7 @@ private HttpResponse step1() throws Exception { return new PairingResponse(encoder.toByteArray()); } - private HttpResponse step2(Stage2Request request) throws Exception { + HttpResponse step2(Stage2Request request) throws Exception { if (session.getState() != State.STEP_1) { logger.warn("Session is not in state Stage 1 when receiving step2"); return new ConflictResponse(); @@ -80,18 +64,10 @@ private HttpResponse step2(Stage2Request request) throws Exception { return new PairingResponse(encoder.toByteArray()); } - public byte[] getK() { + byte[] getK() { MessageDigest digest = session.getCryptoParams().getMessageDigestInstance(); BigInteger S = session.getSessionKey(); byte[] sBytes = toUnsignedByteArray(S); return digest.digest(sBytes); } - - public static byte[] bigIntegerToUnsignedByteArray(BigInteger i) { - byte[] array = i.toByteArray(); - if (array[0] == 0) { - array = Arrays.copyOfRange(array, 1, array.length); - } - return array; - } } From 6a472be54b99bd32d42bdd2ee33a6a031871e199 Mon Sep 17 00:00:00 2001 From: Oliver Dotzauer Date: Sun, 3 Jan 2021 00:57:01 +0100 Subject: [PATCH 03/17] fix typo in enum value --- .../characteristics/impl/garagedoor/CurrentDoorStateEnum.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateEnum.java b/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateEnum.java index 9d2b145ab..88474e6cc 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateEnum.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/garagedoor/CurrentDoorStateEnum.java @@ -15,7 +15,7 @@ public enum CurrentDoorStateEnum implements CharacteristicEnum { CLOSED(1), OPENING(2), CLOSING(3), - SOPPED(4); + STOPPED(4); private static final Map reverse; From 87bab73be807fec98b4f51b4a97326e3fd21045a Mon Sep 17 00:00:00 2001 From: Eugen Freiter Date: Sun, 24 Jan 2021 13:35:36 +0100 Subject: [PATCH 04/17] remove optional event parameters. it breaks some accessories in home app Signed-off-by: Eugen Freiter --- .../hapjava/characteristics/impl/base/BaseCharacteristic.java | 1 - 1 file changed, 1 deletion(-) diff --git a/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java index 73ce32df4..a90f1fadc 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/base/BaseCharacteristic.java @@ -113,7 +113,6 @@ protected CompletableFuture makeBuilder(int instanceId) { .add("type", shortType) .add("perms", perms.build()) .add("format", format) - .add("ev", false) .add("description", description); if (isReadable) setJsonValue(builder, value); return builder; From c9e61c74a450b75ec50183f93edf00d9603b27d2 Mon Sep 17 00:00:00 2001 From: Eugen Freiter Date: Tue, 2 Feb 2021 13:43:17 +0100 Subject: [PATCH 05/17] extend support for min/max/step to further accessories Signed-off-by: Eugen Freiter --- .../accessories/LightSensorAccessory.java | 31 +++++++++ .../AccessoryWithCarbonDioxideLevel.java | 62 ++++++++++++++++++ .../AccessoryWithCarbonMonoxideLevel.java | 64 ++++++++++++++++++- .../AccessoryWithColorTemperature.java | 19 ++++++ .../AccessoryWithDuration.java | 19 ++++++ .../AccessoryWithNitrogenDioxideDensity.java | 31 +++++++++ .../AccessoryWithOzoneDensity.java | 28 ++++++++ .../AccessoryWithPM10Density.java | 28 ++++++++ .../AccessoryWithPM25Density.java | 28 ++++++++ .../AccessoryWithRemainingDuration.java | 19 ++++++ .../AccessoryWithSulphurDioxideDensity.java | 31 +++++++++ .../AccessoryWithVOCDensity.java | 28 ++++++++ .../NitrogenDioxideDensityCharacteristic.java | 19 +++++- .../OzoneDensityCharacteristic.java | 19 +++++- .../airquality/PM10DensityCharacteristic.java | 19 +++++- .../airquality/PM25DensityCharacteristic.java | 19 +++++- .../SulphurDioxideDensityCharacteristic.java | 19 +++++- .../airquality/VOCDensityCharacteristic.java | 19 +++++- .../CarbonDioxideLevelCharacteristic.java | 19 +++++- .../CarbonDioxidePeakLevelCharacteristic.java | 19 +++++- .../CarbonMonoxideLevelCharacteristic.java | 19 +++++- ...CarbonMonoxidePeakLevelCharacteristic.java | 19 +++++- .../ColorTemperatureCharacteristic.java | 16 ++++- ...urrentAmbientLightLevelCharacteristic.java | 19 +++++- .../RemainingDurationCharacteristic.java | 15 ++++- .../impl/valve/SetDurationCharacteristic.java | 16 ++++- .../services/impl/AirQualityService.java | 15 +++++ .../impl/CarbonDioxideSensorService.java | 6 ++ .../services/impl/LightSensorService.java | 3 + .../services/impl/LightbulbService.java | 2 + .../services/impl/ThermostatService.java | 12 ++++ .../hapjava/services/impl/ValveService.java | 4 ++ 32 files changed, 646 insertions(+), 40 deletions(-) diff --git a/src/main/java/io/github/hapjava/accessories/LightSensorAccessory.java b/src/main/java/io/github/hapjava/accessories/LightSensorAccessory.java index bcdab09c4..2087b1e99 100644 --- a/src/main/java/io/github/hapjava/accessories/LightSensorAccessory.java +++ b/src/main/java/io/github/hapjava/accessories/LightSensorAccessory.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.lightsensor.CurrentAmbientLightLevelCharacteristic; import io.github.hapjava.services.Service; import io.github.hapjava.services.impl.LightSensorService; import java.util.Collection; @@ -31,6 +32,36 @@ public interface LightSensorAccessory extends HomekitAccessory { /** Unsubscribes from changes in the current ambient light level. */ void unsubscribeCurrentAmbientLightLevel(); + /** + * return the min value for current ambient light level. overwrite if you want to change the + * default value. + * + * @return min current ambient light level + */ + default double getMinCurrentAmbientLightLevel() { + return CurrentAmbientLightLevelCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for current ambient light level. overwrite if you want to change the + * default value. + * + * @return max current ambient light level + */ + default double getMaxCurrentAmbientLightLevel() { + return CurrentAmbientLightLevelCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for current ambient light level. overwrite if you want to change the + * default value. + * + * @return min step current ambient light level + */ + default double getMinStepCurrentAmbientLightLevel() { + return CurrentAmbientLightLevelCharacteristic.DEFAULT_STEP; + } + @Override default Collection getServices() { return Collections.singleton(new LightSensorService(this)); diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonDioxideLevel.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonDioxideLevel.java index bd4bb3afc..bd143b22f 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonDioxideLevel.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonDioxideLevel.java @@ -1,6 +1,8 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.carbondioxidesensor.CarbonDioxideLevelCharacteristic; +import io.github.hapjava.characteristics.impl.carbondioxidesensor.CarbonDioxidePeakLevelCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with carbon dioxide level and peak level characteristic. */ @@ -20,6 +22,66 @@ public interface AccessoryWithCarbonDioxideLevel { */ CompletableFuture getCarbonDioxideLevel(); + /** + * return the min value for carbon dioxide level. overwrite if you want to change the default + * value. + * + * @return min carbon dioxide level + */ + default double getMinCarbonDioxideLevel() { + return CarbonDioxideLevelCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for carbon dioxide level. overwrite if you want to change the default + * value. + * + * @return max carbon dioxide level + */ + default double getMaxCarbonDioxideLevel() { + return CarbonDioxideLevelCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for carbon dioxide level. overwrite if you want to change the default + * value. + * + * @return min step carbon dioxide level + */ + default double getMinStepCarbonDioxideLevel() { + return CarbonDioxideLevelCharacteristic.DEFAULT_STEP; + } + + /** + * return the min value for carbon dioxide peak level. overwrite if you want to change the default + * value. + * + * @return min carbon dioxide peak level + */ + default double getMinCarbonDioxidePeakLevel() { + return CarbonDioxidePeakLevelCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for carbon dioxide peak level. overwrite if you want to change the default + * value. + * + * @return max carbon dioxide peak level + */ + default double getMaxCarbonDioxidePeakLevel() { + return CarbonDioxidePeakLevelCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for carbon dioxide peak level. overwrite if you want to change the + * default value. + * + * @return min step carbon dioxide peak level + */ + default double getMinStepCarbonDioxidePeakLevel() { + return CarbonDioxidePeakLevelCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in the carbon dioxide level. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonMonoxideLevel.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonMonoxideLevel.java index a3946c40b..cbccd9647 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonMonoxideLevel.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithCarbonMonoxideLevel.java @@ -1,9 +1,11 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.carbonmonoxidesensor.CarbonMonoxideLevelCharacteristic; +import io.github.hapjava.characteristics.impl.carbonmonoxidesensor.CarbonMonoxidePeakLevelCharacteristic; import java.util.concurrent.CompletableFuture; -/** Accessory with carbon dioxide level and peak level characteristic. */ +/** Accessory with carbon monoxide level and peak level characteristic. */ public interface AccessoryWithCarbonMonoxideLevel { /** @@ -20,6 +22,66 @@ public interface AccessoryWithCarbonMonoxideLevel { */ CompletableFuture getCarbonMonoxideLevel(); + /** + * return the min value for carbon monoxide level. overwrite if you want to change the default + * value. + * + * @return min carbon monoxide level + */ + default double getMinCarbonMonoxideLevel() { + return CarbonMonoxideLevelCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for carbon monoxide level. overwrite if you want to change the default + * value. + * + * @return max carbon monoxide level + */ + default double getMaxCarbonMonoxideLevel() { + return CarbonMonoxideLevelCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for carbon monoxide level. overwrite if you want to change the + * default value. + * + * @return min step carbon monoxide level + */ + default double getMinStepCarbonMonoxideLevel() { + return CarbonMonoxideLevelCharacteristic.DEFAULT_STEP; + } + + /** + * return the min value for carbon monoxide peak level. overwrite if you want to change the + * default value. + * + * @return min carbon monoxide peak level + */ + default double getMinCarbonMonoxidePeakLevel() { + return CarbonMonoxidePeakLevelCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for carbon monoxide peak level. overwrite if you want to change the + * default value. + * + * @return max carbon monoxide peak level + */ + default double getMaxCarbonMonoxidePeakLevel() { + return CarbonMonoxidePeakLevelCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for carbon monoxide peak level. overwrite if you want to change the + * default value. + * + * @return min step carbon monoxide peak level + */ + default double getMinStepCarbonMonoxidePeakLevel() { + return CarbonMonoxidePeakLevelCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in the carbon monoxide level. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithColorTemperature.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithColorTemperature.java index fee36884d..ecf74ba63 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithColorTemperature.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithColorTemperature.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.lightbulb.ColorTemperatureCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with color temperature. */ @@ -22,6 +23,24 @@ public interface AccessoryWithColorTemperature { */ CompletableFuture setColorTemperature(Integer value) throws Exception; + /** + * return the min value for color temperature. overwrite if you want to change the default value. + * + * @return min color temperature + */ + default int getMinColorTemperature() { + return ColorTemperatureCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for color temperature. overwrite if you want to change the default value. + * + * @return max color temperature + */ + default int getMaxColorTemperature() { + return ColorTemperatureCharacteristic.DEFAULT_MAX_VALUE; + } + /** * Subscribes to changes in color temperature. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithDuration.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithDuration.java index e3d310dfd..a5cebf97c 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithDuration.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithDuration.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.valve.SetDurationCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with duration characteristic. */ @@ -13,6 +14,24 @@ public interface AccessoryWithDuration { */ CompletableFuture getSetDuration(); + /** + * return the min value for duration. overwrite if you want to change the default value. + * + * @return min remaining duration + */ + default int getMinDuration() { + return SetDurationCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for duration. overwrite if you want to change the default value. + * + * @return max duration + */ + default int getMaxDuration() { + return SetDurationCharacteristic.DEFAULT_MAX_VALUE; + } + /** * Sets the duration for which the service should run. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithNitrogenDioxideDensity.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithNitrogenDioxideDensity.java index 685edfb5c..6aead4f98 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithNitrogenDioxideDensity.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithNitrogenDioxideDensity.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.airquality.NitrogenDioxideDensityCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with nitrogen dioxide density characteristic. */ @@ -13,6 +14,36 @@ public interface AccessoryWithNitrogenDioxideDensity { */ CompletableFuture getNitrogenDioxideDensity(); + /** + * return the min value for nitrogen dioxide density. overwrite if you want to change the default + * value. + * + * @return min nitrogen dioxide density + */ + default double getMinNitrogenDioxideDensity() { + return NitrogenDioxideDensityCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for nitrogen dioxide density. overwrite if you want to change the default + * value. + * + * @return max nitrogen dioxide density + */ + default double getMaxNitrogenDioxideDensity() { + return NitrogenDioxideDensityCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for nitrogen dioxide density. overwrite if you want to change the + * default value. + * + * @return min step nitrogen dioxide density + */ + default double getMinStepNitrogenDioxideDensity() { + return NitrogenDioxideDensityCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in nitrogen dioxide density. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithOzoneDensity.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithOzoneDensity.java index 87bb8fa74..efba2a49f 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithOzoneDensity.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithOzoneDensity.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.airquality.OzoneDensityCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with Ozone Density characteristic. */ @@ -13,6 +14,33 @@ public interface AccessoryWithOzoneDensity { */ CompletableFuture getOzoneDensity(); + /** + * return the min value for ozone density. overwrite if you want to change the default value. + * + * @return min ozone density + */ + default double getMinOzoneDensity() { + return OzoneDensityCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for ozone density. overwrite if you want to change the default value. + * + * @return max ozone density + */ + default double getMaxOzoneDensity() { + return OzoneDensityCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for ozone density. overwrite if you want to change the default value. + * + * @return min step ozone density + */ + default double getMinStepOzoneDensity() { + return OzoneDensityCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in ozone density. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM10Density.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM10Density.java index 2bfad14ac..2ae3cded0 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM10Density.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM10Density.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.airquality.PM10DensityCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with PM10 Density characteristic. */ @@ -13,6 +14,33 @@ public interface AccessoryWithPM10Density { */ CompletableFuture getPM10Density(); + /** + * return the min value for PM10 density. overwrite if you want to change the default value. + * + * @return min PM10 density + */ + default double getMinPM10Density() { + return PM10DensityCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for PM10 density. overwrite if you want to change the default value. + * + * @return max PM10 density + */ + default double getMaxPM10Density() { + return PM10DensityCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for PM10 density. overwrite if you want to change the default value. + * + * @return min step PM10 density + */ + default double getMinStepPM10Density() { + return PM10DensityCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in PM10 density. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM25Density.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM25Density.java index 11ad2a12e..02488f52d 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM25Density.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithPM25Density.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.airquality.PM25DensityCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with PM25 Density characteristic. */ @@ -13,6 +14,33 @@ public interface AccessoryWithPM25Density { */ CompletableFuture getPM25Density(); + /** + * return the min value for PM25 density. overwrite if you want to change the default value. + * + * @return min PM25 density + */ + default double getMinPM25Density() { + return PM25DensityCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for PM25 density. overwrite if you want to change the default value. + * + * @return max PM25 density + */ + default double getMaxPM25Density() { + return PM25DensityCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for PM25 density. overwrite if you want to change the default value. + * + * @return min step PM25 density + */ + default double getMinStepPM25Density() { + return PM25DensityCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in PM25 density. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithRemainingDuration.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithRemainingDuration.java index b949b413e..7859fb396 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithRemainingDuration.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithRemainingDuration.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.valve.RemainingDurationCharacteristic; import java.util.concurrent.CompletableFuture; /** @@ -17,6 +18,24 @@ public interface AccessoryWithRemainingDuration { */ CompletableFuture getRemainingDuration(); + /** + * return the min value for remaining duration. overwrite if you want to change the default value. + * + * @return min remaining duration + */ + default int getMinRemainingDuration() { + return RemainingDurationCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for remaining duration. overwrite if you want to change the default value. + * + * @return max remaining duration + */ + default int getMaxRemainingDuration() { + return RemainingDurationCharacteristic.DEFAULT_MAX_VALUE; + } + /** * Subscribes to changes in the duration; note it is not necessary to emit a change every second, * homekit infers the countdown progress client side. diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithSulphurDioxideDensity.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithSulphurDioxideDensity.java index 94fad0be4..dbe0cc947 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithSulphurDioxideDensity.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithSulphurDioxideDensity.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.airquality.SulphurDioxideDensityCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with sulphur dioxide density characteristic. */ @@ -13,6 +14,36 @@ public interface AccessoryWithSulphurDioxideDensity { */ CompletableFuture getSulphurDioxideDensity(); + /** + * return the min value for sulphur dioxide density. overwrite if you want to change the default + * value. + * + * @return min sulphur dioxide density + */ + default double getMinSulphurDioxideDensity() { + return SulphurDioxideDensityCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for sulphur dioxide density. overwrite if you want to change the default + * value. + * + * @return max sulphur dioxide density + */ + default double getMaxSulphurDioxideDensity() { + return SulphurDioxideDensityCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for sulphur dioxide density. overwrite if you want to change the + * default value. + * + * @return min step sulphur dioxide density + */ + default double getMinStepSulphurDioxideDensity() { + return SulphurDioxideDensityCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in sulphur dioxide density. * diff --git a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithVOCDensity.java b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithVOCDensity.java index b41cc43b7..f8a7bc46b 100644 --- a/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithVOCDensity.java +++ b/src/main/java/io/github/hapjava/accessories/optionalcharacteristic/AccessoryWithVOCDensity.java @@ -1,6 +1,7 @@ package io.github.hapjava.accessories.optionalcharacteristic; import io.github.hapjava.characteristics.HomekitCharacteristicChangeCallback; +import io.github.hapjava.characteristics.impl.airquality.VOCDensityCharacteristic; import java.util.concurrent.CompletableFuture; /** Accessory with VOC Density characteristic. */ @@ -13,6 +14,33 @@ public interface AccessoryWithVOCDensity { */ CompletableFuture getVOCDensity(); + /** + * return the min value for VOC density. overwrite if you want to change the default value. + * + * @return min VOC density + */ + default double getMinVOCDensity() { + return VOCDensityCharacteristic.DEFAULT_MIN_VALUE; + } + + /** + * return the max value for VOC density. overwrite if you want to change the default value. + * + * @return max VOC density + */ + default double getMaxVOCDensity() { + return VOCDensityCharacteristic.DEFAULT_MAX_VALUE; + } + + /** + * return the min step value for VOC density. overwrite if you want to change the default value. + * + * @return min step VOC density + */ + default double getMinStepVOCDensity() { + return VOCDensityCharacteristic.DEFAULT_STEP; + } + /** * Subscribes to changes in VOC density. * diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airquality/NitrogenDioxideDensityCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airquality/NitrogenDioxideDensityCharacteristic.java index 432a85029..1e37e28b6 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airquality/NitrogenDioxideDensityCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airquality/NitrogenDioxideDensityCharacteristic.java @@ -9,21 +9,34 @@ /** This characteristic contains the current NO2 density in micrograms/m3. */ public class NitrogenDioxideDensityCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 1000; + public static final double DEFAULT_STEP = 1; public NitrogenDioxideDensityCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000C4-0000-1000-8000-0026BB765291", "nitrogen dioxide density", - 0, - 1000, - 1, + minValue, + maxValue, + minStep, "micrograms", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public NitrogenDioxideDensityCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airquality/OzoneDensityCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airquality/OzoneDensityCharacteristic.java index 542dbce0b..577339288 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airquality/OzoneDensityCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airquality/OzoneDensityCharacteristic.java @@ -9,21 +9,34 @@ /** This characteristic contains the current ozone density in micrograms/m3. */ public class OzoneDensityCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 1000; + public static final double DEFAULT_STEP = 1; public OzoneDensityCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000C3-0000-1000-8000-0026BB765291", "ozone density", - 0, - 1000, - 1, + minValue, + maxValue, + minStep, "micrograms", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public OzoneDensityCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM10DensityCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM10DensityCharacteristic.java index fdb0b9b49..a7b9c1245 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM10DensityCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM10DensityCharacteristic.java @@ -11,21 +11,34 @@ * This characteristic contains the current PM10 micrometer particulate density in micrograms/m3. */ public class PM10DensityCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 1000; + public static final double DEFAULT_STEP = 1; public PM10DensityCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000C7-0000-1000-8000-0026BB765291", "PM10 density", - 0, - 1000, - 1, + minValue, + maxValue, + minStep, "micrograms", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public PM10DensityCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM25DensityCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM25DensityCharacteristic.java index c54831553..1667934ef 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM25DensityCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airquality/PM25DensityCharacteristic.java @@ -11,21 +11,34 @@ * This characteristic contains the current PM2.5 micrometer particulate density in micrograms/m3. */ public class PM25DensityCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 1000; + public static final double DEFAULT_STEP = 1; public PM25DensityCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000C6-0000-1000-8000-0026BB765291", "PM2.5 density", - 0, - 1000, - 1, + minValue, + maxValue, + minStep, "micrograms", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public PM25DensityCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airquality/SulphurDioxideDensityCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airquality/SulphurDioxideDensityCharacteristic.java index 03f668757..81df2c64b 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airquality/SulphurDioxideDensityCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airquality/SulphurDioxideDensityCharacteristic.java @@ -9,21 +9,34 @@ /** This characteristic contains the current SO2 density in micrograms/m3. */ public class SulphurDioxideDensityCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 1000; + public static final double DEFAULT_STEP = 1; public SulphurDioxideDensityCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000C5-0000-1000-8000-0026BB765291", "sulphur dioxide density", - 0, - 1000, - 1, + minValue, + maxValue, + minStep, "micrograms", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public SulphurDioxideDensityCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/airquality/VOCDensityCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/airquality/VOCDensityCharacteristic.java index 76e062f45..a752161c9 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/airquality/VOCDensityCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/airquality/VOCDensityCharacteristic.java @@ -12,21 +12,34 @@ * micrograms/m3. */ public class VOCDensityCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 1000; + public static final double DEFAULT_STEP = 1; public VOCDensityCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000C8-0000-1000-8000-0026BB765291", "VOC density", - 0, - 1000, - 1, + minValue, + maxValue, + minStep, "micrograms", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public VOCDensityCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideLevelCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideLevelCharacteristic.java index 7d1d8d440..b9b320564 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideLevelCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxideLevelCharacteristic.java @@ -11,21 +11,34 @@ * This characteristic indicates the detected level of Carbon Dioxide in parts per million (ppm). */ public class CarbonDioxideLevelCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 100000; + public static final double DEFAULT_STEP = 1; public CarbonDioxideLevelCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "00000093-0000-1000-8000-0026BB765291", "Carbon Dioxide Level", - 0, - 100000, - 1, + minValue, + maxValue, + minStep, "ppm", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public CarbonDioxideLevelCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxidePeakLevelCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxidePeakLevelCharacteristic.java index a2ad994fc..1a1793773 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxidePeakLevelCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/carbondioxidesensor/CarbonDioxidePeakLevelCharacteristic.java @@ -9,21 +9,34 @@ /** This characteristic indicates the highest detected level (ppm) of carbon dioxide. */ public class CarbonDioxidePeakLevelCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 100000; + public static final double DEFAULT_STEP = 1; public CarbonDioxidePeakLevelCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "00000094-0000-1000-8000-0026BB765291", "Carbon Dioxide Level", - 0, - 100000, - 1, + minValue, + maxValue, + minStep, "ppm", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public CarbonDioxidePeakLevelCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideLevelCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideLevelCharacteristic.java index 554638a22..e35171b38 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideLevelCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxideLevelCharacteristic.java @@ -9,21 +9,34 @@ /** This characteristic contains the Carbon Monoxide levels in parts per million (ppm). */ public class CarbonMonoxideLevelCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 100; + public static final double DEFAULT_STEP = 1; public CarbonMonoxideLevelCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "00000090-0000-1000-8000-0026BB765291", "Carbon Monoxide Level", - 0, - 100, - 1, + minValue, + maxValue, + minStep, "ppm", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public CarbonMonoxideLevelCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxidePeakLevelCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxidePeakLevelCharacteristic.java index 3a714674a..892901866 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxidePeakLevelCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/carbonmonoxidesensor/CarbonMonoxidePeakLevelCharacteristic.java @@ -9,21 +9,34 @@ /** This characteristic indicates the highest detected level (ppm) of Carbon Monoxide. */ public class CarbonMonoxidePeakLevelCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0; + public static final double DEFAULT_MAX_VALUE = 100; + public static final double DEFAULT_STEP = 1; public CarbonMonoxidePeakLevelCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "00000091-0000-1000-8000-0026BB765291", "Carbon Monoxide Peak Level", - 0, - 100000, - 1, + minValue, + maxValue, + minStep, "ppm", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public CarbonMonoxidePeakLevelCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/lightbulb/ColorTemperatureCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/lightbulb/ColorTemperatureCharacteristic.java index c7779233a..12886c7a1 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/lightbulb/ColorTemperatureCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/lightbulb/ColorTemperatureCharacteristic.java @@ -12,8 +12,12 @@ /** This characteristic describes color temperature in Kelvin */ public class ColorTemperatureCharacteristic extends IntegerCharacteristic implements EventableCharacteristic { + public static final int DEFAULT_MIN_VALUE = 50; + public static final int DEFAULT_MAX_VALUE = 400; public ColorTemperatureCharacteristic( + int minValue, + int maxValue, Supplier> getter, ExceptionalConsumer setter, Consumer subscriber, @@ -21,12 +25,20 @@ public ColorTemperatureCharacteristic( super( "000000CE-0000-1000-8000-0026BB765291", "color temperature", - 50, - 400, + minValue, + maxValue, "K", Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public ColorTemperatureCharacteristic( + Supplier> getter, + ExceptionalConsumer setter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, getter, setter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/lightsensor/CurrentAmbientLightLevelCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/lightsensor/CurrentAmbientLightLevelCharacteristic.java index aee5e24d5..afec35ce6 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/lightsensor/CurrentAmbientLightLevelCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/lightsensor/CurrentAmbientLightLevelCharacteristic.java @@ -9,21 +9,34 @@ /** This characteristic indicates the current light level in Lux */ public class CurrentAmbientLightLevelCharacteristic extends FloatCharacteristic { + public static final double DEFAULT_MIN_VALUE = 0.0001; + public static final double DEFAULT_MAX_VALUE = 100000; + public static final double DEFAULT_STEP = 0.0001; public CurrentAmbientLightLevelCharacteristic( + double minValue, + double maxValue, + double minStep, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "0000006B-0000-1000-8000-0026BB765291", "ambient light level", - 0.0001, - 100000, - 0.0001, + minValue, + maxValue, + minStep, "lux", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public CurrentAmbientLightLevelCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, DEFAULT_STEP, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/valve/RemainingDurationCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/valve/RemainingDurationCharacteristic.java index 4866be230..828fafab1 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/valve/RemainingDurationCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/valve/RemainingDurationCharacteristic.java @@ -15,20 +15,31 @@ */ public class RemainingDurationCharacteristic extends IntegerCharacteristic implements EventableCharacteristic { + public static final int DEFAULT_MIN_VALUE = 0; + public static final int DEFAULT_MAX_VALUE = 3600; public RemainingDurationCharacteristic( + int minValue, + int maxValue, Supplier> getter, Consumer subscriber, Runnable unsubscriber) { super( "000000D4-0000-1000-8000-0026BB765291", "remaining duration", - 0, - 3600, + minValue, + maxValue, "s", Optional.of(getter), Optional.empty(), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public RemainingDurationCharacteristic( + Supplier> getter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, getter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/characteristics/impl/valve/SetDurationCharacteristic.java b/src/main/java/io/github/hapjava/characteristics/impl/valve/SetDurationCharacteristic.java index a372d0515..59cef5646 100644 --- a/src/main/java/io/github/hapjava/characteristics/impl/valve/SetDurationCharacteristic.java +++ b/src/main/java/io/github/hapjava/characteristics/impl/valve/SetDurationCharacteristic.java @@ -12,8 +12,12 @@ /** This characteristic describes the duration, how long an accessory should be set to "InUse". */ public class SetDurationCharacteristic extends IntegerCharacteristic implements EventableCharacteristic { + public static final int DEFAULT_MIN_VALUE = 0; + public static final int DEFAULT_MAX_VALUE = 3600; public SetDurationCharacteristic( + int minValue, + int maxValue, Supplier> getter, ExceptionalConsumer setter, Consumer subscriber, @@ -21,12 +25,20 @@ public SetDurationCharacteristic( super( "000000D3-0000-1000-8000-0026BB765291", "set duration", - 0, - 3600, + minValue, + maxValue, "s", Optional.of(getter), Optional.of(setter), Optional.of(subscriber), Optional.of(unsubscriber)); } + + public SetDurationCharacteristic( + Supplier> getter, + ExceptionalConsumer setter, + Consumer subscriber, + Runnable unsubscriber) { + this(DEFAULT_MIN_VALUE, DEFAULT_MAX_VALUE, getter, setter, subscriber, unsubscriber); + } } diff --git a/src/main/java/io/github/hapjava/services/impl/AirQualityService.java b/src/main/java/io/github/hapjava/services/impl/AirQualityService.java index c9ccd6d62..4aa74c88f 100644 --- a/src/main/java/io/github/hapjava/services/impl/AirQualityService.java +++ b/src/main/java/io/github/hapjava/services/impl/AirQualityService.java @@ -53,6 +53,9 @@ public AirQualityService(AirQualityAccessory accessory) { if (accessory instanceof AccessoryWithNitrogenDioxideDensity) { addOptionalCharacteristic( new NitrogenDioxideDensityCharacteristic( + ((AccessoryWithNitrogenDioxideDensity) accessory).getMinNitrogenDioxideDensity(), + ((AccessoryWithNitrogenDioxideDensity) accessory).getMaxNitrogenDioxideDensity(), + ((AccessoryWithNitrogenDioxideDensity) accessory).getMinStepNitrogenDioxideDensity(), ((AccessoryWithNitrogenDioxideDensity) accessory)::getNitrogenDioxideDensity, ((AccessoryWithNitrogenDioxideDensity) accessory)::subscribeNitrogenDioxideDensity, ((AccessoryWithNitrogenDioxideDensity) accessory) @@ -62,6 +65,9 @@ public AirQualityService(AirQualityAccessory accessory) { if (accessory instanceof AccessoryWithSulphurDioxideDensity) { addOptionalCharacteristic( new SulphurDioxideDensityCharacteristic( + ((AccessoryWithSulphurDioxideDensity) accessory).getMinSulphurDioxideDensity(), + ((AccessoryWithSulphurDioxideDensity) accessory).getMaxSulphurDioxideDensity(), + ((AccessoryWithSulphurDioxideDensity) accessory).getMinStepSulphurDioxideDensity(), ((AccessoryWithSulphurDioxideDensity) accessory)::getSulphurDioxideDensity, ((AccessoryWithSulphurDioxideDensity) accessory)::subscribeSulphurDioxideDensity, ((AccessoryWithSulphurDioxideDensity) accessory)::unsubscribeSulphurDioxideDensity)); @@ -69,6 +75,9 @@ public AirQualityService(AirQualityAccessory accessory) { if (accessory instanceof AccessoryWithPM25Density) { addOptionalCharacteristic( new PM25DensityCharacteristic( + ((AccessoryWithPM25Density) accessory).getMinPM25Density(), + ((AccessoryWithPM25Density) accessory).getMaxPM25Density(), + ((AccessoryWithPM25Density) accessory).getMinStepPM25Density(), ((AccessoryWithPM25Density) accessory)::getPM25Density, ((AccessoryWithPM25Density) accessory)::subscribePM25Density, ((AccessoryWithPM25Density) accessory)::unsubscribePM25Density)); @@ -76,6 +85,9 @@ public AirQualityService(AirQualityAccessory accessory) { if (accessory instanceof AccessoryWithPM10Density) { addOptionalCharacteristic( new PM10DensityCharacteristic( + ((AccessoryWithPM10Density) accessory).getMinPM10Density(), + ((AccessoryWithPM10Density) accessory).getMaxPM10Density(), + ((AccessoryWithPM10Density) accessory).getMinStepPM10Density(), ((AccessoryWithPM10Density) accessory)::getPM10Density, ((AccessoryWithPM10Density) accessory)::subscribePM10Density, ((AccessoryWithPM10Density) accessory)::unsubscribePM10Density)); @@ -83,6 +95,9 @@ public AirQualityService(AirQualityAccessory accessory) { if (accessory instanceof AccessoryWithVOCDensity) { addOptionalCharacteristic( new VOCDensityCharacteristic( + ((AccessoryWithVOCDensity) accessory).getMinVOCDensity(), + ((AccessoryWithVOCDensity) accessory).getMaxVOCDensity(), + ((AccessoryWithVOCDensity) accessory).getMinStepVOCDensity(), ((AccessoryWithVOCDensity) accessory)::getVOCDensity, ((AccessoryWithVOCDensity) accessory)::subscribeVOCDensity, ((AccessoryWithVOCDensity) accessory)::unsubscribeVOCDensity)); diff --git a/src/main/java/io/github/hapjava/services/impl/CarbonDioxideSensorService.java b/src/main/java/io/github/hapjava/services/impl/CarbonDioxideSensorService.java index b329e5f8f..b61e91b91 100644 --- a/src/main/java/io/github/hapjava/services/impl/CarbonDioxideSensorService.java +++ b/src/main/java/io/github/hapjava/services/impl/CarbonDioxideSensorService.java @@ -34,11 +34,17 @@ public CarbonDioxideSensorService(CarbonDioxideSensorAccessory accessory) { if (accessory instanceof AccessoryWithCarbonDioxideLevel) { addOptionalCharacteristic( new CarbonDioxideLevelCharacteristic( + ((AccessoryWithCarbonDioxideLevel) accessory).getMinCarbonDioxideLevel(), + ((AccessoryWithCarbonDioxideLevel) accessory).getMaxCarbonDioxideLevel(), + ((AccessoryWithCarbonDioxideLevel) accessory).getMinStepCarbonDioxideLevel(), ((AccessoryWithCarbonDioxideLevel) accessory)::getCarbonDioxideLevel, ((AccessoryWithCarbonDioxideLevel) accessory)::subscribeCarbonDioxideLevel, ((AccessoryWithCarbonDioxideLevel) accessory)::unsubscribeCarbonDioxideLevel)); addOptionalCharacteristic( new CarbonDioxidePeakLevelCharacteristic( + ((AccessoryWithCarbonDioxideLevel) accessory).getMinCarbonDioxidePeakLevel(), + ((AccessoryWithCarbonDioxideLevel) accessory).getMaxCarbonDioxidePeakLevel(), + ((AccessoryWithCarbonDioxideLevel) accessory).getMinStepCarbonDioxidePeakLevel(), ((AccessoryWithCarbonDioxideLevel) accessory)::getCarbonDioxidePeakLevel, ((AccessoryWithCarbonDioxideLevel) accessory)::subscribeCarbonDioxidePeakLevel, ((AccessoryWithCarbonDioxideLevel) accessory)::unsubscribeCarbonDioxidePeakLevel)); diff --git a/src/main/java/io/github/hapjava/services/impl/LightSensorService.java b/src/main/java/io/github/hapjava/services/impl/LightSensorService.java index b40b4a43e..6aef8cd34 100644 --- a/src/main/java/io/github/hapjava/services/impl/LightSensorService.java +++ b/src/main/java/io/github/hapjava/services/impl/LightSensorService.java @@ -24,6 +24,9 @@ public LightSensorService(CurrentAmbientLightLevelCharacteristic lightLevel) { public LightSensorService(LightSensorAccessory accessory) { this( new CurrentAmbientLightLevelCharacteristic( + accessory.getMinCurrentAmbientLightLevel(), + accessory.getMaxCurrentAmbientLightLevel(), + accessory.getMinStepCurrentAmbientLightLevel(), accessory::getCurrentAmbientLightLevel, accessory::subscribeCurrentAmbientLightLevel, accessory::unsubscribeCurrentAmbientLightLevel)); diff --git a/src/main/java/io/github/hapjava/services/impl/LightbulbService.java b/src/main/java/io/github/hapjava/services/impl/LightbulbService.java index 387a2b092..b37ca4d2c 100644 --- a/src/main/java/io/github/hapjava/services/impl/LightbulbService.java +++ b/src/main/java/io/github/hapjava/services/impl/LightbulbService.java @@ -55,6 +55,8 @@ public LightbulbService(LightbulbAccessory accessory) { if (accessory instanceof AccessoryWithColorTemperature) { addOptionalCharacteristic( new ColorTemperatureCharacteristic( + ((AccessoryWithColorTemperature) accessory).getMinColorTemperature(), + ((AccessoryWithColorTemperature) accessory).getMaxColorTemperature(), ((AccessoryWithColorTemperature) accessory)::getColorTemperature, ((AccessoryWithColorTemperature) accessory)::setColorTemperature, ((AccessoryWithColorTemperature) accessory)::subscribeColorTemperature, diff --git a/src/main/java/io/github/hapjava/services/impl/ThermostatService.java b/src/main/java/io/github/hapjava/services/impl/ThermostatService.java index 232d9c487..c775a41d5 100644 --- a/src/main/java/io/github/hapjava/services/impl/ThermostatService.java +++ b/src/main/java/io/github/hapjava/services/impl/ThermostatService.java @@ -73,6 +73,12 @@ public ThermostatService(ThermostatAccessory accessory) { if (accessory instanceof AccessoryWithCoolingThresholdTemperature) { addOptionalCharacteristic( new CoolingThresholdTemperatureCharacteristic( + ((AccessoryWithCoolingThresholdTemperature) accessory) + .getMinCoolingThresholdTemperature(), + ((AccessoryWithCoolingThresholdTemperature) accessory) + .getMaxCoolingThresholdTemperature(), + ((AccessoryWithCoolingThresholdTemperature) accessory) + .getStepCoolingThresholdTemperature(), ((AccessoryWithCoolingThresholdTemperature) accessory) ::getCoolingThresholdTemperature, ((AccessoryWithCoolingThresholdTemperature) accessory) @@ -85,6 +91,12 @@ public ThermostatService(ThermostatAccessory accessory) { if (accessory instanceof AccessoryWithHeatingThresholdTemperature) { addOptionalCharacteristic( new HeatingThresholdTemperatureCharacteristic( + ((AccessoryWithHeatingThresholdTemperature) accessory) + .getMinHeatingThresholdTemperature(), + ((AccessoryWithHeatingThresholdTemperature) accessory) + .getMaxHeatingThresholdTemperature(), + ((AccessoryWithHeatingThresholdTemperature) accessory) + .getStepHeatingThresholdTemperature(), ((AccessoryWithHeatingThresholdTemperature) accessory) ::getHeatingThresholdTemperature, ((AccessoryWithHeatingThresholdTemperature) accessory) diff --git a/src/main/java/io/github/hapjava/services/impl/ValveService.java b/src/main/java/io/github/hapjava/services/impl/ValveService.java index b45c48ef4..519502a3c 100644 --- a/src/main/java/io/github/hapjava/services/impl/ValveService.java +++ b/src/main/java/io/github/hapjava/services/impl/ValveService.java @@ -58,6 +58,8 @@ public ValveService(ValveAccessory accessory) { if (accessory instanceof AccessoryWithDuration) { addOptionalCharacteristic( new SetDurationCharacteristic( + ((AccessoryWithDuration) accessory).getMinDuration(), + ((AccessoryWithDuration) accessory).getMaxDuration(), ((AccessoryWithDuration) accessory)::getSetDuration, ((AccessoryWithDuration) accessory)::setSetDuration, ((AccessoryWithDuration) accessory)::subscribeSetDuration, @@ -66,6 +68,8 @@ public ValveService(ValveAccessory accessory) { if (accessory instanceof AccessoryWithRemainingDuration) { addOptionalCharacteristic( new RemainingDurationCharacteristic( + ((AccessoryWithRemainingDuration) accessory).getMinRemainingDuration(), + ((AccessoryWithRemainingDuration) accessory).getMaxRemainingDuration(), ((AccessoryWithRemainingDuration) accessory)::getRemainingDuration, ((AccessoryWithRemainingDuration) accessory)::subscribeRemainingDuration, ((AccessoryWithRemainingDuration) accessory)::unsubscribeRemainingDuration)); From b090400364f77af87dc2a5082c405da276e3d7c4 Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sun, 28 Mar 2021 11:35:24 -0400 Subject: [PATCH 06/17] Add initial workflow for CI Perform maven build --- .github/workflows/maven.yml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) create mode 100644 .github/workflows/maven.yml diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml new file mode 100644 index 000000000..e9a49816e --- /dev/null +++ b/.github/workflows/maven.yml @@ -0,0 +1,25 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven + +on: + push: + branches: [ master ] + pull_request: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: '11' + architecture: x64 + - name: Build with Maven + run: mvn -B package --file pom.xml From f0aea59cc88951f0b7fb9e3861ca7e01994a45f2 Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sun, 28 Mar 2021 13:27:28 -0400 Subject: [PATCH 07/17] Setup for release Added release automation via Github workflow and upload to Maven Central for SNAPSHOTs and releases. --- .github/workflows/deploy.yml | 32 ++++++++++++++++++++++++++++ .github/workflows/maven.yml | 2 -- .github/workflows/release.yml | 39 +++++++++++++++++++++++++++++++++++ README.md | 4 ++++ RELEASING.md | 7 +++++++ pom.xml | 35 ++++++++++--------------------- 6 files changed, 93 insertions(+), 26 deletions(-) create mode 100644 .github/workflows/deploy.yml create mode 100644 .github/workflows/release.yml create mode 100644 RELEASING.md diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 000000000..5fa648aae --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,32 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Java CI with Maven and Deploy + +on: + push: + branches: [ master ] + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 for Maven Central + uses: actions/setup-java@v1 + with: + java-version: '11' + architecture: x64 + server-id: ossrh + gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + server-username: MAVEN_USERNAME + server-password: MAVEN_CENTRAL_TOKEN + - name: Publish to Maven Central + run: mvn deploy + env: + MAVEN_USERNAME: hap-java-dev + MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index e9a49816e..a07bff253 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -4,8 +4,6 @@ name: Java CI with Maven on: - push: - branches: [ master ] pull_request: branches: [ master ] diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 000000000..0aa72794f --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,39 @@ +# This workflow will build a Java project with Maven +# For more information see: https://help.github.com/actions/language-and-framework-guides/building-and-testing-java-with-maven + +name: Stage Release on Master Branch + +on: + workflow_dispatch: + inputs: + releaseVersion: + description: Version to release + required: true + +jobs: + build: + + runs-on: ubuntu-latest + + steps: + - uses: actions/checkout@v2 + - name: Set up JDK 11 + uses: actions/setup-java@v1 + with: + java-version: '11' + architecture: x64 + server-id: ossrh + gpg-private-key: ${{ secrets.GPG_SECRET_KEY }} + gpg-passphrase: MAVEN_GPG_PASSPHRASE + server-username: MAVEN_USERNAME + server-password: MAVEN_CENTRAL_TOKEN + - name: Setup git profile + run: | + git config user.name github-actions + git config user.email github-actions@github.com + - name: Maven release + run: mvn release:prepare release:perform -B -DreleaseVersion=${{ github.event.inputs.releaseVersion }} -Possrh + env: + MAVEN_USERNAME: hap-java-dev + MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} + MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} diff --git a/README.md b/README.md index 463f5d49b..9a9b3da86 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,9 @@ HAP-Java ========= +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/io.github.hap-java/hap/badge.svg)](https://search.maven.org/search?q=g:io.github.hap-java%20a:hap) +[![MIT License](https://img.shields.io/github/license/hap-java/HAP-Java)](https://github.com/hap-java/HAP-Java/blob/master/LICENSE) +![Maven Build Status](https://github.com/andylintner/HAP-Java/actions/workflows/maven.yml/badge.svg) + HAP-Java is a Java implementation of the HomeKit Accessory Protocol. Using this library, you can create your own HomeKit Accessory or HomeKit Accessory Bridge. diff --git a/RELEASING.md b/RELEASING.md new file mode 100644 index 000000000..a3001c9f3 --- /dev/null +++ b/RELEASING.md @@ -0,0 +1,7 @@ +# How to release HAP-Java + +These actions can only be performed by someone with maintainer level access to the repository. + +1. Run the [Stage Release on Master Branch](https://github.com/hap-java/HAP-Java/actions/workflows/release.yml) Action +2. After this completes, find the release on the [Releases page](https://github.com/hap-java/HAP-Java/releases) +3. Edit the release to include the changelog details diff --git a/pom.xml b/pom.xml index 5faf6eafc..91f687573 100644 --- a/pom.xml +++ b/pom.xml @@ -24,7 +24,7 @@ scm:git:https://github.com/hap-java/HAP-Java.git - scm:git:git@github.com:hap-java/HAP-Java.git + scm:git:https://github.com/hap-java/HAP-Java.git https://github.com/hap-java/HAP-Java.git HEAD @@ -284,11 +284,11 @@ ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ + https://s01.oss.sonatype.org/service/local/staging/deploy/maven2/ ossrh - https://oss.sonatype.org/content/repositories/snapshots + https://s01.oss.sonatype.org/content/repositories/snapshots @@ -325,20 +325,6 @@ ossrh - - gpg - ${env.GPG_KEYNAME} - ${env.GPG_PASSPHRASE} - false - deploy/pubring.gpg - deploy/secring.gpg - - - - performRelease - true - - @@ -354,6 +340,12 @@ + + + --pinentry-mode + loopback + + org.sonatype.plugins @@ -362,17 +354,12 @@ true ossrh - https://oss.sonatype.org/ + https://s01.oss.sonatype.org/ true - - org.apache.maven.plugins - maven-release-plugin - 2.5.3 - - + From 98efd976abfee5d2e63e45b3bbce52019788d03b Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sun, 28 Mar 2021 16:44:59 -0400 Subject: [PATCH 08/17] Remove old deploy mechanism --- deploy/distribution.xml | 18 ------------------ deploy/publish.sh | 5 ----- deploy/pubring.gpg.enc | Bin 259376 -> 0 bytes deploy/secring.gpg.enc | Bin 5520 -> 0 bytes deploy/settings.xml | 9 --------- 5 files changed, 32 deletions(-) delete mode 100644 deploy/distribution.xml delete mode 100755 deploy/publish.sh delete mode 100644 deploy/pubring.gpg.enc delete mode 100644 deploy/secring.gpg.enc delete mode 100644 deploy/settings.xml diff --git a/deploy/distribution.xml b/deploy/distribution.xml deleted file mode 100644 index a2cf6d668..000000000 --- a/deploy/distribution.xml +++ /dev/null @@ -1,18 +0,0 @@ - - dir-with-dependencies - - dir - - false - - - / - true - false - ${artifact.groupId}.${artifact.artifactId}-${artifact.version}${dashClassifier?}.jar - runtime - - - \ No newline at end of file diff --git a/deploy/publish.sh b/deploy/publish.sh deleted file mode 100755 index 1fb261646..000000000 --- a/deploy/publish.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/bash -if [[ ( $TRAVIS_PULL_REQUEST == "false" && $TRAVIS_BRANCH == "master" ) ]]; then - mvn deploy --settings deploy/settings.xml -DperformRelease=true -DskipTests=true - exit $? -fi diff --git a/deploy/pubring.gpg.enc b/deploy/pubring.gpg.enc deleted file mode 100644 index 1361f5a9fb491850de9a5c2846f6b0c7c223c876..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 259376 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 mnT0!|RXtTToH$Ds@dM*hnPCmqZD{@9Ky)@V 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%0Dh-b`Z{ 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 diff --git a/deploy/secring.gpg.enc b/deploy/secring.gpg.enc deleted file mode 100644 index 1f1c310495f57142662cc5d7b56285337976a8d0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5520 zcmV;B6>sWOVQh3|WM5z64QA`XpRpB`$d-O@oeP{q9cHM{$xej2WB>b&Bqj}1y;gzc z6OZ6krh#peG5|cgPsx{Vt~vQ0;C377Q;)0pV<0nVm|!7B3~mzV>d#BrGMD!Z43&st zTqect59+GKSq1OtZqP78kbHH3amVo3Z{NjeZ03ZvjK&awvDa)~fM^H!`Y)G&f(&J5 zLBFH3s;^S8Tag?FhE{yk(x?Mk0gz42aTqo?dEve=t$Iv!a9;N8#LB6W`NPLp&0)3A zTM`_26t_RZH5!&KKOD{tTwY;=E&(RP zyAcL{+yBgFDi;c1=rH#KFHL77vUjNV_{C4Otmr=Q{pyh3AJ9N91)G}(^0m>KAFF8$ zM?P93=A8Y!xyW{5ZaTX1dt{`P+Tw87@GkaE0MS!|%i0sFS)O?Rl^>AKPt`1@TG=)7 zwxxzwp~eY{x3w@DFEAHpIUh;K>WlWGu5_~gpMEFX&Dn0Zb|kSqv0K5o6^Z8(8`VgT zH{U3)IC7y=X1>?!bj*$!dl3ZR=3+W>l{-TEUs!S1?l93X-ZCE?loNQR+Qj14c>*=p z=!3RL#B68nBlAZ^7~}_BT%XDM#3eufy*!l78p$n?LC)7W1786x8}?meyrpx>$z+Zn z$2+2}UvzZE3B-&q&yyL0CUCln&L?+UTT|H%=522mwNq|%Y-h5~NlL~k_)<6Tw^WPo zO@x2U6E9!nY5ALt3n`j*OV09`p76--^L5v)mfGD{DwsNwB>BFaR*e_nWcghgS1{FpKB{Lba?6&^z~6A z0cHQ`DB{Tql?I>C!FZ2S103N+g#}Ov2nS$Xl`WuvUie5mR5S{EF%U&IWS!M1vGSSV z#to7XOA~0F-i~}66<IkWfI|BFptEEc?f5$6%ggE6{j;C0RwxzOP;5rfOMWtd^CrpyN2%Pp$e8 zCc(ws?~#kqzxI>pBqVL;j+KH2b6mqrN#Hql49DT|6ru;?#)=p4M-b;vxoT=qu2Ue- zNsZwEp2gVcmsR#(qbcQ8!tpTg0LbfdO0s+2>&5HMJ0e6Y_KqKu*N?R7?9V;Vshz?I zyrgkQu6E*N+NpB4jl7Q9$V z3cLNF6IhKl&UK6PU5b`NScnfgwmy9zs@(%s4LfZ**_ke9+EC+QX!&PTECj!BYY=9` zJUlSB*~fw-hh2!JJt(LJ+&(JKcUAe|{Itgx@R)L5xuIE)Rbq)0M4b3SrYeOs3IvI_ zG@tQoU9)f3&i25Ag|4s`!LoD+S2v;d-Qdg=u`vbjv2O0 zMU2SO=Tu=5*X~&AeDU<}yX3V`J!nZrBY7S~g`i+lA|jJZSAyk;I&$T>)Lxggb4L3D zfN}{E^u-9VXTP8z+(|}n0A&y;c`T@9i*9|oJiv`2ngi&C&8d~}Ix!L&XzGq2-dqax zq)qG}4zJPokZo_^d*f`AD91JP$R76E7Q`GgI!LUp0Z-~-v$zz~-cqMJM%}Q*C~my1 zru9kE0v$pZ`~!K-kYDOnHGZkah#X6CHck#3+A_dS4sL3F(U<*?fW8bT(O_^+2R(Nk zrg6KDzdLa+Ztp-+A6Fm13Deo+N#j~|Tn>!IC+PA>Yd$D1#UdbL^aY*?O_d=+E5%GN_y4O{Jzcyvc}I3cl5YrKb$rt)I8mpLpawRUwj!Vl`#?32C{?@CI*^I+K_ArI zi>kryx4xRL>2BDDGr~wH|G5mmdhnD#CvD=^stLwcbVPd0wwaJhqmNgeJl$VwB6EG| zHT5niI5(j!^`*o2@#Ws{kTBu)r*_;jq?Qqe{x8xeG9(RFj2L{|a`)0CfA-Z%DOPm@ zC0!7fX{m_b$z-=XrBhX8dAIy{z}!9;0!R&nje=t<`9_#^8i08P&UwgkgYG>%`6|wh zN2ET=#5T0huoxn^-XK@@4i|f6hM*GCQXR1G|hp)|fhwZh}AAZ>U@Fu?*=ux2+2 z8WebHkTD^c!z6C^vkOvf*E_QWOr z{O6uz2Y%`T1Ab!}igfh7^1S)#%q?4d#4H2*<;G82{(E43$;B)t$Q5+CB?=XncL23f zCtc6wD8}jWM^Gr@XWJ(`{_4=K&|1eW>&SlCdM2JJ>-+a`cVXLeX4!)fnpizHUXNuO zR>={n--F`LCs?)y-_eTd{KB5Pv#x@8zjb%3{d2AC3VY@#k*|E(thrm3op!%F@x9G` zP(d9mEtW*Y6)&M8DdGIKTsQCWV>Q?PLYOU4(zNXlKq6>H z*!kb~it)s$AU!qG6`8(6C-yp!o=^4nFFa~O?y&ahT}9Ecan=8_{o;{vl28`(ksemE zQE(G)3CAM5zMgtA&1J^H*; zRUi+4QGz8m)2kxKQSrE+4#1FT+cp69Hc%5)SB*N>=LZXzkfzw|H9V2leK-x6Vc-3^`uf}hMgZ%1Q#fSn!YDGrl#9&i-U7@R;Q@{ zfDwZH-(e9qh;@kZu%nAQ264Jtb2sm(4SSInLE!UDb-}*g4sSZS)5ceB0Pwa+Id8s5 zRnB73^1YWL`Uv56?4AQKVYHrAv&@xkni`JweEWa5_ay|qTZv25^2uFMMNL_dPX;%b zX{4?#=g1?k=K??!Lh+gH)gUZ10DpU#fl!!F6u0$EQAxs|OLw~`exq1!RnaSk^@V~W zn=3f6@SjbO!3!(;{r))~heN4hK_gaRRBtz&b{iEA#T`nA5SDh^ot`AM4_6K;D4_K& zPR8u-95_9D8}Z$0v#Vxz2PA3QMT#(g#+RniAsz{Dg=!c|5=AHSoXxL(s4IbzX1>du z5_F0eh$#2r8=g{3?mg0(rcRg(-w-cMt^7eV@ZkL|mjlc>H5%n8(7NL>RtPbr0hYF> zu`3KEjO0}{qc{e=2roNzE4HR2ntQ%ewkdfDr$G@DX&RZ?_F!#d8I|nQ@%vgZCtAC# z*zRRV*Dhpl20$80ZW$hk1ixacy&fRdcDUc!rh3OE;e4tv3j^#H$d90uTFc7+kV+Fd z0jR#K@>>o;y;hw}J4##q3TmfS7=fS@Jm*^Fz}bPX2t=QwgF4hu^3&BqGl*2u)lf9% z6hwa4l;6Vj#)hJ99hp8T)NEFm~o6{p1kGi3x`om%YV8VD(R0omEbzlmDt)U7Lc(|KB-W-KJIY|TV z82r5vfJ~xYNRirs-33<8d_Z=JP_QnZM+#eu%hvyARYQgd2^GE#(L$1>UE1p}2U|>{ zA~@$}F-vFh2paF^UBG=E=map&NfMkGQh?-JUG$ypG|5;IM9#e78Ugyl9+ymrK?d~C z&b>Sp7w+BL-(qSmF&zI@K?c4tJyQ;bTL>I z;zb5$n#>=Bd!^8?Citi}P|BrtC`TM^Oz(m`c^dI(C8@S-dD1;2s@2`$=ro%YIY;nG zNi?@;sO;u+)JE28nnT|rtA>uk1wX}fL>HwOQInWtRPYrCL+-&l2m?Dk6# z5OBnMw|j+s4ykgjRYLdYk{}$TT`v=gnrpv87k7T9Ug!QlHmI3Gn<5wq4=VucsbOn2Ez%lMh}lIUO$&&myKEbZUL7({)FP z$h4wB)h6)xO&}nJMxGH&qnvf z5~udIGFCUYrI1cS@EE*MOhm8DMI?q!8%4t4=r=oLYy)12a9@8$TYfG*$6m$OJCjr> z7wy;rMfF|)r(g8GeF2L1E8W%9OsbhT1w_EX}$zgw&3#=`(h2G^+$mvnh2hY0-347fiE%bq2UvZy!cY$^$T`d`#h(vY95CBDa9 zKEa@74IKDcztbKTX$01dgh576^p>RKTT*oaaN*@{YN$l_S4s&m1uPogM_l%j2%ulJ zoMuSUl5N$%z^*F_z#GFDeJ=gJ_jmWGpi!uPdU>*^ED|9$fz8x?+ri3hP~O7SfAX@) ztHg_E-8G3K*2`_|iS2;w@_lN9yVZLg|4^*{JrEyeq|Ix=?pNL6WeNj87+s9S`+g;@Tlo2hnn{Gp_L)EL!kv^iT24cg=haOJaRid*hGrlsbHg;7Y~ zM_$Whj?y*-tOp14#2%l|#4ASJ7pR<$hKbpP@z=<&NlORUuhC7wF@Ky-kzgVs7thJn zksBHGmV(OD8Ru|e%9JYObCEr?^_F%CkHsQ8B;*dMs8crld@1eYHa!QG5hut?Iau-F})vp)9MAyxAhbt()ILfkLAyBJVH87 z{N&*z`Pi#oQ-=|-QcvmBbldS)v|N+7$!$H2y1WK%OEq0ed^hmZDRil8T~E32*^7E> zu+tv%OY7!)7zlK=Q}*yn5>_p`^h2Zg&~CPb@#Uve7WnDV&zB}XG z4Z%*Oa;OL}dylnnjtCUJkh;G1dt-cvjn=`wz{mUz`8?lF(x?hC=rglh|4M4M@cJ^{ zhw#7a8!Ce{Qq+^+FT%umuE1_WGEAyArPCD0QN%aez2TWc@r7S6fB#0_2YeY`Ic!PR zlE_VM_L>@`m^&df(cV<#KY+x_zk_+=aus`LLBL8Dj=P@##8BlUO;sb-R7kekX z#2Fuli{!S`%*5tJ8QO_$XnkE3a!*e?Ub#Kn zRMOxZ3`FE^s^Tkm^CeHsNhlB5Vq#e~q^iW0li@%zV_-Z8*`xj6fU=Zg&Ff=59?Rj~ SNZ<2A`-VN;JI65odIjy*9LmT5 diff --git a/deploy/settings.xml b/deploy/settings.xml deleted file mode 100644 index f08c008c0..000000000 --- a/deploy/settings.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - ossrh - ${env.SONATYPE_USERNAME} - ${env.SONATYPE_PASSWORD} - - - From cd8c7937dd6921e037fd3f17899c3c23a0e194a5 Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sat, 3 Apr 2021 12:40:53 -0400 Subject: [PATCH 09/17] Remove assembly plugin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We don’t really need to build an assembly - most people will just consume this via maven, and if they don’t, they can do their own packaging. --- pom.xml | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/pom.xml b/pom.xml index 91f687573..0aaa357b7 100644 --- a/pom.xml +++ b/pom.xml @@ -208,24 +208,6 @@ - - maven-assembly-plugin - 3.1.1 - - - deploy/distribution.xml - - - - - make-assembly - package - - single - - - - org.apache.maven.plugins maven-scm-publish-plugin From fc882b91e8d3318cd53b499c7cc9354745e44d2d Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sat, 3 Apr 2021 12:47:53 -0400 Subject: [PATCH 10/17] Publish site on deploy --- .github/workflows/deploy.yml | 2 ++ pom.xml | 4 +++- 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 5fa648aae..c8208d3af 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -30,3 +30,5 @@ jobs: MAVEN_USERNAME: hap-java-dev MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} + - name: Publish site + run: mvn deploy-site diff --git a/pom.xml b/pom.xml index 0aaa357b7..56f7f239f 100644 --- a/pom.xml +++ b/pom.xml @@ -220,7 +220,7 @@ publish-scm - scm:git:git@github.com:hap-java/HAP-Java.git + scm:git:https://github.com/hap-java/HAP-Java.git gh-pages @@ -287,6 +287,8 @@ 3.0.1 io.github.hapjava.server.impl + 8 + false From 3c976abcbcefd9df62a813e7f819acdfa27b8b22 Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sat, 3 Apr 2021 21:02:39 -0400 Subject: [PATCH 11/17] Fix site-deploy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Turns out wagon-scm doesn’t pick up the github properties the way the release plugin does. This fixes the site deploy. Fixes #141 --- .github/workflows/deploy.yml | 6 +++++- README.md | 3 ++- pom.xml | 2 +- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index c8208d3af..4b2a5e563 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -24,6 +24,10 @@ jobs: gpg-passphrase: MAVEN_GPG_PASSPHRASE server-username: MAVEN_USERNAME server-password: MAVEN_CENTRAL_TOKEN + - name: Setup git profile + run: | + git config --global user.name github-actions + git config --global user.email github-actions@github.com - name: Publish to Maven Central run: mvn deploy env: @@ -31,4 +35,4 @@ jobs: MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} MAVEN_GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - name: Publish site - run: mvn deploy-site + run: mvn -B site-deploy -Dusername=github-actions -Dpassword=${{ secrets.GITHUB_TOKEN }} diff --git a/README.md b/README.md index 9a9b3da86..03fb0aaba 100644 --- a/README.md +++ b/README.md @@ -22,7 +22,8 @@ Include HAP-Java in your project using maven: ``` -After that, check out the [Sample](https://github.com/hap-java/HAP-Java/tree/sample). +After that, check out the [Sample](https://github.com/hap-java/HAP-Java/tree/sample) and +read the [Javadoc](https://hap-java.github.io/HAP-Java/apidocs/index.html) Supported HomeKit Accessories ========= diff --git a/pom.xml b/pom.xml index 56f7f239f..8d5aca5be 100644 --- a/pom.xml +++ b/pom.xml @@ -211,7 +211,7 @@ org.apache.maven.plugins maven-scm-publish-plugin - 3.0.0 + 3.1.0 scm-publish From e4085bdd5237199e4c5a8b65ad583ea88faf3341 Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sat, 3 Apr 2021 22:23:41 -0400 Subject: [PATCH 12/17] Fix for unregistering service when re-advertising MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When we change the properties that we’re advertising over mDNS we unregister and re-register the service. However, we were calling unregister after changing the properties. This happened to work with our version of jmdns, which only compared the qualified name. jmdns has quite a few forks however, and it’s best to adhere to the implied contract when calling unregisterService. This is adapted from a fix proposed by J-N-K --- CHANGES.md | 4 ++ pom.xml | 11 +++- .../impl/jmdns/JmdnsHomekitAdvertiser.java | 13 +++- .../jmdns/JmdnsHomekitAdvertiserTest.java | 66 +++++++++++++++++++ 4 files changed, 90 insertions(+), 4 deletions(-) create mode 100644 src/test/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiserTest.java diff --git a/CHANGES.md b/CHANGES.md index 758ddf6f7..bed3e3b48 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,10 @@ * Supported valid states for Thermostat, SecuritySystem, HeaterCooler and HumidifierDehumidifier [#108] [#120](https://github.com/hap-java/HAP-Java/pull/120) * Support for FilterMaintenance. Can be used as a linked service for an Air Purifier [#124](https://github.com/hap-java/HAP-Java/pull/124) +## Fixes + +* Fix for re-advertising service when using alternative jMDNS implementations. + # HAP-Java 1.1.5 ## Fixes diff --git a/pom.xml b/pom.xml index 8d5aca5be..0a358ad72 100644 --- a/pom.xml +++ b/pom.xml @@ -148,8 +148,15 @@ org.mockito - mockito-all - 1.10.19 + mockito-core + 3.8.0 + test + + + + org.assertj + assertj-core + 3.19.0 test diff --git a/src/main/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiser.java b/src/main/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiser.java index a178d2cfc..04016561e 100644 --- a/src/main/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiser.java +++ b/src/main/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiser.java @@ -26,6 +26,7 @@ public class JmdnsHomekitAdvertiser { private String setupId; private int port; private int configurationIndex; + private ServiceInfo serviceInfo; public JmdnsHomekitAdvertiser(JmDNS jmdns) { this.jmdns = jmdns; @@ -87,12 +88,20 @@ public synchronized void setConfigurationIndex(int revision) throws IOException } private void unregisterService() { - jmdns.unregisterService(buildServiceInfo()); + if (serviceInfo != null) { + jmdns.unregisterService(serviceInfo); + serviceInfo = null; + } } private void registerService() throws IOException { logger.info("Registering " + SERVICE_TYPE + " on port " + port); - jmdns.registerService(buildServiceInfo()); + if (this.serviceInfo != null) { + throw new AssertionError( + "Registering an already registered service without unregistering first is not allowed"); + } + serviceInfo = buildServiceInfo(); + jmdns.registerService(serviceInfo); } private ServiceInfo buildServiceInfo() { diff --git a/src/test/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiserTest.java b/src/test/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiserTest.java new file mode 100644 index 000000000..1c04b2868 --- /dev/null +++ b/src/test/java/io/github/hapjava/server/impl/jmdns/JmdnsHomekitAdvertiserTest.java @@ -0,0 +1,66 @@ +package io.github.hapjava.server.impl.jmdns; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.assertThatThrownBy; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; + +import java.io.IOException; +import java.net.UnknownHostException; +import javax.jmdns.JmDNS; +import javax.jmdns.ServiceInfo; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; + +public class JmdnsHomekitAdvertiserTest { + + JmdnsHomekitAdvertiser subject; + JmDNS jmdns; + + @Before + public void setup() throws UnknownHostException, IOException { + jmdns = mock(JmDNS.class); + subject = new JmdnsHomekitAdvertiser(jmdns); + } + + @Test + public void testAdvertiseTwiceFails() throws Exception { + advertise(); + assertThatThrownBy(() -> advertise()).isNotNull(); + } + + /* + * Verify that the unregister call is for the initial registered service + * when changing discoverability causes advertising to be toggled. + */ + @Test + public void testSetDiscoverableAfterAdvertise() throws Exception { + subject.setDiscoverable(false); + advertise(); + subject.setDiscoverable(true); + assertThat(getArgumentFromUnregister().getPropertyString("sf")).isEqualTo("0"); + } + + /* + * Verify that the unregister call is for the initial registered service + * when changing the config index causes advertising to be toggled. + */ + @Test + public void testSetConfigurationIndex() throws Exception { + subject.setConfigurationIndex(1); + advertise(); + subject.setConfigurationIndex(2); + assertThat(getArgumentFromUnregister().getPropertyString("c#")).isEqualTo("1"); + } + + private ServiceInfo getArgumentFromUnregister() { + ArgumentCaptor serviceInfoCaptor = ArgumentCaptor.forClass(ServiceInfo.class); + verify(jmdns).unregisterService(serviceInfoCaptor.capture()); + return serviceInfoCaptor.getValue(); + } + + private void advertise() throws Exception { + subject.advertise("test", "00:00:00:00:00:00", 1234, 1, "1"); + } +} From c1ceec989e6f0803e6b4cae855222a4e21b9b8f9 Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sat, 3 Apr 2021 22:48:02 -0400 Subject: [PATCH 13/17] Use the sonatype publisher for snapshots MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Without this, the snapshot won’t auto-close. --- .github/workflows/deploy.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4b2a5e563..d439198c7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -28,8 +28,8 @@ jobs: run: | git config --global user.name github-actions git config --global user.email github-actions@github.com - - name: Publish to Maven Central - run: mvn deploy + - name: Publish Snapshot to Maven Central + run: mvn deploy -B -Possrh env: MAVEN_USERNAME: hap-java-dev MAVEN_CENTRAL_TOKEN: ${{ secrets.MAVEN_CENTRAL_TOKEN }} From 06e0165818f30b534f18bfaf0893ee7e20beb341 Mon Sep 17 00:00:00 2001 From: Andy Lintner Date: Sun, 4 Apr 2021 00:57:07 -0400 Subject: [PATCH 14/17] Add gpg keyname to signing config --- pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/pom.xml b/pom.xml index 8d5aca5be..56b04825a 100644 --- a/pom.xml +++ b/pom.xml @@ -325,6 +325,7 @@ + HAP-Java --pinentry-mode loopback From 2837188e1294d6c1ef58e9ef363f7d17ca44c52a Mon Sep 17 00:00:00 2001 From: Gert-Jan van der Heiden Date: Wed, 23 Dec 2020 18:09:17 +0100 Subject: [PATCH 15/17] [#130](https://github.com/hap-java/HAP-Java/pull/130) --- CHANGES.md | 1 + pom.xml | 14 ++++---------- .../hapjava/server/impl/HomekitUtils.java | 2 +- .../server/impl/crypto/ChachaDecoder.java | 8 ++------ .../server/impl/crypto/ChachaEncoder.java | 4 +--- .../hapjava/server/impl/pairing/ByteUtils.java | 2 +- .../impl/pairing/ClientEvidenceRoutineImpl.java | 4 +--- .../impl/pairing/HomekitSRP6ServerSession.java | 17 ++++++++++------- .../hapjava/server/impl/pairing/SrpHandler.java | 4 ++-- .../impl/pairing/TypeLengthValueUtils.java | 2 +- 10 files changed, 24 insertions(+), 34 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index bed3e3b48..73ecb18af 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -14,6 +14,7 @@ * Valid values are supported for enum characteristics instead of min and max values * Supported valid states for Thermostat, SecuritySystem, HeaterCooler and HumidifierDehumidifier [#108] [#120](https://github.com/hap-java/HAP-Java/pull/120) * Support for FilterMaintenance. Can be used as a linked service for an Air Purifier [#124](https://github.com/hap-java/HAP-Java/pull/124) +* Update crypto libs [#130](https://github.com/hap-java/HAP-Java/pull/130) ## Fixes diff --git a/pom.xml b/pom.xml index a3e89093a..a616faa24 100644 --- a/pom.xml +++ b/pom.xml @@ -100,13 +100,13 @@ com.nimbusds srp6a - 1.5.2 + 2.1.0 org.bouncycastle bcprov-jdk15on - 1.51 + 1.67 @@ -115,22 +115,16 @@ 1.0.1 - - org.zeromq - curve25519-java - 0.1.0 - - javax.json javax.json-api - 1.0 + 1.1.4 org.glassfish javax.json - 1.0.4 + 1.1.4 diff --git a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java index 9b5b2b8ee..9facbeb0b 100644 --- a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java @@ -14,7 +14,7 @@ public class HomekitUtils { private static volatile SecureRandom secureRandom; public static BigInteger generateSalt() { - return new BigInteger(SRP6Routines.generateRandomSalt(16)); + return new BigInteger(new SRP6Routines().generateRandomSalt(16)); } public static byte[] generateKey() throws InvalidAlgorithmParameterException { diff --git a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java index 4c74a469d..9b9c2cc5d 100644 --- a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java +++ b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaDecoder.java @@ -5,8 +5,6 @@ import org.bouncycastle.crypto.generators.Poly1305KeyGenerator; import org.bouncycastle.crypto.params.KeyParameter; import org.bouncycastle.crypto.params.ParametersWithIV; -import org.bouncycastle.crypto.tls.AlertDescription; -import org.bouncycastle.crypto.tls.TlsFatalAlert; import org.bouncycastle.util.Arrays; public class ChachaDecoder { @@ -28,7 +26,7 @@ public byte[] decodeCiphertext(byte[] receivedMAC, byte[] additionalData, byte[] byte[] calculatedMAC = PolyKeyCreator.create(macKey, additionalData, ciphertext); if (!Arrays.constantTimeAreEqual(calculatedMAC, receivedMAC)) { - throw new TlsFatalAlert(AlertDescription.bad_record_mac); + throw new IOException("received an incorrect MAC"); } byte[] output = new byte[ciphertext.length]; @@ -45,9 +43,7 @@ private KeyParameter initRecordMAC(ChaChaEngine cipher) { byte[] firstBlock = new byte[64]; cipher.processBytes(firstBlock, 0, firstBlock.length, firstBlock, 0); - // NOTE: The BC implementation puts 'r' after 'k' - System.arraycopy(firstBlock, 0, firstBlock, 32, 16); - KeyParameter macKey = new KeyParameter(firstBlock, 16, 32); + KeyParameter macKey = new KeyParameter(firstBlock, 0, 32); Poly1305KeyGenerator.clamp(macKey.getKey()); return macKey; } diff --git a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java index 3304e7d9a..3649844eb 100644 --- a/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java +++ b/src/main/java/io/github/hapjava/server/impl/crypto/ChachaEncoder.java @@ -39,9 +39,7 @@ private KeyParameter initRecordMAC(ChaChaEngine cipher) { byte[] firstBlock = new byte[64]; cipher.processBytes(firstBlock, 0, firstBlock.length, firstBlock, 0); - // NOTE: The BC implementation puts 'r' after 'k' - System.arraycopy(firstBlock, 0, firstBlock, 32, 16); - KeyParameter macKey = new KeyParameter(firstBlock, 16, 32); + KeyParameter macKey = new KeyParameter(firstBlock, 0, 32); Poly1305KeyGenerator.clamp(macKey.getKey()); return macKey; } diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java b/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java index 6516e2e29..e65beec3c 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ByteUtils.java @@ -22,7 +22,7 @@ public static byte[] joinBytes(byte[]... piece) { return ret; } - public static byte[] toByteArray(BigInteger i) { + public static byte[] toUnsignedByteArray(BigInteger i) { byte[] array = i.toByteArray(); if (array[0] == 0) { array = Arrays.copyOfRange(array, 1, array.length); diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java index 16c514707..0d55985f9 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java @@ -8,9 +8,7 @@ class ClientEvidenceRoutineImpl implements ClientEvidenceRoutine { - public ClientEvidenceRoutineImpl() { - // TODO Auto-generated constructor stub - } + public ClientEvidenceRoutineImpl() {} /** * Calculates M1 according to the following formula: diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java b/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java index 3841d9fb7..116fced13 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/HomekitSRP6ServerSession.java @@ -8,6 +8,7 @@ import com.nimbusds.srp6.SRP6Session; import com.nimbusds.srp6.URoutineContext; import java.math.BigInteger; +import java.security.MessageDigest; /** * This is a slightly modified version of the SRP6ServerSession class included with nimbus. The only @@ -74,6 +75,8 @@ public static enum State { /** The current SRP-6a auth state. */ private State state; + private MessageDigest digest; + /** * Creates a new server-side SRP-6a authentication session and sets its state to {@link * State#INIT}. @@ -92,7 +95,7 @@ public HomekitSRP6ServerSession(final SRP6CryptoParams config, final int timeout this.config = config; - digest = config.getMessageDigestInstance(); + this.digest = config.getMessageDigestInstance(); if (digest == null) throw new IllegalArgumentException("Unsupported hash algorithm 'H': " + config.H); @@ -151,13 +154,13 @@ public BigInteger step1(final String userID, final BigInteger s, final BigIntege throw new IllegalStateException("State violation: Session must be in INIT state"); // Generate server private and public values - k = SRP6Routines.computeK(digest, config.N, config.g); + k = new SRP6Routines().computeK(digest, config.N, config.g); digest.reset(); b = HomekitSRP6Routines.generatePrivateValue(config.N, random); digest.reset(); - B = SRP6Routines.computePublicServerValue(config.N, config.g, k, v, b); + B = new SRP6Routines().computePublicServerValue(config.N, config.g, k, v, b); state = State.STEP_1; @@ -234,7 +237,7 @@ public BigInteger step2(final BigInteger A, final BigInteger M1) throws SRP6Exce if (hasTimedOut()) throw new SRP6Exception("Session timeout", SRP6Exception.CauseType.TIMEOUT); // Check A validity - if (!SRP6Routines.isValidPublicValue(config.N, A)) + if (!new SRP6Routines().isValidPublicValue(config.N, A)) throw new SRP6Exception( "Bad client public value 'A'", SRP6Exception.CauseType.BAD_PUBLIC_VALUE); @@ -246,11 +249,11 @@ public BigInteger step2(final BigInteger A, final BigInteger M1) throws SRP6Exce URoutineContext hashedKeysContext = new URoutineContext(A, B); u = hashedKeysRoutine.computeU(config, hashedKeysContext); } else { - u = SRP6Routines.computeU(digest, config.N, A, B); + u = new SRP6Routines().computeU(digest, config.N, A, B); digest.reset(); } - S = SRP6Routines.computeSessionKey(config.N, v, u, A, b); + S = new SRP6Routines().computeSessionKey(config.N, v, u, A, b); // Compute the own client evidence message 'M1' BigInteger computedM1; @@ -262,7 +265,7 @@ public BigInteger step2(final BigInteger A, final BigInteger M1) throws SRP6Exce computedM1 = clientEvidenceRoutine.computeClientEvidence(config, ctx); } else { // With default routine - computedM1 = SRP6Routines.computeClientEvidence(digest, A, B, S); + computedM1 = new SRP6Routines().computeClientEvidence(digest, A, B, S); digest.reset(); } diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java index e02ccdb90..8d26d62dc 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java @@ -82,8 +82,8 @@ private HttpResponse step2(Stage2Request request) throws Exception { public byte[] getK() { MessageDigest digest = session.getCryptoParams().getMessageDigestInstance(); - BigInteger S = session.getSessionKey(false); - byte[] sBytes = bigIntegerToUnsignedByteArray(S); + BigInteger S = session.getSessionKey(); + byte[] sBytes = toUnsignedByteArray(S); return digest.digest(sBytes); } diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java b/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java index 396829d34..03665d94d 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/TypeLengthValueUtils.java @@ -38,7 +38,7 @@ private Encoder() { } public void add(MessageType type, BigInteger i) throws IOException { - add(type, ByteUtils.toByteArray(i)); + add(type, ByteUtils.toUnsignedByteArray(i)); } public void add(MessageType type, short b) { From b48151f719daebe7466ebbae9b61b478205fc3c7 Mon Sep 17 00:00:00 2001 From: Gert-Jan van der Heiden Date: Wed, 23 Dec 2020 18:16:34 +0100 Subject: [PATCH 16/17] #130(https://github.com/hap-java/HAP-Java/pull/130) --- pom.xml | 2 +- .../hapjava/server/impl/HomekitUtils.java | 6 +-- .../pairing/ClientEvidenceRoutineImpl.java | 14 ++++--- .../server/impl/pairing/PairingManager.java | 4 +- .../pairing/ServerEvidenceRoutineImpl.java | 8 ++-- .../server/impl/pairing/SrpHandler.java | 40 ++++--------------- 6 files changed, 27 insertions(+), 47 deletions(-) diff --git a/pom.xml b/pom.xml index a616faa24..2b795a893 100644 --- a/pom.xml +++ b/pom.xml @@ -112,7 +112,7 @@ net.vrallev.ecc ecc-25519-java - 1.0.1 + 1.0.3 diff --git a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java index 9facbeb0b..20a697ff9 100644 --- a/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java +++ b/src/main/java/io/github/hapjava/server/impl/HomekitUtils.java @@ -2,7 +2,6 @@ import com.nimbusds.srp6.SRP6Routines; import java.math.BigInteger; -import java.security.InvalidAlgorithmParameterException; import java.security.SecureRandom; import java.util.stream.Collectors; import java.util.stream.Stream; @@ -17,8 +16,9 @@ public static BigInteger generateSalt() { return new BigInteger(new SRP6Routines().generateRandomSalt(16)); } - public static byte[] generateKey() throws InvalidAlgorithmParameterException { - EdDSAParameterSpec spec = EdDSANamedCurveTable.getByName("ed25519-sha-512"); + public static byte[] generateKey() { + EdDSAParameterSpec spec = + EdDSANamedCurveTable.getByName(EdDSANamedCurveTable.CURVE_ED25519_SHA512); byte[] seed = new byte[spec.getCurve().getField().getb() / 8]; getSecureRandom().nextBytes(seed); return seed; diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java index 0d55985f9..7e139296c 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ClientEvidenceRoutineImpl.java @@ -1,5 +1,7 @@ package io.github.hapjava.server.impl.pairing; +import static io.github.hapjava.server.impl.pairing.ByteUtils.toUnsignedByteArray; + import com.nimbusds.srp6.*; import java.math.BigInteger; import java.nio.charset.StandardCharsets; @@ -25,10 +27,10 @@ public BigInteger computeClientEvidence( } catch (NoSuchAlgorithmException e) { throw new RuntimeException("Could not locate requested algorithm", e); } - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(cryptoParams.N)); + digest.update(toUnsignedByteArray(cryptoParams.N)); byte[] hN = digest.digest(); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(cryptoParams.g)); + digest.update(toUnsignedByteArray(cryptoParams.g)); byte[] hg = digest.digest(); byte[] hNhg = xor(hN, hg); @@ -36,14 +38,14 @@ public BigInteger computeClientEvidence( digest.update(ctx.userID.getBytes(StandardCharsets.UTF_8)); byte[] hu = digest.digest(); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.S)); + digest.update(toUnsignedByteArray(ctx.S)); byte[] hS = digest.digest(); digest.update(hNhg); digest.update(hu); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.s)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.A)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.B)); + digest.update(toUnsignedByteArray(ctx.s)); + digest.update(toUnsignedByteArray(ctx.A)); + digest.update(toUnsignedByteArray(ctx.B)); digest.update(hS); BigInteger ret = new BigInteger(1, digest.digest()); return ret; diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java b/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java index af6a6e01f..ee4b772f9 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/PairingManager.java @@ -29,7 +29,7 @@ public HttpResponse handle(HttpRequest httpRequest) throws Exception { if (req.getStage() == Stage.ONE) { logger.trace("Starting pair for " + registry.getLabel()); srpHandler = new SrpHandler(authInfo.getPin(), authInfo.getSalt()); - return srpHandler.handle(req); + return srpHandler.step1(); } else if (req.getStage() == Stage.TWO) { logger.trace("Entering second stage of pair for " + registry.getLabel()); if (srpHandler == null) { @@ -37,7 +37,7 @@ public HttpResponse handle(HttpRequest httpRequest) throws Exception { return new UnauthorizedResponse(); } else { try { - return srpHandler.handle(req); + return srpHandler.step2((PairSetupRequest.Stage2Request) req); } catch (Exception e) { srpHandler = null; // You don't get to try again - need a new key logger.warn("Exception encountered while processing pairing request", e); diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java b/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java index 7cf7b3164..77739e9b2 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/ServerEvidenceRoutineImpl.java @@ -1,5 +1,7 @@ package io.github.hapjava.server.impl.pairing; +import static io.github.hapjava.server.impl.pairing.ByteUtils.toUnsignedByteArray; + import com.nimbusds.srp6.SRP6CryptoParams; import com.nimbusds.srp6.SRP6ServerEvidenceContext; import com.nimbusds.srp6.ServerEvidenceRoutine; @@ -20,10 +22,10 @@ public BigInteger computeServerEvidence( throw new RuntimeException("Could not locate requested algorithm", e); } - byte[] hS = digest.digest(SrpHandler.bigIntegerToUnsignedByteArray(ctx.S)); + byte[] hS = digest.digest(toUnsignedByteArray(ctx.S)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.A)); - digest.update(SrpHandler.bigIntegerToUnsignedByteArray(ctx.M1)); + digest.update(toUnsignedByteArray(ctx.A)); + digest.update(toUnsignedByteArray(ctx.M1)); digest.update(hS); return new BigInteger(1, digest.digest()); diff --git a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java index 8d26d62dc..ec4b34c97 100644 --- a/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java +++ b/src/main/java/io/github/hapjava/server/impl/pairing/SrpHandler.java @@ -1,25 +1,22 @@ package io.github.hapjava.server.impl.pairing; +import static io.github.hapjava.server.impl.pairing.ByteUtils.toUnsignedByteArray; + import com.nimbusds.srp6.*; import io.github.hapjava.server.impl.http.HttpResponse; import io.github.hapjava.server.impl.pairing.HomekitSRP6ServerSession.State; import io.github.hapjava.server.impl.pairing.PairSetupRequest.Stage2Request; import io.github.hapjava.server.impl.pairing.TypeLengthValueUtils.Encoder; import io.github.hapjava.server.impl.responses.ConflictResponse; -import io.github.hapjava.server.impl.responses.NotFoundResponse; import java.math.BigInteger; import java.security.MessageDigest; -import java.util.Arrays; import org.slf4j.Logger; import org.slf4j.LoggerFactory; class SrpHandler { - // Precomputed safe 3072 bit prime 'N'. Origin RFC 5054, appendix A. - private static final BigInteger N_3072 = - new BigInteger( - "5809605995369958062791915965639201402176612226902900533702900882779736177890990861472094774477339581147373410185646378328043729800750470098210924487866935059164371588168047540943981644516632755067501626434556398193186628990071248660819361205119793693985433297036118232914410171876807536457391277857011849897410207519105333355801121109356897459426271845471397952675959440793493071628394122780510124618488232602464649876850458861245784240929258426287699705312584509625419513463605155428017165714465363094021609290561084025893662561222573202082865797821865270991145082200656978177192827024538990239969175546190770645685893438011714430426409338676314743571154537142031573004276428701433036381801705308659830751190352946025482059931306571004727362479688415574702596946457770284148435989129632853918392117997472632693078113129886487399347796982772784615865232621289656944284216824611318709764535152507354116344703769998514148343807"); - private static final BigInteger G = BigInteger.valueOf(5); + private static final int BIT_SIZE = 3072; + private static final String HASH_ALG_H = "SHA-512"; private static final String IDENTIFIER = "Pair-Setup"; private static final Logger logger = LoggerFactory.getLogger(SrpHandler.class); @@ -30,7 +27,7 @@ class SrpHandler { private final String pin; public SrpHandler(String pin, BigInteger salt) { - config = new SRP6CryptoParams(N_3072, G, "SHA-512"); + config = SRP6CryptoParams.getInstance(BIT_SIZE, HASH_ALG_H); session = new HomekitSRP6ServerSession(config); session.setClientEvidenceRoutine(new ClientEvidenceRoutineImpl()); session.setServerEvidenceRoutine(new ServerEvidenceRoutineImpl()); @@ -38,20 +35,7 @@ public SrpHandler(String pin, BigInteger salt) { this.salt = salt; } - public HttpResponse handle(PairSetupRequest request) throws Exception { - switch (request.getStage()) { - case ONE: - return step1(); - - case TWO: - return step2((Stage2Request) request); - - default: - return new NotFoundResponse(); - } - } - - private HttpResponse step1() throws Exception { + HttpResponse step1() throws Exception { if (session.getState() != State.INIT) { logger.warn("Session is not in state INIT when receiving step1"); return new ConflictResponse(); @@ -68,7 +52,7 @@ private HttpResponse step1() throws Exception { return new PairingResponse(encoder.toByteArray()); } - private HttpResponse step2(Stage2Request request) throws Exception { + HttpResponse step2(Stage2Request request) throws Exception { if (session.getState() != State.STEP_1) { logger.warn("Session is not in state Stage 1 when receiving step2"); return new ConflictResponse(); @@ -80,18 +64,10 @@ private HttpResponse step2(Stage2Request request) throws Exception { return new PairingResponse(encoder.toByteArray()); } - public byte[] getK() { + byte[] getK() { MessageDigest digest = session.getCryptoParams().getMessageDigestInstance(); BigInteger S = session.getSessionKey(); byte[] sBytes = toUnsignedByteArray(S); return digest.digest(sBytes); } - - public static byte[] bigIntegerToUnsignedByteArray(BigInteger i) { - byte[] array = i.toByteArray(); - if (array[0] == 0) { - array = Arrays.copyOfRange(array, 1, array.length); - } - return array; - } } From e506e2e459920dfdda8d3bb4510e75640d834608 Mon Sep 17 00:00:00 2001 From: Gert-Jan van der Heiden Date: Thu, 18 Nov 2021 11:31:52 +0100 Subject: [PATCH 17/17] It's been a while, version 1.69 is there now --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 2b795a893..8e38a1880 100644 --- a/pom.xml +++ b/pom.xml @@ -106,7 +106,7 @@ org.bouncycastle bcprov-jdk15on - 1.67 + 1.69