diff --git a/src/main/java/io/kamax/matrix/codec/MxSha256.java b/src/main/java/io/kamax/matrix/codec/MxSha256.java deleted file mode 100644 index 2bb4aa4..0000000 --- a/src/main/java/io/kamax/matrix/codec/MxSha256.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * matrix-java-sdk - Matrix Client SDK for Java - * Copyright (C) 2017 Kamax Sarl - * - * https://www.kamax.io/ - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU Affero General Public License as - * published by the Free Software Foundation, either version 3 of the - * License, or (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU Affero General Public License for more details. - * - * You should have received a copy of the GNU Affero General Public License - * along with this program. If not, see . - */ - -package io.kamax.matrix.codec; - -import java.nio.charset.StandardCharsets; -import java.security.MessageDigest; -import java.security.NoSuchAlgorithmException; - -public class MxSha256 { - - private MessageDigest md; - - public MxSha256() { - try { - md = MessageDigest.getInstance("SHA-256"); - } catch (NoSuchAlgorithmException e) { - throw new RuntimeException(e); - } - } - - public String hash(byte[] data) { - return MxBase64.encode(md.digest(data)); - } - - public String hash(String data) { - return hash(data.getBytes(StandardCharsets.UTF_8)); - } - -} diff --git a/src/main/java/io/kamax/mxisd/hash/HashEngine.java b/src/main/java/io/kamax/mxisd/hash/HashEngine.java index a8c5b68..82655fa 100644 --- a/src/main/java/io/kamax/mxisd/hash/HashEngine.java +++ b/src/main/java/io/kamax/mxisd/hash/HashEngine.java @@ -1,10 +1,10 @@ package io.kamax.mxisd.hash; -import io.kamax.matrix.codec.MxSha256; import io.kamax.mxisd.config.HashingConfig; import io.kamax.mxisd.hash.storage.HashStorage; import io.kamax.mxisd.lookup.ThreePidMapping; import io.kamax.mxisd.lookup.provider.IThreePidProvider; +import org.apache.commons.codec.digest.DigestUtils; import org.apache.commons.lang3.RandomStringUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -17,7 +17,6 @@ public class HashEngine { private final List providers; private final HashStorage hashStorage; - private final MxSha256 sha256 = new MxSha256(); private final HashingConfig config; private String pepper; @@ -52,7 +51,7 @@ public class HashEngine { } protected String hash(ThreePidMapping pidMapping) { - return sha256.hash(pidMapping.getMedium() + " " + pidMapping.getValue() + " " + getPepper()); + return DigestUtils.sha256Hex(pidMapping.getValue() + " " + pidMapping.getMedium() + " " + getPepper()); } protected String newPepper() { diff --git a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v2/HashLookupHandler.java b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v2/HashLookupHandler.java index 1fd391c..8fb55f3 100644 --- a/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v2/HashLookupHandler.java +++ b/src/main/java/io/kamax/mxisd/http/undertow/handler/identity/v2/HashLookupHandler.java @@ -60,6 +60,7 @@ public class HashLookupHandler extends LookupHandler implements ApiHandler { ClientHashLookupRequest input = parseJsonTo(exchange, ClientHashLookupRequest.class); HashLookupRequest lookupRequest = new HashLookupRequest(); setRequesterInfo(lookupRequest, exchange); + lookupRequest.setHashes(input.getAddresses()); log.info("Got bulk lookup request from {} with client {} - Is recursive? {}", lookupRequest.getRequester(), lookupRequest.getUserAgent(), lookupRequest.isRecursive()); @@ -67,7 +68,7 @@ public class HashLookupHandler extends LookupHandler implements ApiHandler { throw new InvalidParamException(); } - if ("sha256".equals(input.getAlgorithm()) && !hashManager.getHashEngine().getPepper().equals(input.getPepper())) { + if (!hashManager.getHashEngine().getPepper().equals(input.getPepper())) { throw new InvalidPepperException(); } @@ -115,10 +116,14 @@ public class HashLookupHandler extends LookupHandler implements ApiHandler { } ClientHashLookupAnswer answer = new ClientHashLookupAnswer(); - for (Pair pair : hashManager.getHashStorage().find(request.getHashes())) { - answer.getMappings().put(pair.getKey(), pair.getValue().getMxid()); + if (request.getHashes() != null && !request.getHashes().isEmpty()) { + for (Pair pair : hashManager.getHashStorage().find(request.getHashes())) { + answer.getMappings().put(pair.getKey(), pair.getValue().getMxid()); + } + log.info("Finished bulk lookup request from {}", request.getRequester()); + } else { + log.warn("Empty request"); } - log.info("Finished bulk lookup request from {}", request.getRequester()); respondJson(exchange, answer); } diff --git a/src/test/java/io/kamax/mxisd/test/hash/HashEngineTest.java b/src/test/java/io/kamax/mxisd/test/hash/HashEngineTest.java new file mode 100644 index 0000000..f909d14 --- /dev/null +++ b/src/test/java/io/kamax/mxisd/test/hash/HashEngineTest.java @@ -0,0 +1,15 @@ +package io.kamax.mxisd.test.hash; + +import static org.junit.Assert.assertEquals; + +import org.apache.commons.codec.digest.DigestUtils; +import org.junit.Test; + +public class HashEngineTest { + + @Test + public void sha256test() { + assertEquals("a26de61ae3055f84b33ac1a179b9ad5301f9109024f4db1ae653ea525d2136f4", + DigestUtils.sha256Hex("user2@mail.homeserver.tld email I9x4vpcWjqp9X8iiOY4a")); + } +}