From 03b41c78b31d37512712b15e98aadab422d6e704 Mon Sep 17 00:00:00 2001 From: Thomas Date: Mon, 1 Mar 2021 14:49:36 +0100 Subject: [PATCH] copy release notes --- app/src/fdroidcommon/AndroidManifest.xml | 103 ------- .../java/app/fedilab/android/helper/ECDH.java | 2 - .../java/app/fedilab/android/helper/ECDH.java | 261 ------------------ .../android/services/CustomReceiver.java | 12 - .../android/services/FakeDistributor.java | 10 + 5 files changed, 10 insertions(+), 378 deletions(-) delete mode 100644 app/src/fdroidcommon/AndroidManifest.xml rename app/src/{fdroidcommon => main}/java/app/fedilab/android/helper/ECDH.java (99%) delete mode 100644 app/src/playstore/java/app/fedilab/android/helper/ECDH.java delete mode 100644 app/src/playstore/java/app/fedilab/android/services/CustomReceiver.java create mode 100644 app/src/playstore/java/app/fedilab/android/services/FakeDistributor.java diff --git a/app/src/fdroidcommon/AndroidManifest.xml b/app/src/fdroidcommon/AndroidManifest.xml deleted file mode 100644 index 397a7c259..000000000 --- a/app/src/fdroidcommon/AndroidManifest.xml +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/fdroidcommon/java/app/fedilab/android/helper/ECDH.java b/app/src/main/java/app/fedilab/android/helper/ECDH.java similarity index 99% rename from app/src/fdroidcommon/java/app/fedilab/android/helper/ECDH.java rename to app/src/main/java/app/fedilab/android/helper/ECDH.java index 674b48188..bf382a8a9 100644 --- a/app/src/fdroidcommon/java/app/fedilab/android/helper/ECDH.java +++ b/app/src/main/java/app/fedilab/android/helper/ECDH.java @@ -18,11 +18,9 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.SharedPreferences; import android.util.Base64; -import android.util.Log; import androidx.preference.PreferenceManager; - import org.spongycastle.asn1.ASN1ObjectIdentifier; import org.spongycastle.asn1.x9.ECNamedCurveTable; import org.spongycastle.asn1.x9.X9ECParameters; diff --git a/app/src/playstore/java/app/fedilab/android/helper/ECDH.java b/app/src/playstore/java/app/fedilab/android/helper/ECDH.java deleted file mode 100644 index 674b48188..000000000 --- a/app/src/playstore/java/app/fedilab/android/helper/ECDH.java +++ /dev/null @@ -1,261 +0,0 @@ -package app.fedilab.android.helper; -/* Copyright 2021 Thomas Schneider - * - * This file is a part of Fedilab - * - * This program is free software; you can redistribute it and/or modify it under the terms of the - * GNU General Public License as published by the Free Software Foundation; either version 3 of the - * License, or (at your option) any later version. - * - * Fedilab 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 General - * Public License for more details. - * - * You should have received a copy of the GNU General Public License along with Fedilab; if not, - * see . */ - -import android.annotation.SuppressLint; -import android.content.Context; -import android.content.SharedPreferences; -import android.util.Base64; -import android.util.Log; - -import androidx.preference.PreferenceManager; - - -import org.spongycastle.asn1.ASN1ObjectIdentifier; -import org.spongycastle.asn1.x9.ECNamedCurveTable; -import org.spongycastle.asn1.x9.X9ECParameters; -import org.spongycastle.crypto.params.ECNamedDomainParameters; -import org.spongycastle.crypto.params.ECPrivateKeyParameters; -import org.spongycastle.crypto.params.ECPublicKeyParameters; -import org.spongycastle.jce.spec.ECNamedCurveSpec; -import org.spongycastle.math.ec.ECCurve; -import org.spongycastle.math.ec.ECPoint; - -import java.math.BigInteger; -import java.security.KeyFactory; -import java.security.KeyPair; -import java.security.KeyPairGenerator; -import java.security.NoSuchAlgorithmException; -import java.security.NoSuchProviderException; -import java.security.PrivateKey; -import java.security.PublicKey; -import java.security.Security; -import java.security.interfaces.ECPublicKey; -import java.security.spec.ECGenParameterSpec; -import java.security.spec.X509EncodedKeySpec; - -import javax.crypto.KeyAgreement; - -import app.fedilab.android.client.Entities.Account; - -// https://github.com/nelenkov/ecdh-kx/blob/master/src/org/nick/ecdhkx/Crypto.java - -public class ECDH { - - - public static final String kp_public = "kp_public"; - public static final String peer_public = "peer_public"; - public static final String PROVIDER = org.spongycastle.jce.provider.BouncyCastleProvider.PROVIDER_NAME; - - public static final String kp_private = "kp_private"; - public static final String KEGEN_ALG = "ECDH"; - - private static final String kp_public_affine_x = "kp_public_affine_x"; - private static final String kp_public_affine_y = "kp_public_affine_y"; - - private static ECDH instance; - - - static { - Security.addProvider(new org.spongycastle.jce.provider.BouncyCastleProvider()); - } - - public static KeyFactory kf = null; - private static KeyPairGenerator kpg = null; - - - public ECDH() { - try { - kf = KeyFactory.getInstance(KEGEN_ALG, PROVIDER); - kpg = KeyPairGenerator.getInstance(KEGEN_ALG, PROVIDER); - } catch (NoSuchAlgorithmException | NoSuchProviderException e) { - throw new RuntimeException(e); - } - } - - public static synchronized ECDH getInstance() { - if (instance == null) { - instance = new ECDH(); - } - - return instance; - } - - public static String base64Encode(byte[] b) { - - byte[] encoded = Base64.encode( - b, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP); - return new String(encoded); - } - - static byte[] base64Decode(String str) { - return Base64.decode(str, Base64.URL_SAFE | Base64.NO_PADDING | Base64.NO_WRAP); - } - - static synchronized KeyPair generateKeyPair() - throws Exception { - ECGenParameterSpec ecParamSpec = new ECGenParameterSpec("prime256v1"); - kpg.initialize(ecParamSpec); - - return kpg.generateKeyPair(); - } - - private static byte[] generateSecret(PrivateKey myPrivKey, PublicKey otherPubKey) throws Exception { - ECPublicKey ecPubKey = (ECPublicKey) otherPubKey; - KeyAgreement keyAgreement = KeyAgreement.getInstance(KEGEN_ALG, PROVIDER); - keyAgreement.init(myPrivKey); - keyAgreement.doPhase(otherPubKey, true); - - return keyAgreement.generateSecret(); - } - - - static synchronized KeyPair readKeyPair(Context context) - throws Exception { - return new KeyPair(readMyPublicKey(context), readMyPrivateKey(context)); - } - - @SuppressLint("ApplySharedPref") - public static KeyPair newPair(Context context) { - SharedPreferences.Editor prefsEditor = PreferenceManager - .getDefaultSharedPreferences(context).edit(); - KeyPair kp; - try { - kp = generateKeyPair(); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - - ECPublicKey key = (ECPublicKey) kp.getPublic(); - byte[] x = key.getW().getAffineX().toByteArray(); - byte[] y = key.getW().getAffineY().toByteArray(); - BigInteger xbi = new BigInteger(1, x); - BigInteger ybi = new BigInteger(1, y); - X9ECParameters x9 = ECNamedCurveTable.getByName("prime256v1"); - ASN1ObjectIdentifier oid = ECNamedCurveTable.getOID("prime256v1"); - - ECCurve curve = x9.getCurve(); - ECPoint point = curve.createPoint(xbi, ybi); - ECNamedDomainParameters dParams = new ECNamedDomainParameters(oid, - x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed()); - - ECPublicKeyParameters pubKey = new ECPublicKeyParameters(point, dParams); - - - ECPrivateKeyParameters privateKey = new ECPrivateKeyParameters(new BigInteger(kp.getPrivate().getEncoded()), pubKey.getParameters()); - byte[] privateKeyBytes = privateKey.getD().toByteArray(); - - String keyString = base64Encode(pubKey.getQ().getEncoded(false)); - String keypString = base64Encode(privateKeyBytes); - prefsEditor.putString(kp_public, keyString); - prefsEditor.putString(kp_public_affine_x, key.getW().getAffineX().toString()); - prefsEditor.putString(kp_public_affine_y, key.getW().getAffineY().toString()); - prefsEditor.putString(kp_private, keypString); - prefsEditor.commit(); - return kp; - } - - - static synchronized PublicKey readMyPublicKey(Context context) throws Exception { - - X9ECParameters x9 = ECNamedCurveTable.getByName("prime256v1"); - ASN1ObjectIdentifier oid = ECNamedCurveTable.getOID("prime256v1"); - - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(context); - BigInteger xbi = new BigInteger(prefs.getString(kp_public_affine_x, "0")); - BigInteger ybi = new BigInteger(prefs.getString(kp_public_affine_y, "0")); - - ECNamedDomainParameters dParams = new ECNamedDomainParameters(oid, - x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed()); - - - ECNamedCurveSpec ecNamedCurveSpec = new ECNamedCurveSpec("prime256v1", dParams.getCurve(), dParams.getG(), dParams.getN()); - java.security.spec.ECPoint w = new java.security.spec.ECPoint(xbi, ybi); - return kf.generatePublic(new java.security.spec.ECPublicKeySpec(w, ecNamedCurveSpec)); - } - - - static synchronized PublicKey readPublicKey(String keyStr) throws Exception { - X509EncodedKeySpec x509ks = new X509EncodedKeySpec( - base64Decode(keyStr)); - return kf.generatePublic(x509ks); - } - - - static synchronized PrivateKey readMyPrivateKey(Context context) throws Exception { - X9ECParameters x9 = ECNamedCurveTable.getByName("prime256v1"); - ASN1ObjectIdentifier oid = ECNamedCurveTable.getOID("prime256v1"); - - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(context); - BigInteger ybi = new BigInteger(prefs.getString(kp_public_affine_y, "0")); - ECNamedDomainParameters dParams = new ECNamedDomainParameters(oid, - x9.getCurve(), x9.getG(), x9.getN(), x9.getH(), x9.getSeed()); - ECNamedCurveSpec ecNamedCurveSpec = new ECNamedCurveSpec("prime256v1", dParams.getCurve(), dParams.getG(), dParams.getN()); - return kf.generatePrivate(new java.security.spec.ECPrivateKeySpec(ybi, ecNamedCurveSpec)); - } - - - private static synchronized KeyPair getPair(Context context) { - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(context); - String strPub = prefs.getString(kp_public, ""); - String strPriv = prefs.getString(kp_private, ""); - if (strPub.trim().isEmpty() || strPriv.trim().isEmpty()) { - return newPair(context); - } - try { - return readKeyPair(context); - } catch (Exception e) { - e.printStackTrace(); - } - return null; - } - - static PublicKey getServerKey(Context context, Account account) throws Exception { - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(context); - String serverKey = prefs.getString(peer_public + account.getId() + account.getInstance(), ""); - return readPublicKey(serverKey); - } - - @SuppressWarnings({"unused", "RedundantSuppression"}) - public static byte[] getSharedSecret(Context context, Account account) { - try { - return generateSecret(getPair(context).getPrivate(), getServerKey(context, account)); - } catch (Exception e) { - e.printStackTrace(); - return null; - } - } - - public String getPublicKey(Context context) { - SharedPreferences prefs = PreferenceManager - .getDefaultSharedPreferences(context); - - return prefs.getString(kp_public, ""); - } - - @SuppressLint("ApplySharedPref") - public void saveServerKey(Context context, Account account, String strPeerPublic) { - SharedPreferences.Editor prefsEditor = PreferenceManager - .getDefaultSharedPreferences(context).edit(); - - prefsEditor.putString(peer_public + account.getId() + account.getInstance(), strPeerPublic); - prefsEditor.commit(); - } -} diff --git a/app/src/playstore/java/app/fedilab/android/services/CustomReceiver.java b/app/src/playstore/java/app/fedilab/android/services/CustomReceiver.java deleted file mode 100644 index da7278ef5..000000000 --- a/app/src/playstore/java/app/fedilab/android/services/CustomReceiver.java +++ /dev/null @@ -1,12 +0,0 @@ -package app.fedilab.android.services; - -import org.jetbrains.annotations.NotNull; -import org.unifiedpush.android.connector_fcm_added.FakeDistributorReceiver; -import org.unifiedpush.android.connector_fcm_added.GetEndpointHandler; - -class CustomReceiver extends FakeDistributorReceiver { - public CustomReceiver() { - super(new handlerFCM()); - } - -} \ No newline at end of file diff --git a/app/src/playstore/java/app/fedilab/android/services/FakeDistributor.java b/app/src/playstore/java/app/fedilab/android/services/FakeDistributor.java new file mode 100644 index 000000000..7e8d88f14 --- /dev/null +++ b/app/src/playstore/java/app/fedilab/android/services/FakeDistributor.java @@ -0,0 +1,10 @@ +package app.fedilab.android.services; + +import org.unifiedpush.android.connector_fcm_added.FakeDistributorReceiver; + +class FakeDistributor extends FakeDistributorReceiver { + public FakeDistributor() { + super(new HandlerFCM()); + } + +} \ No newline at end of file