void CYubiMixin::yubiRequestHMACSha1(const CSecString &challenge) { if (m_pending) { // no-op if a request's already in the air } else { CSingleLock singeLock(&m_mutex); singeLock.Lock(); // open key // if zero or >1 key, we'll fail if (m_yk.openKey() != YKLIB_OK) { return; } // Prepare the HMAC-SHA1 challenge here BYTE chalBuf[SHA1_MAX_BLOCK_SIZE]; BYTE chalLength = BYTE(challenge.GetLength()*sizeof(TCHAR)); memset(chalBuf, 0, SHA1_MAX_BLOCK_SIZE); if (chalLength > SHA1_MAX_BLOCK_SIZE) chalLength = SHA1_MAX_BLOCK_SIZE; memcpy(chalBuf, challenge, chalLength); // Initiate HMAC-SHA1 operation now if (m_yk.writeChallengeBegin(YKLIB_SECOND_SLOT, YKLIB_CHAL_HMAC, chalBuf, chalLength) == YKLIB_OK) { m_pending = true; yubiShowChallengeSent(); // request's in the air, setup GUI to wait for reply } else { TRACE(_T("m_yk.writeChallengeBegin() failed")); } trashMemory(chalBuf, chalLength); } }
LRESULT CPasskeyEntry::OnInsertBuffer(WPARAM, LPARAM) { // Update the variables UpdateData(TRUE); // Get the buffer CSecString vkbuffer = m_pVKeyBoardDlg->GetPassphrase(); // Find the selected characters - if any int nStartChar, nEndChar; m_pctlPasskey->GetSel(nStartChar, nEndChar); // If any characters selected - delete them if (nStartChar != nEndChar) m_passkey.Delete(nStartChar, nEndChar - nStartChar); // Insert the buffer m_passkey.Insert(nStartChar, vkbuffer); // Update the dialog UpdateData(FALSE); // Put cursor at end of inserted text m_pctlPasskey->SetSel(nStartChar + vkbuffer.GetLength(), nStartChar + vkbuffer.GetLength()); return 0L; }
void CSecEditExtn::SetSecureText(const CSecString &str) { m_pImpl->m_field.Set(str, m_pImpl->m_bf); if (::IsWindow(m_hWnd)) { if (!m_secure) { SetWindowText(str); } else { CString blanks; for (int i = 0; i < str.GetLength(); i++) blanks += FILLER; SetWindowText(blanks); } } }
LRESULT CPasskeySetup::OnInsertBuffer(WPARAM, LPARAM) { // Update the variables UpdateData(TRUE); // Get the buffer CSecString vkbuffer = m_pVKeyBoardDlg->GetPassphrase(); CSecEditExtn *m_pSecCtl(NULL); CSecString *m_pSecString; switch (m_LastFocus) { case IDC_PASSKEY: m_pSecCtl = m_pctlPasskey; m_pSecString = &m_passkey; break; case IDC_VERIFY: m_pSecCtl = m_pctlVerify; m_pSecString = &m_verify; break; default: // Error! ASSERT(0); return 0L; } // Find the selected characters - if any int nStartChar, nEndChar; m_pSecCtl->GetSel(nStartChar, nEndChar); // If any characters selected - delete them if (nStartChar != nEndChar) m_pSecString->Delete(nStartChar, nEndChar - nStartChar); // Insert the buffer m_pSecString->Insert(nStartChar, vkbuffer); // Update the dialog UpdateData(FALSE); // Put cursor at end of inserted text m_pSecCtl->SetSel(nStartChar + vkbuffer.GetLength(), nStartChar + vkbuffer.GetLength()); // Make us on top SetWindowPos(&wndTop, 0, 0, 0, 0, SWP_SHOWWINDOW | SWP_NOMOVE | SWP_NOSIZE); return 0L; }