All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.sun.jna.platform.win32.Crypt32 Maven / Gradle / Ivy

There is a newer version: 5.15.0
Show newest version
/* Copyright (c) 2010 Daniel Doubrovkine, All Rights Reserved
 *
 * The contents of this file is dual-licensed under 2 
 * alternative Open Source/Free licenses: LGPL 2.1 or later and 
 * Apache License 2.0. (starting with JNA version 4.0.0).
 * 
 * You can freely decide which license you want to apply to 
 * the project.
 * 
 * You may obtain a copy of the LGPL License at:
 * 
 * http://www.gnu.org/licenses/licenses.html
 * 
 * A copy is also included in the downloadable source code package
 * containing JNA, in file "LGPL2.1".
 * 
 * You may obtain a copy of the Apache License at:
 * 
 * http://www.apache.org/licenses/
 * 
 * A copy is also included in the downloadable source code package
 * containing JNA, in file "AL2.0".
 */
package com.sun.jna.platform.win32;

import com.sun.jna.Native;
import com.sun.jna.Pointer;
import com.sun.jna.platform.win32.WinCrypt.CRYPTPROTECT_PROMPTSTRUCT;
import com.sun.jna.platform.win32.WinCrypt.DATA_BLOB;
import com.sun.jna.ptr.PointerByReference;
import com.sun.jna.win32.StdCallLibrary;
import com.sun.jna.win32.W32APIOptions;
import com.sun.jna.platform.win32.WinCrypt.*;
import com.sun.jna.ptr.IntByReference;
import com.sun.jna.platform.win32.WinBase.FILETIME;
import com.sun.jna.platform.win32.WTypes.LPSTR;

/**
 * Crypt32.dll Interface.
 * @author dblock[at]dblock.org
 */
public interface Crypt32 extends StdCallLibrary {

	Crypt32 INSTANCE = Native.load("Crypt32", Crypt32.class, W32APIOptions.DEFAULT_OPTIONS);

	/**
	 * The CryptProtectData function performs encryption on the data in a DATA_BLOB
	 * structure. Typically, only a user with the same logon credential as the encrypter
	 * can decrypt the data. In addition, the encryption and decryption usually must be
	 * done on the same computer.
	 * @param pDataIn
	 *  Pointer to a DATA_BLOB structure that contains the plaintext to be encrypted.
	 * @param szDataDescr
	 *  String with a readable description of the data to be encrypted. This description
	 *  string is included with the encrypted data. This parameter is optional and can
	 *  be set to NULL, except on Windows 2000.
	 * @param pOptionalEntropy
	 *  Pointer to a DATA_BLOB structure that contains a password or other additional
	 *  entropy used to encrypt the data. The DATA_BLOB structure used in the encryption
	 *  phase must also be used in the decryption phase. This parameter can be set to NULL
	 *  for no additional entropy.
	 * @param pvReserved
	 *  Reserved for future use and must be set to NULL.
	 * @param pPromptStruct
	 *  Pointer to a CRYPTPROTECT_PROMPTSTRUCT structure that provides information about
	 *  where and when prompts are to be displayed and what the content of those prompts
	 *  should be. This parameter can be set to NULL in both the encryption and decryption
	 *  phases.
	 * @param dwFlags
	 *  One of CRYPTPROTECT_LOCAL_MACHINE, CRYPTPROTECT_UI_FORBIDDEN, CRYPTPROTECT_AUDIT,
	 *  CRYPTPROTECT_VERIFY_PROTECTION.
	 * @param pDataOut
	 *  Pointer to a DATA_BLOB structure that receives the encrypted data. When you have
	 *  finished using the DATA_BLOB structure, free its pbData member by calling the
	 *  LocalFree function.
	 * @return
	 *  If the function succeeds, the function returns TRUE. If the function fails,
	 *  it returns FALSE. For extended error information, call GetLastError.
	 */
	public boolean CryptProtectData(DATA_BLOB pDataIn, String szDataDescr,
			DATA_BLOB pOptionalEntropy, Pointer pvReserved,
			CRYPTPROTECT_PROMPTSTRUCT pPromptStruct,
			int dwFlags,
			DATA_BLOB pDataOut);

	/**
	 * The CryptUnprotectData function decrypts and does an integrity check of the data in
	 * a DATA_BLOB structure. Usually, only a user with the same logon credentials as the
	 * encrypter can decrypt the data. In addition, the encryption and decryption must be
	 * done on the same computer.
	 * @param pDataIn
	 *  Pointer to a DATA_BLOB structure that holds the encrypted data. The DATA_BLOB
	 *  structure's cbData member holds the length of the pbData member's byte string that
	 *  contains the text to be encrypted.
	 * @param szDataDescr
	 *  Pointer to a string-readable description of the encrypted data included with the
	 *  encrypted data. This parameter can be set to NULL. When you have finished using
	 *  ppszDataDescr, free it by calling the LocalFree function.
	 * @param pOptionalEntropy
	 *  Pointer to a DATA_BLOB structure that contains a password or other additional
	 *  entropy used when the data was encrypted. This parameter can be set to NULL;
	 *  however, if an optional entropy DATA_BLOB structure was used in the encryption
	 *  phase, that same DATA_BLOB structure must be used for the decryption phase.
	 * @param pvReserved
	 *  Reserved for future use; must be set to NULL.
	 * @param pPromptStruct
	 *  Pointer to a CRYPTPROTECT_PROMPTSTRUCT structure that provides information about
	 *  where and when prompts are to be displayed and what the content of those prompts
	 *  should be. This parameter can be set to NULL.
 	 * @param dwFlags
	 *  DWORD value that specifies options for this function. This parameter can be zero,
	 *  in which case no option is set, or CRYPTPROTECT_UI_FORBIDDEN.
	 * @param pDataOut
	 *  Pointer to a DATA_BLOB structure where the function stores the decrypted data.
	 *  When you have finished using the DATA_BLOB structure, free its pbData member by
	 *  calling the LocalFree function.
	 * @return
	 *  If the function succeeds, the return value is TRUE. If the function fails, the
	 *  return value is FALSE.
	 */
	public boolean CryptUnprotectData(DATA_BLOB pDataIn, PointerByReference szDataDescr,
			DATA_BLOB pOptionalEntropy, Pointer pvReserved,
			CRYPTPROTECT_PROMPTSTRUCT pPromptStruct,
			int dwFlags,
			DATA_BLOB pDataOut);

	/**
	 * The CertAddEncodedCertificateToSystemStore function opens the specified
	 * system store and adds the encoded certificate to it.
	 *
	 * @param szCertStoreName
	 *            A null-terminated string that contains the name of the system
	 *            store for the encoded certificate.
	 * @param pbCertEncoded
	 *            A pointer to a buffer that contains the encoded certificate to
	 *            add.
	 * @param cbCertEncoded
	 *            The size, in bytes, of the pbCertEncoded buffer.
	 * @return If the function succeeds, the return value is TRUE.
* If the function fails, the return value is FALSE.
* CertAddEncodedCertificateToSystemStore depends on the functions * listed in the following remarks for error handling.
* Refer to those function topics for their respective error * handling behaviors.
* For extended error information, call GetLastError. * @see MSDN */ boolean CertAddEncodedCertificateToSystemStore(String szCertStoreName, Pointer pbCertEncoded, int cbCertEncoded); /** * The CertOpenSystemStore function is a simplified function that opens the * most common system certificate store. To open certificate stores with * more complex requirements, such as file-based or memory-based stores, use * CertOpenStore. * * @param hprov This parameter is not used and should be set to NULL. * @param szSubsystemProtocol A string that names a system store. If the * system store name provided in this parameter is not the name of an * existing system store, a new system store will be created and used. * CertEnumSystemStore can be used to list the names of existing system * stores. Some example system stores are listed in the following table. * @return If the function succeeds, the function returns a handle to the * certificate store. If the function fails, it returns NULL. For extended * error information, call GetLastError. */ HCERTSTORE CertOpenSystemStore(Pointer hprov, String szSubsystemProtocol); /** * The CryptSignMessage function creates a hash of the specified content, * signs the hash, and then encodes both the original message content and * the signed hash. * * @param pSignPara A pointer to CRYPT_SIGN_MESSAGE_PARA structure * containing the signature parameters. * @param fDetachedSignature TRUE if this is to be a detached signature. * Otherwise, FALSE. If this parameter is set to TRUE, only the signed hash * is encoded in pbSignedBlob. Otherwise, both rgpbToBeSigned and the signed * hash are encoded. * @param cToBeSigned Count of the number of array elements in * rgpbToBeSigned and rgpbToBeSigned. This parameter must be set to one * unless fDetachedSignature is set to TRUE. * @param rgpbToBeSigned Array of pointers to buffers that contain the * contents to be signed. * @param rgcbToBeSigned Array of sizes, in bytes, of the content buffers * pointed to in rgpbToBeSigned. * @param pbSignedBlob A pointer to a buffer to receive the encoded signed * hash, if fDetachedSignature is TRUE, or to both the encoded content and * signed hash if fDetachedSignature is FALSE. * @param pcbSignedBlob A pointer to a DWORD specifying the size, in bytes, * of the pbSignedBlob buffer. When the function returns, this variable * contains the size, in bytes, of the signed and encoded message. * @return If the function succeeds, the return value is nonzero (TRUE). If * the function fails, the return value is zero (FALSE). */ boolean CryptSignMessage(CRYPT_SIGN_MESSAGE_PARA pSignPara, boolean fDetachedSignature, int cToBeSigned, Pointer[] rgpbToBeSigned, int[] rgcbToBeSigned, Pointer pbSignedBlob, IntByReference pcbSignedBlob); /** * The CryptVerifyMessageSignature function verifies a signed message's * signature. * * This function should not be used to verify the signature of a detached * message. You should use the CryptVerifyDetachedMessageSignature function * to verify the signature of a detached message. * * @param pVerifyPara A pointer to a CRYPT_VERIFY_MESSAGE_PARA structure * that contains verification parameters. * @param signerIndex The index of the de sired signature. There can be more * than one signature. CryptVerifyMessageSignature can be called repeatedly, * incrementing dwSignerIndex each time. * *

* Set this pa rameter to zero for the first signer, or if there is only one * signer. If the function returns FALSE, and GetLastError returns * CRYPT_E_NO_SIGNER, the previous call processed the last signer of the * message.

* @param pbSignedBlob A pointer to a buffe r that contains the signed * message. * @param cbSignedBlob The size, in bytes, of the signed message buffer. * @param pbDecoded * A pointer to a buffer to receive the decoded message. * *

* This parameter can be NULL if the decoded message is not needed for * additional processing or to set the size of the message for memory * allocation purposes. For more information, see Retrieving Data of Unknown * Length.

* * @param pcbDecoded A pointer to a DWO RD value that specifies the size, in * bytes, of the pbDecoded buffer. When the function returns, this DWORD * contains the size, in bytes, of the decoded message. The decoded message * will not be returned if this parameter is NULL. * @param ppSignerCert The address of a CER T_CONTEXT structure pointer that * receives the certificate of the signer. When you have finished using this * structure, free it by passing this pointer to the * CertFreeCertificateContext function. This parameter can be NULL if the * signer's certificate is not needed. * @return If the function succeeds, the function returns nonzero. This does * not necessarily mean that the signature was verified. In the case of a * detached message, the variable pointe d to by pcbDecoded will contain * zero. In this case, this funct ion will return nonzero, but the signature * is not verified . To verify the signature of a detached message, use the * CryptVerifyDetachedMessageSignature function. * *

* If the function succeeds, the function returns nonzero. This does not * necessarily mean that the signature was verified. In the case of a * detached message, the variable pointed to by pcbDecoded will contain * zero. In this case, this function will return nonzero, but the signature * is not verified. To verify the signature of a detached message, use t he * CryptVerifyDetachedMessageSignature function. */ boolean CryptVerifyMessageSignature(CRYPT_VERIFY_MESSAGE_PARA pVerifyPara, int signerIndex, Pointer pbSignedBlob, int cbSignedBlob, Pointer pbDecoded, IntByReference pcbDecoded, PointerByReference ppSignerCert); /** * The CertGetCertificateChain function builds a certificate chain context * starting from an end certificate and going back, if possible, to a * trusted root certificate. * * @param hChainEngine A handle of the chain engine (namespace and cache) to * be used. If hChainEngine is NULL, the default chain engine, * HCCE_CURRENT_USER, is used. This parameter can be set to * HCCE_LOCAL_MACHINE. * @param pCertContext A pointer to the CERT_CONTEXT of the end certificate, * the certificate for which a chain is being built. This certificate * context will be the zero-index element in the first simple chain. * @param pTime A pointer to a FILETIME variable that indicates the time for * which the chain is to be validated. Note that the time does not affect * trust list, revocation, or root store checking. The current system time * is used if NULL is passed to this parameter. Trust in a particular * certificate being a trusted root is based on the current state of the * root store and not the state of the root store at a time passed in by * this parameter. For revocation, a certificate revocation list (CRL), * itself, must be valid at the current time. The value of this parameter is * used to determine whether a certificate listed in a CRL has been revoked. * @param hAdditionalStore A handle to any additional store to search for * supporting certificates and certificate trust lists (CTLs). This * parameter can be NULL if no additional store is to be searched. * @param pChainPara A pointer to a CERT_CHAIN_PARA structure that includes * chain-building parameters. * @param dwFlags Flag values that indicate special processing. This * parameter can be a combination of one or more of the following flags. * @param pvReserved This parameter is reserved and must be NULL. * @param ppChainContext The address of a pointer to the chain context * created. When you have finished using the chain context, release the * chain by calling the CertFreeCertificateChain function. * @return If the function succeeds, the function returns nonzero (TRUE). If * the function fails, it returns zero (FALSE). */ boolean CertGetCertificateChain(HCERTCHAINENGINE hChainEngine, CERT_CONTEXT pCertContext, FILETIME pTime, HCERTSTORE hAdditionalStore, CERT_CHAIN_PARA pChainPara, int dwFlags, Pointer pvReserved, PointerByReference ppChainContext); /** * The CertFreeCertificateContext function frees a certificate context by * decrementing its reference count. When the reference count goes to zero, * CertFreeCertificateContext frees the memory used by a certificate * context. * * @param pCertContext A pointer to the CERT_CONTEXT to be freed. * @return The function always returns nonzero. */ boolean CertFreeCertificateContext(CERT_CONTEXT pCertContext); /** * The CertFreeCertificateChain function frees a certificate chain by * reducing its reference count. If the reference count becomes zero, memory * allocated for the chain is released. * *

To free a context obtained by a get, duplicate, or create function, call * the appropriate free function. To free a context obtained by a find or * enumerate function, either pass it in as the previous context parameter * to a subsequent invocation of the function, or call the appropriate free * function. For more information, see the reference topic for the function * that obtains the context.

* * @param pChainContext A pointer to a CERT_CHAIN_CONTEXT certificate chain * context to be freed. If the reference count on the context reaches zero, * the storage allocated for the context is freed. */ void CertFreeCertificateChain(CERT_CHAIN_CONTEXT pChainContext); /** * The CertCloseStore function closes a certificate store handle and reduces * the reference count on the store. There needs to be a corresponding call * to CertCloseStore for each successful call to the CertOpenStore or * CertDuplicateStore functions. * * @param hCertStore Handle of the certificate store to be closed. * @param dwFlags Typically, this parameter uses the default value zero. The * default is to close the store with memory remaining allocated for * contexts that have not been freed. In this case, no check is made to * determine whether memory for contexts remains allocated. * @return If the function succeeds, the return value is TRUE. If the * function fails, the return value is FALSE. */ boolean CertCloseStore(HCERTSTORE hCertStore, int dwFlags); /** * The CertNameToStr function converts an encoded name in a CERT_NAME_BLOB * structure to a character string. * * @param dwCertEncodingType The certificate encoding type that was used to * encode the name. The message encoding type identifier, contained in the * high WORD of this value, is ignored by this function. * @param pName A pointer to the CERT_NAME_BLOB structure to be converted. * @param dwStrType This parameter specifies the format of the output * string. This parameter also specifies other options for the contents of * the string. * @param psz A pointer to a character buffer that receives the returned * string. The size of this buffer is specified in the csz parameter. * @param csz The size, in characters, of the psz buffer. The size must * include the terminating null character. * @return Returns the number of characters converted, including the * terminating null character. If psz is NULL or csz is zero, returns the * required size of the destination string. */ int CertNameToStr(int dwCertEncodingType, DATA_BLOB pName, int dwStrType, Pointer psz, int csz); /** * The CertVerifyCertificateChainPolicy function checks a certificate chain * to verify its validity, including its compliance with any specified * validity policy criteria. * * @param pszPolicyOID Current predefined verify chain policy structures are * listed in the following table. * @param pChainContext A pointer to a CERT_CHAIN_CONTEXT structure that * contains a chain to be verified. * @param pPolicyPara A pointer to a CERT_CHAIN_POLICY_PARA structure that * provides the policy verification criteria for the chain. The dwFlags * member of that structure can be set to change the default policy checking * behavior. * @param pPolicyStatus A pointer to a CERT_CHAIN_POLICY_STATUS structure * where status information on the chain is returned. OID-specific extra * status can be returned in the pvExtraPolicyStatus member of this * structure. * @return The return value indicates whether the function was able to check * for the policy, it does not indicate whether the policy check failed or * passed. * * If the chain can be verified for the specified policy, TRUE is returned * and the dwError member of the pPolicyStatus is updated. A dwError of 0 * (ERROR_SUCCESS or S_OK) indicates the chain satisfies the specified * policy. * * If the chain cannot be validated, the return value is TRUE and you need * to verify the pPolicyStatus parameter for the actual error. * * A value of FALSE indicates that the function wasn't able to check for the * policy. */ boolean CertVerifyCertificateChainPolicy(LPSTR pszPolicyOID, CERT_CHAIN_CONTEXT pChainContext, CERT_CHAIN_POLICY_PARA pPolicyPara, CERT_CHAIN_POLICY_STATUS pPolicyStatus); /** * The CertFindCertificateInStore function finds the first or next * certificate context in a certificate store that matches a search criteria * established by the dwFindType and its associated pvFindPara. This * function can be used in a loop to find all of the certificates in a * certificate store that match the specified find criteria. * * @param hCertStore A handle of the certificate store to be searched. * @param dwCertEncodingType Specifies the type of encoding used. Both the * certificate and message encoding types must be specified by combining * them with a bitwise-OR. * @param dwFindFlags Used with some dwFindType values to modify the search * criteria. For most dwFindType values, dwFindFlags is not used and should * be set to zero. * @param dwFindType Specifies the type of search being made. The search * type determines the data type, contents, and the use of pvFindPara. * @param pvFindPara Points to a data item or structure used with * dwFindType. * @param pPrevCertContext A pointer to the last CERT_CONTEXT structure * returned by this function. This parameter must be NULL on the first call * of the function. To find successive certificates meeting the search * criteria, set pPrevCertContext to the pointer returned by the previous * call to the function. This function frees the CERT_CONTEXT referenced by * non-NULL values of this parameter. * @return If the function succeeds, the function returns a pointer to a * read-only CERT_CONTEXT structure. * * If the function fails and a certificate that matches the search criteria * is not found, the return value is NULL. * * A non-NULL CERT_CONTEXT that CertFindCertificateInStore returns must be * freed by CertFreeCertificateContext or by being passed as the * pPrevCertContext parameter on a subsequent call to * CertFindCertificateInStore. */ CERT_CONTEXT.ByReference CertFindCertificateInStore(HCERTSTORE hCertStore, int dwCertEncodingType, int dwFindFlags, int dwFindType, Pointer pvFindPara, CERT_CONTEXT pPrevCertContext); /** * The PFXImportCertStore function imports a PFX BLOB and returns the handle * of a store that contains certificates and any associated private keys. * * @param pPFX A pointer to a CRYPT_DATA_BLOB structure that contains a PFX * packet with the exported and encrypted certificates and keys. * @param szPassword A string password used to decrypt and verify the PFX * packet. Whether set to a string of length greater than zero or set to an * empty string or to NULL, this value must be exactly the same as the value * that was used to encrypt the packet. * *

* Beginning with Windows 8 and Windows Server 2012, if the PFX packet was * created in the PFXExportCertStoreEx function by using the * PKCS12_PROTECT_TO_DOMAIN_SIDS flag, the PFXImportCertStore function * attempts to decrypt the password by using the Active Directory (AD) * principal that was used to encrypt it. The AD principal is specified in * the pvPara parameter. If the szPassword parameter in the * PFXExportCertStoreEx function was an empty string or NULL and the dwFlags * parameter was set to PKCS12_PROTECT_TO_DOMAIN_SIDS, that function * randomly generated a password and encrypted it to the AD principal * specified in the pvPara parameter. In that case you should set the * password to the value, empty string or NULL, that was used when the PFX * packet was created. The PFXImportCertStore function will use the AD * principal to decrypt the random password, and the randomly generated * password will be used to decrypt the PFX certificate.

* *

* When you have finished using the password, clear it from memory by * calling the SecureZeroMemory function. For more information about * protecting passwords, see Handling Passwords.

* * @param dwFlags This parameter can be one of the following values. *
    *
  • {@link WinCrypt#CRYPT_EXPORTABLE}
  • *
  • {@link WinCrypt#CRYPT_USER_PROTECTED}
  • *
  • {@link WinCrypt#CRYPT_MACHINE_KEYSET}
  • *
  • {@link WinCrypt#CRYPT_USER_KEYSET}
  • *
  • {@link WinCrypt#PKCS12_PREFER_CNG_KSP}
  • *
  • {@link WinCrypt#PKCS12_ALWAYS_CNG_KSP}
  • *
  • {@link WinCrypt#PKCS12_ALLOW_OVERWRITE_KEY}
  • *
  • {@link WinCrypt#PKCS12_NO_PERSIST_KEY}
  • *
  • {@link WinCrypt#PKCS12_INCLUDE_EXTENDED_PROPERTIES}
  • *
* * @return If the function succeeds, the function returns a handle to a * certificate store that contains the imported certificates, including * available private keys. * *

* If the function fails, that is, if the password parameter does not * contain an exact match with the password used to encrypt the exported * packet or if there were any other problems decoding the PFX BLOB, the * function returns NULL, and an error code can be found by calling the * GetLastError function.

* * @see MSDN */ HCERTSTORE PFXImportCertStore(DATA_BLOB pPFX, WTypes.LPWSTR szPassword, int dwFlags); }




© 2015 - 2024 Weber Informatics LLC | Privacy Policy