From 1f0ebd42704b48e5916ee7d0a13372e4b67a2446 Mon Sep 17 00:00:00 2001
From: Felix Sidokhine <felix.sidokhine@randstad.ca>
Date: Sun, 10 May 2020 19:00:18 +0300
Subject: [PATCH] Added the JamiID generation routine

---
 .../jami/jams/cryptoengine/CryptoEngine.java  |  2 ++
 jami-dht/pom.xml                              |  6 ++++++
 jami-dht/src/main/java/module-info.java       |  2 ++
 .../jami/jams/dht/DeviceReceiptGenerator.java | 11 ++++++++++
 jams-server/pom.xml                           |  6 ++++++
 jams-server/src/main/java/module-info.java    |  1 +
 .../core/workflows/RegisterUserFlow.java      | 20 +++++++++----------
 7 files changed, 38 insertions(+), 10 deletions(-)

diff --git a/cryptoengine/src/main/java/net/jami/jams/cryptoengine/CryptoEngine.java b/cryptoengine/src/main/java/net/jami/jams/cryptoengine/CryptoEngine.java
index 13500473..09796243 100644
--- a/cryptoengine/src/main/java/net/jami/jams/cryptoengine/CryptoEngine.java
+++ b/cryptoengine/src/main/java/net/jami/jams/cryptoengine/CryptoEngine.java
@@ -13,7 +13,9 @@ import org.bouncycastle.cert.X509CRLHolder;
 import org.bouncycastle.cert.ocsp.OCSPReq;
 import org.bouncycastle.cert.ocsp.OCSPResp;
 import org.bouncycastle.jce.provider.BouncyCastleProvider;
+import org.bouncycastle.util.encoders.Hex;
 
+import java.security.MessageDigest;
 import java.security.Security;
 import java.util.concurrent.atomic.AtomicReference;
 
diff --git a/jami-dht/pom.xml b/jami-dht/pom.xml
index 7c44c22f..fb9ebf53 100644
--- a/jami-dht/pom.xml
+++ b/jami-dht/pom.xml
@@ -22,6 +22,12 @@
             <artifactId>commons-codec</artifactId>
             <version>${commons.codec.version}</version>
         </dependency>
+        <dependency>
+            <groupId>net.jami</groupId>
+            <artifactId>jams-common</artifactId>
+            <version>2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
 </project>
\ No newline at end of file
diff --git a/jami-dht/src/main/java/module-info.java b/jami-dht/src/main/java/module-info.java
index 68f5b9ac..a7ad90cb 100644
--- a/jami-dht/src/main/java/module-info.java
+++ b/jami-dht/src/main/java/module-info.java
@@ -1,6 +1,8 @@
 module jami.dht {
+    exports net.jami.jams.dht;
     requires lombok;
     requires msgpack.core;
     requires org.apache.commons.codec;
     requires org.slf4j;
+    requires jams.common;
 }
\ No newline at end of file
diff --git a/jami-dht/src/main/java/net/jami/jams/dht/DeviceReceiptGenerator.java b/jami-dht/src/main/java/net/jami/jams/dht/DeviceReceiptGenerator.java
index 99f3698e..f26ed076 100644
--- a/jami-dht/src/main/java/net/jami/jams/dht/DeviceReceiptGenerator.java
+++ b/jami-dht/src/main/java/net/jami/jams/dht/DeviceReceiptGenerator.java
@@ -20,6 +20,7 @@ package net.jami.jams.dht;
  */
 
 import lombok.extern.slf4j.Slf4j;
+import net.jami.jams.common.objects.user.User;
 import org.apache.commons.codec.binary.Base64;
 import org.apache.commons.codec.binary.Hex;
 import org.apache.commons.codec.digest.MessageDigestAlgorithms;
@@ -122,4 +123,14 @@ public class DeviceReceiptGenerator {
 
     }
 
+    public static String generateJamiId(User user){
+        try {
+            return Hex.encodeHexString(MessageDigest.getInstance(MessageDigestAlgorithms.SHA_1).digest(user.getCertificate().getPublicKey().getEncoded()));
+        }
+        catch (Exception e){
+            log.error("Could not generate JamiId with error " + e.toString());
+            return null;
+        }
+    }
+
 }
diff --git a/jams-server/pom.xml b/jams-server/pom.xml
index 97446420..9d4792cc 100644
--- a/jams-server/pom.xml
+++ b/jams-server/pom.xml
@@ -49,6 +49,12 @@
             <version>${javax.servlet.version}</version>
             <scope>provided</scope>
         </dependency>
+        <dependency>
+            <groupId>net.jami</groupId>
+            <artifactId>jami-dht</artifactId>
+            <version>2.0</version>
+            <scope>compile</scope>
+        </dependency>
     </dependencies>
 
     <build>
diff --git a/jams-server/src/main/java/module-info.java b/jams-server/src/main/java/module-info.java
index dcca8f8d..2122f087 100644
--- a/jams-server/src/main/java/module-info.java
+++ b/jams-server/src/main/java/module-info.java
@@ -10,6 +10,7 @@ module jams.server {
     requires javassist;
     requires datastore;
     requires org.apache.xbean.classloader;
+    requires jami.dht;
     exports net.jami.jams.server.servlets.general to org.apache.tomcat.embed.core;
     exports net.jami.jams.server.servlets.filters to org.apache.tomcat.embed.core;
     exports net.jami.jams.server.servlets.api.auth to org.apache.tomcat.embed.core;
diff --git a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterUserFlow.java b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterUserFlow.java
index 03bca2f2..028227ef 100644
--- a/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterUserFlow.java
+++ b/jams-server/src/main/java/net/jami/jams/server/core/workflows/RegisterUserFlow.java
@@ -1,6 +1,8 @@
 package net.jami.jams.server.core.workflows;
 
 import net.jami.jams.common.objects.user.User;
+import net.jami.jams.dht.DeviceReceiptGenerator;
+import net.jami.jams.dht.ETHAddressGenerator;
 
 import static net.jami.jams.server.Server.certificateAuthority;
 
@@ -8,17 +10,15 @@ public class RegisterUserFlow {
 
     //Get the CA, sign, return the Jami ID.
     public static User createUser(User user){
+        //This generates the X509 Fields we need.
         user = certificateAuthority.getSignedCertificate(user);
-        //while(ethKeyPair == null){
-        //    ethKeyPair = ETHAddressGenerator.generateAddress();
-        //}
-        //user.setEthAddress(ethKeyPair[0]);
-        //user.setEthKey(ethKeyPair[1]);
-        //user.setJamiId(Hex.encodeHexString(MessageDigest.getInstance(MessageDigestAlgorithms.SHA_1).digest(userKeyPair.getPublic().getEncoded())));
-        //user.setEthAddress();
-        //user.setJamiId();
+        String[] ethKeyPair = null;
+        while(ethKeyPair == null){
+            ethKeyPair = ETHAddressGenerator.generateAddress();
+        }
+        user.setEthAddress(ethKeyPair[0]);
+        user.setEthKey(ethKeyPair[1]);
+        user.setJamiId(DeviceReceiptGenerator.generateJamiId(user));
         return user;
     }
-
-
 }
-- 
GitLab