From ad024b334751a905eb7e3dd33f83835ecdb84ae8 Mon Sep 17 00:00:00 2001
From: Hubert Chathi <hubert@uhoreg.ca>
Date: Thu, 4 Apr 2019 23:11:56 -0400
Subject: [PATCH] add missing OlmPkSigning class

---
 .../java/org/matrix/olm/OlmPkSigning.java     | 100 ++++++++++++++++++
 1 file changed, 100 insertions(+)
 create mode 100644 android/olm-sdk/src/main/java/org/matrix/olm/OlmPkSigning.java

diff --git a/android/olm-sdk/src/main/java/org/matrix/olm/OlmPkSigning.java b/android/olm-sdk/src/main/java/org/matrix/olm/OlmPkSigning.java
new file mode 100644
index 0000000..89cb556
--- /dev/null
+++ b/android/olm-sdk/src/main/java/org/matrix/olm/OlmPkSigning.java
@@ -0,0 +1,100 @@
+/*
+ * Copyright 2019 New Vector Ltd
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.matrix.olm;
+
+import android.util.Log;
+
+import java.util.Arrays;
+
+public class OlmPkSigning {
+    private static final String LOG_TAG = "OlmPkSigning";
+
+    /** PK Signing Id returned by JNI.
+     * This value uniquely identifies the native PK signing instance.
+     **/
+    private transient long mNativeId;
+
+    public OlmPkSigning() throws OlmException {
+        try {
+            mNativeId = createNewPkSigningJni();
+        } catch (Exception e) {
+            throw new OlmException(OlmException.EXCEPTION_CODE_PK_SIGNING_CREATION, e.getMessage());
+        }
+    }
+
+    private native long createNewPkSigningJni();
+
+    private native void releasePkSigningJni();
+
+    public void releaseSigning() {
+        if (0 != mNativeId) {
+            releasePkSigningJni();
+        }
+        mNativeId = 0;
+    }
+
+    public boolean isReleased() {
+        return (0 == mNativeId);
+    }
+
+    public static native int seedLength();
+
+    public static byte[] generateSeed() throws OlmException {
+        try {
+            return generateSeedJni();
+        } catch (Exception e) {
+            Log.e(LOG_TAG, "## generateSeed(): failed " + e.getMessage());
+            throw new OlmException(OlmException.EXCEPTION_CODE_PK_SIGNING_GENERATE_SEED, e.getMessage());
+        }
+    }
+
+    public static native byte[] generateSeedJni();
+
+    public String initWithSeed(byte[] seed) throws OlmException {
+        try {
+            byte[] pubKey = setKeyFromSeedJni(seed);
+            return new String(pubKey, "UTF-8");
+        } catch (Exception e) {
+            Log.e(LOG_TAG, "## initWithSeed(): failed " + e.getMessage());
+            throw new OlmException(OlmException.EXCEPTION_CODE_PK_SIGNING_INIT_WITH_SEED, e.getMessage());
+        }
+    }
+
+    public native byte[] setKeyFromSeedJni(byte[] seed);
+
+    public String sign(String aMessage) throws OlmException {
+        if (null == aMessage) {
+            return null;
+        }
+
+        byte[] messageBuffer = null;
+        try {
+            messageBuffer = aMessage.getBytes("UTF-8");
+            byte[] signature = pkSignJni(messageBuffer);
+            return new String(signature, "UTF-8");
+        } catch (Exception e) {
+            Log.e(LOG_TAG, "## pkSign(): failed " + e.getMessage());
+            throw new OlmException(OlmException.EXCEPTION_CODE_PK_SIGNING_SIGN, e.getMessage());
+        } finally {
+            if (null != messageBuffer) {
+                Arrays.fill(messageBuffer, (byte) 0);
+            }
+        }
+    }
+
+    private native byte[] pkSignJni(byte[] message);
+}
-- 
GitLab