Commit 7a48a664 authored by Sultan Qasim Khan's avatar Sultan Qasim Khan Committed by Dees Troy
Browse files

patternpassword: update large grid password scheme

CM13 and up no longer use the two method scheme.

Change-Id: I21154becb5d7e77a54a5a07e649fe64829173a01
parent d3e96ff4
......@@ -15,7 +15,7 @@ extern "C" {
#include "../twcommon.h"
}
#include "../minuitwrp/minui.h"
#include "../twrp-functions.hpp"
#include "rapidxml.hpp"
#include "objects.hpp"
......@@ -403,6 +403,17 @@ int GUIPatternPassword::NotifyVarChange(const std::string& varName, const std::s
return 0;
}
static unsigned int getSDKVersion(void) {
unsigned int sdkver = 23;
string sdkverstr = TWFunc::System_Property_Get("ro.build.version.sdk");
if (!sdkverstr.empty()) {
sdkver = (unsigned int)strtoull(sdkverstr.c_str(), NULL, 10);
sdkver = (sdkver != 0) ? sdkver : 23;
}
LOGINFO("sdk version is %u\n", sdkver);
return sdkver;
}
std::string GUIPatternPassword::GeneratePassphrase()
{
char pattern[mConnectedDotsLen];
......@@ -411,12 +422,17 @@ std::string GUIPatternPassword::GeneratePassphrase()
}
std::stringstream pass;
char buffer[3] = {0};
for(size_t i = 0; i < mConnectedDotsLen; i++) {
int digit = pattern[i] & 0xff;
if ((mGridSize == 3) || (getSDKVersion() >= 23)) {
// Marshmallow uses a consistent method
for (size_t i = 0; i < mConnectedDotsLen; i++) {
buffer[0] = (pattern[i] & 0xff) + '1';
pass << std::string(buffer);
}
} else {
/*
* Okay, rant time.
* Okay, rant time for pre-Marshmallow ROMs.
* It turns out that Android and CyanogenMod have *two* separate methods
* for generating passphrases from patterns. This is a legacy issue, as
* Android only supports 3x3 grids, and so we need to support both.
......@@ -431,14 +447,8 @@ std::string GUIPatternPassword::GeneratePassphrase()
* they are generated by taking "%.2x" for each dot index and
* concatenating the results (without adding 1).
*/
if(mGridSize == 3)
// Android (legacy) 3x3 grids.
pass << digit + 1;
else {
// Other NxN grids.
char buffer[3];
snprintf(buffer, 3, "%.2x", digit);
for (size_t i = 0; i < mConnectedDotsLen; i++) {
snprintf(buffer, 3, "%.2x", pattern[i] & 0xff);
pass << std::string(buffer);
}
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment