示例#1
0
BOOL Csp::CPGetKeyParam(
		IN  HCRYPTPROV hProv,
		IN  HCRYPTKEY hKey,
		IN  DWORD dwParam,
		OUT LPBYTE pbData,
		IN OUT LPDWORD pcbDataLen,
		IN  DWORD dwFlags){
	DECL_RET(ret);
	try {
		CSPContext * it = *findContext(hProv);
		CSPKeyContext * key =  *it->findKeyContext(hKey);
		packData dat(pbData,pcbDataLen);
		flagCheck f(dwFlags,true);
		switch (dwParam) { //TODO: rest of the params
			case KP_ALGID:
				m_log << "KP_ALGID " << key->m_algId << std::endl;
				dat.setValue(key->m_algId);
				break;
			case KP_CERTIFICATE:
				m_log << "KP_CERTIFICATE " << key->m_algId << std::endl;
				if (GET_ALG_TYPE(key->m_algId) != ALG_TYPE_RSA) 
					throw err_badType();
				dat.setValue(key->m_certificateBlob);
				break;
			default:
				throw err_badType();
				break;
		}
		ret.SetOk();
	} catch(std::runtime_error &err) {
		ret.logReturn(err);
	}
	return ret;
}
bool QQmlAndroidContextual::initContext(QQmlAndroidContext *context)
{
    if (!context)
        context = findContext(this);
    setContext(context);
    return context;
}
示例#3
0
MessageItem *DataModel::findMessage(const QString &context,
    const QString &sourcetext, const QString &comment) const
{
    if (ContextItem *ctx = findContext(context))
        return ctx->findMessage(sourcetext, comment);
    return 0;
}
void QQmlAndroidContextual::resolveContext()
{
    if (!m_context) {
        setContext(findContext(this));
        if (!m_context)
            qWarning() << "QQmlAndroidContextual: could not resolve context for" << this;
    }
}
示例#5
0
BOOL Csp::CPDestroyKey(
		IN  HCRYPTPROV hProv,
		IN  HCRYPTKEY hKey){
	DECL_RET(ret);
	try {
		CSPContext * it = *findContext(hProv);
		it->m_keys.erase(it->findKeyContext(hKey));
		ret.SetOk();
	} catch(std::runtime_error &err) {
		ret.logReturn(err);
	}
	return ret;
}
示例#6
0
Context&
Messages::findContext(const QString& name)
{
    for (unsigned int i = 0; i < _contexts.size(); ++i)
	if (_contexts[i].name == name)
	    return _contexts[i];

    Context context;
    context.name = name;
    _contexts.push_back(context);

    return findContext(name);
}
示例#7
0
BOOL Csp::CPGenKey(
		IN  HCRYPTPROV hProv,
		IN  ALG_ID Algid,
		IN  DWORD dwFlags,
		OUT HCRYPTKEY *phKey){
	try {
		CSPContext * it = *findContext(hProv);

		throw std::runtime_error("not implemented");
	} catch(std::runtime_error &) {
		return FALSE;
	}
	return TRUE;
}
示例#8
0
BOOL Csp::CPGetUserKey(
		IN  HCRYPTPROV hProv,
		IN  DWORD dwKeySpec,
		OUT HCRYPTKEY *phUserKey){
	DECL_RET(ret);
	try {
		CSPContext * it = *findContext(hProv);
		m_log << "GetUserKey, " << it->m_containerName << " dwKeySpec:" << dwKeySpec << std::endl;
		CSPKeyContext * key = it->createKeyContext();
		key->setPubkeySpec(dwKeySpec);
		key->m_keyId = getNextHandle();
		it->m_keys.push_back(key);
		*phUserKey = key->m_keyId;
		ret.SetOk();
	} catch(std::runtime_error &err) {
		ret.logReturn(err);
	}
	return ret;
}
示例#9
0
BOOL Csp::CPExportKey(
		IN  HCRYPTPROV hProv,
		IN  HCRYPTKEY hKey,
		IN  HCRYPTKEY hPubKey,
		IN  DWORD dwBlobType,
		IN  DWORD dwFlags,
		OUT LPBYTE pbData,
		IN OUT LPDWORD pcbDataLen){
	DECL_RET(ret);
	try {
		CSPContext * it = *findContext(hProv);
		CSPKeyContext * key =  *it->findKeyContext(hKey);

		switch (dwBlobType) {
			case PUBLICKEYBLOB: {
				if (hPubKey) throw err_badKey();
				packData dat(pbData,pcbDataLen);
				struct {
					PUBLICKEYSTRUC  pubkeyStruc;
					RSAPUBKEY		rsaKey;
					BYTE			modulus[2048 / 8];
				} RSABlob;
				PCCERT_CONTEXT ctx = CertCreateCertificateContext(X509_ASN_ENCODING,
					&key->m_certificateBlob[0],(DWORD)key->m_certificateBlob.size());
				PCRYPT_BIT_BLOB pubKey = &ctx->pCertInfo->SubjectPublicKeyInfo.PublicKey;
				DWORD actSize = sizeof(RSABlob);
				err_crypto::check(CryptDecodeObject(X509_ASN_ENCODING,
					RSA_CSP_PUBLICKEYBLOB,pubKey->pbData,pubKey->cbData,
					0, &RSABlob, &actSize));
				dat.setValue(RSABlob);
				//key->m_certificateBlo
				ret.SetOk();
				break;
				}
			default:
				throw std::runtime_error("not implemented");
			}
	} catch(std::runtime_error &err) {
		ret.logReturn(err);
	}
	return ret;
}
示例#10
0
bool
Messages::merge(const QString& filePath)
{
    QFile file(filePath);
    if (!file.open(IO_ReadOnly)) return false;

    QDomDocument doc;
    if (!doc.setContent(&file)) return false;
    file.close();

    QDomElement root = doc.documentElement();
    for (uint i = 0; i < root.childNodes().count(); ++i) {
	QDomNode node = root.childNodes().item(i);
	if (node.isNull()) continue;

	QDomElement e = node.toElement();
	if (e.isNull()) continue;

	QString tag = e.tagName();
	QString text = e.text();

	if (tag == "context") {
	    QDomNodeList nodes = e.childNodes();
	    QDomElement n = nodes.item(0).toElement();
	    assert(n.tagName() == "name");
	    QString name = n.text();

	    if (contextExists(name)) {
		Context& context = findContext(name);
		context.merge(nodes);
	    }
	} else {
	    qWarning("Error: unknown root tag: " + tag);
	}
    }

    return true;
}