Skip to content

Commit b551fe7

Browse files
committed
- remove all secretkey requirements from app
- changed the requery endpoint
1 parent 4991c75 commit b551fe7

23 files changed

+183
-288
lines changed

app/src/main/java/com/flutterwave/rave_android/MainActivity.java

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ public class MainActivity extends AppCompatActivity {
3131
EditText emailEt;
3232
EditText amountEt;
3333
EditText publicKeyEt;
34-
EditText secretKeyEt;
34+
EditText encryptionKeyEt;
3535
EditText txRefEt;
3636
EditText narrationEt;
3737
EditText currencyEt;
@@ -60,7 +60,7 @@ protected void onCreate(Bundle savedInstanceState) {
6060
emailEt = findViewById(R.id.emailEt);
6161
amountEt = findViewById(R.id.amountEt);
6262
publicKeyEt = findViewById(R.id.publicKeyEt);
63-
secretKeyEt = findViewById(R.id.secretKeyEt);
63+
encryptionKeyEt = findViewById(R.id.encryptionEt);
6464
txRefEt = findViewById(R.id.txRefEt);
6565
narrationEt = findViewById(R.id.narrationTV);
6666
currencyEt = findViewById(R.id.currencyEt);
@@ -80,7 +80,7 @@ protected void onCreate(Bundle savedInstanceState) {
8080
vendorListTXT.setText("Your current vendor refs are: ");
8181

8282
publicKeyEt.setText(RaveConstants.PUBLIC_KEY);
83-
secretKeyEt.setText(RaveConstants.PRIVATE_KEY);
83+
encryptionKeyEt.setText(RaveConstants.ENCRYPTION_KEY);
8484

8585
addSubaccountsLayout = findViewById(R.id.addSubAccountsLayout);
8686

@@ -131,7 +131,7 @@ private void validateEntries() {
131131
String email = emailEt.getText().toString();
132132
String amount = amountEt.getText().toString();
133133
String publicKey = publicKeyEt.getText().toString();
134-
String secretKey = secretKeyEt.getText().toString();
134+
String encryptionKey = encryptionKeyEt.getText().toString();
135135
String txRef = txRefEt.getText().toString();
136136
String narration = narrationEt.getText().toString();
137137
String currency = currencyEt.getText().toString();
@@ -156,9 +156,9 @@ private void validateEntries() {
156156
publicKeyEt.setError("A valid public key is required");
157157
}
158158

159-
if (secretKey.length() < 1){
159+
if (encryptionKey.length() < 1){
160160
valid = false;
161-
secretKeyEt.setError("A valid secret key is required");
161+
encryptionKeyEt.setError("A valid encryption key is required");
162162
}
163163

164164
if (txRef.length() < 1){
@@ -185,7 +185,7 @@ private void validateEntries() {
185185
.setlName(lName)
186186
.setNarration(narration)
187187
.setPublicKey(publicKey)
188-
.setSecretKey(secretKey)
188+
.setEncryptionKey(encryptionKey)
189189
.setTxRef(txRef)
190190
.acceptMpesaPayments(isMpesaSwitch.isChecked())
191191
.acceptAccountPayments(accountSwitch.isChecked())
@@ -230,7 +230,7 @@ private void clearErrors() {
230230
emailEt.setError(null);
231231
amountEt.setError(null);
232232
publicKeyEt.setError(null);
233-
secretKeyEt.setError(null);
233+
encryptionKeyEt.setError(null);
234234
txRefEt.setError(null);
235235
narrationEt.setError(null);
236236
currencyEt.setError(null);

app/src/main/res/layout/activity_main.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -155,8 +155,8 @@
155155
android:textSize="14sp"
156156
android:layout_marginBottom="10dp"
157157
android:text=""
158-
android:hint="@string/secret_key"
159-
android:id="@+id/secretKeyEt"
158+
android:hint="@string/encryption_key"
159+
android:id="@+id/encryptionEt"
160160
/>
161161

162162
<EditText

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,4 +14,5 @@
1414
<string name="last_name">Last name</string>
1515
<string name="start_payment">START PAYMENT</string>
1616
<string name="secret_key">Secret Key</string>
17+
<string name="encryption_key">Encryption key</string>
1718
</resources>

raveandroid/src/main/java/com/flutterwave/raveandroid/RaveConstants.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,8 @@ public class RaveConstants {
1010
// public static String PUBLIC_KEY = "";
1111
// public static String PRIVATE_KEY = "";
1212
public static String PUBLIC_KEY = "FLWPUBK-e634d14d9ded04eaf05d5b63a0a06d2f-X"; //test
13-
public static String PRIVATE_KEY = "FLWSECK-bb971402072265fb156e90a3578fe5e6-X"; //test
13+
// public static String ENCRYPTION_KEY = "FLWSECK-bb971402072265fb156e90a3578fe5e6-X"; //test
14+
public static String ENCRYPTION_KEY = "bb9714020722eb4cf7a169f2";
1415
public static String STAGING_URL = "https://ravesandbox.azurewebsites.net";
1516
public static String LIVE_URL = "https://raveapi.azurewebsites.net";
1617
public static String VBV = "VBVSECURECODE";

raveandroid/src/main/java/com/flutterwave/raveandroid/RavePayActivity.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -82,7 +82,6 @@ protected void onCreate(Bundle savedInstanceState) {
8282
BASE_URL = RaveConstants.LIVE_URL;
8383
}
8484

85-
secretKey = ravePayInitializer.getSecretKey();
8685
tabLayout = (TabLayout) findViewById(R.id.sliding_tabs);
8786
pager = (ViewPager) findViewById(R.id.pager);
8887
permissionsRequiredLayout = (RelativeLayout) findViewById(R.id.rave_permission_required_layout);
@@ -147,10 +146,6 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
147146
}
148147
}
149148

150-
public static String getSecretKey() {
151-
return secretKey;
152-
}
153-
154149
public RavePayInitializer getRavePayInitializer() {
155150
return ravePayInitializer;
156151
}

raveandroid/src/main/java/com/flutterwave/raveandroid/RavePayInitializer.java

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ public class RavePayInitializer {
1313
String email;
1414
double amount;
1515
String publicKey;
16-
String secretKey;
16+
String encryptionKey;
1717
String txRef;
1818
String narration;
1919
String currency;
@@ -32,15 +32,15 @@ public class RavePayInitializer {
3232
boolean staging = true;
3333

3434
public RavePayInitializer(String email, double amount, String publicKey,
35-
String secretKey, String txRef, String narration,
35+
String encryptionKey, String txRef, String narration,
3636
String currency, String country, String fName,
3737
String lName, boolean withCard,
3838
boolean withAccount, boolean withMpesa, boolean withGHMobileMoney, int theme,
3939
boolean staging, boolean allowSaveCard, String meta, String subAccounts, String payment_plan) {
4040
this.email = email;
4141
this.amount = amount;
4242
this.publicKey = publicKey;
43-
this.secretKey = secretKey;
43+
this.encryptionKey = encryptionKey;
4444
this.txRef = txRef;
4545
this.narration = narration;
4646
this.currency = currency;
@@ -154,12 +154,12 @@ public void setPublicKey(String publicKey) {
154154
this.publicKey = publicKey;
155155
}
156156

157-
public String getSecretKey() {
158-
return secretKey;
157+
public String getEncryptionKey() {
158+
return encryptionKey;
159159
}
160160

161-
public void setSecretKey(String secretKey) {
162-
this.secretKey = secretKey;
161+
public void setEncryptionKey(String encryptionKey) {
162+
this.encryptionKey = encryptionKey;
163163
}
164164

165165
public String getTxRef() {

raveandroid/src/main/java/com/flutterwave/raveandroid/RavePayManager.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ public class RavePayManager {
1818
private String email;
1919
private double amount = -1;
2020
private String publicKey;
21-
private String secretKey;
21+
private String encryptionKey;
2222
private String txRef;
2323
private String narration = "";
2424
private String currency = "NGN";
@@ -104,8 +104,8 @@ public RavePayManager setPublicKey(String publicKey) {
104104
return this;
105105
}
106106

107-
public RavePayManager setSecretKey(String secretKey) {
108-
this.secretKey = secretKey;
107+
public RavePayManager setEncryptionKey(String encryptionKey) {
108+
this.encryptionKey = encryptionKey;
109109
return this;
110110
}
111111

@@ -157,6 +157,6 @@ public void initialize() {
157157
}
158158

159159
public RavePayInitializer createRavePayInitializer() {
160-
return new RavePayInitializer(email, amount, publicKey, secretKey, txRef, narration, currency, country, fName, lName, withCard, withAccount, withMpesa, withGHMobileMoney, theme, staging, allowSaveCard, meta, subAccounts, payment_plan);
160+
return new RavePayInitializer(email, amount, publicKey, encryptionKey, txRef, narration, currency, country, fName, lName, withCard, withAccount, withMpesa, withGHMobileMoney, theme, staging, allowSaveCard, meta, subAccounts, payment_plan);
161161
}
162162
}

raveandroid/src/main/java/com/flutterwave/raveandroid/Utils.java

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -18,11 +18,21 @@
1818
import org.json.JSONObject;
1919

2020
import java.lang.reflect.Type;
21+
import java.nio.charset.Charset;
2122
import java.security.GeneralSecurityException;
23+
import java.security.KeyFactory;
2224
import java.security.MessageDigest;
25+
import java.security.NoSuchAlgorithmException;
26+
import java.security.PublicKey;
27+
import java.security.spec.MGF1ParameterSpec;
28+
import java.security.spec.X509EncodedKeySpec;
2329
import java.util.List;
2430

2531
import javax.crypto.Cipher;
32+
import javax.crypto.NoSuchPaddingException;
33+
import javax.crypto.SecretKey;
34+
import javax.crypto.spec.OAEPParameterSpec;
35+
import javax.crypto.spec.PSource;
2636
import javax.crypto.spec.SecretKeySpec;
2737

2838
/**
@@ -60,9 +70,8 @@ public static boolean wasTxSuccessful(RavePayInitializer ravePayInitializer, Str
6070
JSONObject jsonData = jsonObject.getJSONObject("data");
6171
String status = jsonData.getString("status");
6272
String txAmount = jsonData.getString("amount");
63-
String txCurrency = jsonData.getString("transaction_currency");
64-
JSONObject flwMetaJsonObject = jsonData.getJSONObject("flwMeta");
65-
String chargeResponse = flwMetaJsonObject.getString("chargeResponse");
73+
String txCurrency = jsonData.getString("currency");
74+
String chargeResponse = jsonData.getString("chargeResponseCode");
6675

6776
if (areAmountsSame(amount, txAmount) &&
6877
chargeResponse.equalsIgnoreCase("00") &&
@@ -160,14 +169,36 @@ public static String stringifySubaccounts(List<SubAccount> subAccounts) {
160169
return gson.toJson(subAccounts, type);
161170
}
162171

163-
public static String getEncryptedData(String unEncryptedString, String secret) {
172+
public static byte[] RSAEncrypt(String plaintext){
173+
PublicKey key = getKey("baA/RgjURU3I0uqH3iRos3NbE8fT+lP8SDXKymsnfdPrMQAEoMBuXtoaQiJ1i5tuBG9EgSEOH1LAZEaAsvwClw==");
174+
byte[] ciphertext = null;
164175
try {
165-
// hash the secret
166-
String md5Hash = getMd5(secret);
167-
String cleanSecret = secret.replace(TARGET, "");
168-
int hashLength = md5Hash.length();
169-
String encryptionKey = cleanSecret.substring(0, 12).concat(md5Hash.substring(hashLength - 12, hashLength));
176+
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPPadding");
177+
cipher.init(Cipher.ENCRYPT_MODE, key);
178+
ciphertext = cipher.doFinal(plaintext.getBytes());
179+
} catch (Exception e) {
180+
e.printStackTrace();
181+
}
182+
return ciphertext;
183+
}
184+
185+
public static PublicKey getKey(String key){
186+
try{
187+
byte[] byteKey = Base64.decode(key.getBytes(Charset.forName("UTF-16")), Base64.DEFAULT);
188+
X509EncodedKeySpec X509publicKey = new X509EncodedKeySpec(byteKey);
189+
KeyFactory kf = KeyFactory.getInstance("RSA");
190+
191+
return kf.generatePublic(X509publicKey);
192+
}
193+
catch(Exception e){
194+
e.printStackTrace();
195+
}
196+
197+
return null;
198+
}
170199

200+
public static String getEncryptedData(String unEncryptedString, String encryptionKey) {
201+
try {
171202
return encrypt(unEncryptedString, encryptionKey);
172203
}catch (Exception e){
173204
e.printStackTrace();

raveandroid/src/main/java/com/flutterwave/raveandroid/account/AccountContract.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ interface View {
4747
interface UserActionsListener {
4848
void getBanks();
4949

50-
void chargeAccount(Payload body, boolean internetBanking);
50+
void chargeAccount(Payload body, String encryptionKey, boolean internetBanking);
5151

5252
void validateAccountCharge(String flwRef, String otp, String publicKey);
5353

raveandroid/src/main/java/com/flutterwave/raveandroid/account/AccountFragment.java

Lines changed: 3 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -261,8 +261,6 @@ private void validateDetails() {
261261
Payload body = builder.createBankPayload();
262262
body.setPasscode(dob);
263263
body.setPhonenumber(phone);
264-
body.setPBFSecKey(ravePayInitializer.getSecretKey());
265-
body.setSECKEY(ravePayInitializer.getSecretKey());
266264

267265
if ((selectedBank.getBankcode().equalsIgnoreCase("058") ||
268266
selectedBank.getBankcode().equalsIgnoreCase("011"))
@@ -388,7 +386,7 @@ public void onActivityResult(int requestCode, int resultCode, Intent data) {
388386
String otp = data.getStringExtra(OTPFragment.EXTRA_OTP);
389387
presenter.validateAccountCharge(flwRef, otp, ravePayInitializer.getPublicKey());
390388
}else if(requestCode==FOR_INTERNET_BANKING){
391-
presenter.requeryTx(flwRef, ravePayInitializer.getSecretKey());
389+
presenter.requeryTx(flwRef, ravePayInitializer.getPublicKey());
392390
}
393391
}else{
394392
super.onActivityResult(requestCode, resultCode, data);
@@ -436,7 +434,7 @@ public void onPaymentFailed(String status, String responseAsJSONString) {
436434

437435
@Override
438436
public void onValidateSuccessful(String flwRef, String responseAsJsonString) {
439-
presenter.requeryTx(flwRef, ravePayInitializer.getSecretKey());
437+
presenter.requeryTx(flwRef, ravePayInitializer.getPublicKey());
440438
}
441439

442440
@Override
@@ -463,7 +461,7 @@ public void displayFee(String charge_amount, final Payload payload, final boolea
463461
@Override
464462
public void onClick(DialogInterface dialog, int which) {
465463
dialog.dismiss();
466-
presenter.chargeAccount(payload, internetbanking);
464+
presenter.chargeAccount(payload, ravePayInitializer.getEncryptionKey(), internetbanking);
467465
}
468466
}).setNegativeButton("NO", new DialogInterface.OnClickListener() {
469467
@Override

0 commit comments

Comments
 (0)