void QeFindPopularPasswords(LPCWSTR lpw, size_t n, std::vector<TqePatInsts>& vPatterns) { std::vector<WCHAR> vLower(n); std::vector<WCHAR> vLeet(n); for(size_t i = 0; i < n; ++i) { const WCHAR ch = lpw[i]; vLower[i] = towlower(ch); vLeet[i] = towlower(QeDecodeLeetChar(ch)); } const size_t nMaxLen = min(n, CPopularPasswords::GetMaxLength()); for(size_t nSubLen = nMaxLen; nSubLen >= 3; --nSubLen) { if(!CPopularPasswords::ContainsLength(nSubLen)) continue; std::vector<WCHAR> vSub(nSubLen); for(size_t i = 0; i <= (n - nSubLen); ++i) { if(QeVectorContains(vLower, L'\0', i, nSubLen)) continue; memcpy(&vSub[0], &vLower[i], nSubLen * sizeof(WCHAR)); if(!QeEvalAddPopularPasswordPattern(vPatterns, lpw, i, vSub, 0.0)) { memcpy(&vSub[0], &vLeet[i], nSubLen * sizeof(WCHAR)); if(QeEvalAddPopularPasswordPattern(vPatterns, lpw, i, vSub, 1.5)) memset(&vLower[i], 0, nSubLen * sizeof(WCHAR)); } else memset(&vLower[i], 0, nSubLen * sizeof(WCHAR)); } } }
int main(void) { XVECTOR vLower(2); XVECTOR vUpper(2); XVECTOR vThreshold(2); XVECTOR vExpected(2); XVECTOR vResult(2); vExpected.Set(0,0.75); vExpected.Set(1,0.6); vLower.Set(0,0.0); vLower.Set(1,0.0); vUpper.Set(0,1.0); vUpper.Set(1,0.75); vThreshold.Set(0,0.0001); vThreshold.Set(1,0.0001); xPerform_Fit_Bound_Simplex(vLower,vUpper,vThreshold,Test_Function,vResult,&vExpected,"xfit.cache"); printf("\n"); vResult.Print(); }