Articles of cryptoapi

Linuxencryption库中的alloc_ahash vs alloc_shash

在Linux CRYPTO库中,有哪些区别: crypto_alloc_hash(…); crypto_alloc_ahash(…); crypto_alloc_shash(…); 我猜测'a'代表asynchronous,'s'代表同步。 如果是这样的话,在实施select上意味着什么? (我试图find正确的方法来计算HMAC(SHA1)值,同时使用CRYPTO库处理TCP数据包)。

使用纯粹的linux crypto API在C中创buildHMAC SHA1

我需要在C程序中的某些散列表上应用HMAC SHA1。 我有一个为内核2.4 hmacencryptionapi编写的示例代码,它使用此函数: void crypto_hmac(struct crypto_tfm *tfm, u8 *key, unsigned int *keylen, struct scatterlist *sg, unsigned int nsg, u8 *out) 但是内核3.13和之后的encryptionAPI比2.4差很多! 我到处寻找使用新的奇怪的最小化函数的例子 static int hmac_create(struct crypto_template *tmpl, struct rtattr **tb) 提供在hmac.c(源/encryption) ,但我找不到任何使用内核encryptionAPI 具体 hmac变换的主题或例子。 任何机构有任何使用Linux中Crypto API HMAC的经验吗? 使用这个程序不会超过几行C代码。

CertCreateCertificateChainEngine在Windows 7中引发错误

ChainConfig.cbSize = sizeof(CERT_CHAIN_ENGINE_CONFIG); ChainConfig.hRestrictedRoot = NULL; ChainConfig.hRestrictedTrust = NULL; ChainConfig.hRestrictedOther = NULL; ChainConfig.cAdditionalStore = 0; ChainConfig.rghAdditionalStore = NULL; ChainConfig.dwFlags = CERT_CHAIN_CACHE_END_CERT; ChainConfig.dwUrlRetrievalTimeout = 0; ChainConfig.MaximumCachedCertificates = 0; ChainConfig.CycleDetectionModulus = 0; //——————————————————— // Create the nondefault certificate chain engine. if (CertCreateCertificateChainEngine( &ChainConfig, &hChainEngine)){ printf("A chain engine has been created.\n");} 获取错误0x80070057(-2147024809)参数不正确,有人可以帮忙吗?

如何使用根证书签署我的证书?

我在我的服务器和客户端之间使用基于证书的authentication。 我已经生成了根证书。 我的客户在安装时会生成一个新的证书,并使用根证书对其进行签名。 我需要使用Windows API。 不能使用任何Windows工具,如makecert。 到目前为止,我已经能够在商店中安装根证书。 下面的代码 X509Certificate2 ^ certificate = gcnew X509Certificate2("C:\\rootcert.pfx","test123"); X509Store ^ store = gcnew X509Store( "teststore",StoreLocation::CurrentUser ); store->Open( OpenFlags::ReadWrite ); store->Add( certificate ); store->Close(); 然后打开已安装的根证书来获取上下文 GetRootCertKeyInfo(){ HCERTSTORE hCertStore; PCCERT_CONTEXT pSignerCertContext=NULL; DWORD dwSize = NULL; CRYPT_KEY_PROV_INFO* pKeyInfo = NULL; DWORD dwKeySpec; if ( !( hCertStore = CertOpenStore(CERT_STORE_PROV_SYSTEM, 0, NULL, CERT_SYSTEM_STORE_CURRENT_USER,L"teststore"))) { […]

加载密钥库时如何防止popup窗口

嗨作为这个问题的必然结果,我想问你是否知道如何防止对话的popup要求密码或要求插入证书。 我们正在build立一个系统,我们必须使用Windows密钥库来获取存储在包含读写器和证书的USB令牌上的证书。 与原来的问题不同,我们在加载密钥库时并不会遇到问题,而是在访问密钥库时遇到问题。 如果密钥库中只有一个证书没有问题,我们会在适当的时间获得适当的密码popup窗口,就是这样。 但是,如果第二个USB密钥被插入到系统中,并且以后被移除,则该项保留在密钥库中,并且从每次我们试图访问密钥库中的信息时,我们都会得到一个popup窗口来插入密钥。 对于密钥当前未连接到计算机的商店中的每个证书,都会发生这种情况。 我们与之交互的系统要求这些证书要求我们执行多个encryption操作,并且每次都popup这些popup窗口,这是很烦人的。

如何将机器证书导入与Windows服务关联的个人证书存储?

我从MSDN论坛转发我的问题 ,希望有人在那里得到答案。 我有一个严重的问题。 它必须将证书导入到与Windows服务关联的个人证书存储中。 我的机器的名称是il-mark-lap (机器可以通过此名称进行ping)。 过程: 1.有自签名的权威证书,我们称之为NCCA 。 它的私钥存在于另一台机器上,让我们通过dev-profiler来引用它。 dev-profiler> makecert -n "CN=NCCA" -sr localmachine -ss root -a sha1 -cy authority -r -sv NCCA.pvk NCCA.cer 2. il-mark-lap机器证书在dev-profiler上创build并导入到il-mark-lap上的LocalComputer \ My证书存储区 。 请注意,授权证书( NCCA )必须移到LocalComputer \ Root证书存储区,但由于我不知道如何移动,我使用export-delete-import序列。 dev-profiler> makecert -n "CN=il-mark-lap" -sr CurrentUser -ss My -cy end -pe -sky exchange -a sha1 -is Root -ir LocalMachine […]

生成基于PUBLICKEYBLOB / PRIVATEKEYBLOB的会话密钥

我的代码看起来像这样,我跟踪每个未定义的方法在这里调用包括相关参数调用的函数。 我很难把API放在头上。 所以我在这里可以生成公钥/私钥,并且可以生成会话密钥,但是如何根据公钥生成会话密钥? 我在这里错过/假设(错误)? void Crypto::GenerateKeyPair( Buffer& publicKey, Buffer& privateKey ) throw(WinError) { /* CryptAcquireContext ( PROV_RSA_FULL, CRYPT_VERIFYCONTEXT ) */ CryptContext context = CryptoProviders::NewContext(PROV_RSA_FULL, CRYPT_VERIFYCONTEXT); /* CryptGenKey( AT_KEYEXCHANGE, CRYPT_EXPORTABLE, &key) */ CryptKey key = context.GenerateKeyExchangePair(); /* CryptExportKey( PUBLICKEYBLOB, pPub); */ key.ExportPublicKey(publicKey); /* CryptExportKey( PRIVATEKEYBLOB, pPriv); */ key.ExportPrivateKey(privateKey); } void Crypto::GenerateSessionKey( Buffer& sessionKey ) throw(WinError) { […]

如何使用encryptionAPI与多个线程encryption文件?

我正在尝试使用multithreadingencryption文件,并使用Crypto API / AES256 / CBC模式/ NO IV(初始化向量)。 我将文件划分为多个线程。 获取文件最后一个块的线程,将CryptEncrypt传递给Final。 遵循这里build议的方法:每个线程使用重复的密钥。 此外,每个线程都以共享读取模式打开源文件,并开始从分配的偏移量读取数据,并保持对目标文件的encryption和写入(再次以共享写入模式打开)作为适当的偏移量。 我得到的单线程和multithreading的输出文件是不一样的和哈希不匹配。 那我做错了什么?

将DER编码的X509证书缓冲区转换为Windows CERT_CONTEXT结构

我有一个X509证书,它是使用OpenSSL创build的,并使用OpenSSL i2d_X509()函数导出到DER blob。 有没有办法将DER证书blob转换成Windows CERT_CONTEXT结构? 我知道,它可以使用临时文件CertOpenStore(CERT_STORE_PROV_FILENAME)和CertEnumCertificatesInStore()函数完成。 但没有使用临时文件找不到任何方法。

CertCreateCertificateContext返回CRYPT_E_ASN1_BADTAG / 8009310b

我意识到这是一个非常类似的职位(比如这个职位),但是这些职位中缺less的细节可能对我的案例有重大意义。 首先,这是我的简化程序: #include "stdafx.h" #include <windows.h> #include <wincrypt.h> int _tmain(int argc, _TCHAR* argv[]) { // usage: CertExtract certpath char keyFile[] = "C:\\Certificates\\public.crt"; BYTE lp[65536]; SECURITY_ATTRIBUTES sa; HANDLE hKeyFile; DWORD bytes; PCCERT_CONTEXT certContext; sa.nLength = sizeof(sa); sa.lpSecurityDescriptor = NULL; sa.bInheritHandle = FALSE; hKeyFile = CreateFile(keyFile, GENERIC_READ, FILE_SHARE_READ, &sa, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL); if (hKeyFile) { if (ReadFile(hKeyFile, […]