# MsCrypto Application Helpers

**API Group:** `xmlsec_mscrypto_app`

High-level application helpers for the MsCrypto back-end.

Application support functions for MSCrypto.

Common functions for the xmlsec1 command-line utility for MSCrypto.

## Functions

### `xmlSecMSCryptoAppInit`

```c
int xmlSecMSCryptoAppInit(const char *config);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L29)

Initializes the MSCrypto crypto engine.

General crypto engine initialization. This function is used by the XMLSec command-line utility and is called before the `xmlSecInit` function.

**Parameters:**

- `config` — the name of a certificate store other than the default Microsoft certificate store.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppShutdown`

```c
int xmlSecMSCryptoAppShutdown(void);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L30)

Shuts down the MSCrypto crypto engine.

General crypto engine shutdown. This function is used by the XMLSec command-line utility and is called after the `xmlSecShutdown` function.

**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppGetCertStoreName`

```c
const char * xmlSecMSCryptoAppGetCertStoreName(void);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L31)

Gets the MSCrypto certs store name.

Gets the MS Crypto certs store name set by `xmlSecMSCryptoAppInit` function.

**Returns:** the MS Crypto certs name used by xmlsec-mscrypto.

---

### `xmlSecMSCryptoAppDefaultKeysMngrInit`

```c
int xmlSecMSCryptoAppDefaultKeysMngrInit(xmlSecKeysMngrPtr mngr);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L38)

Initializes the default key manager for MSCrypto.

Initializes `mngr` with simple keys store `xmlSecSimpleKeysStoreId` and a default MSCrypto crypto key data stores.

**Parameters:**

- `mngr` — the pointer to keys manager.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppDefaultKeysMngrAdoptKey`

```c
int xmlSecMSCryptoAppDefaultKeysMngrAdoptKey(xmlSecKeysMngrPtr mngr, xmlSecKeyPtr key);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L39)

Adds `key` to the keys manager.

Adds `key` to the keys manager `mngr` created with `xmlSecMSCryptoAppDefaultKeysMngrInit` function.

**Parameters:**

- `mngr` — the pointer to keys manager.
- `key` — the pointer to key.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppDefaultKeysMngrVerifyKey`

```c
int xmlSecMSCryptoAppDefaultKeysMngrVerifyKey(xmlSecKeysMngrPtr mngr, xmlSecKeyPtr key, xmlSecKeyInfoCtxPtr keyInfoCtx);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L41)

Verifies `key` using the keys manager.

Verifies `key` with the keys manager `mngr` created with `xmlSecCryptoAppDefaultKeysMngrInit` function:

- Checks that key certificate is present
- Checks that key certificate is valid

Adds `key` to the keys manager `mngr` created with `xmlSecCryptoAppDefaultKeysMngrInit` function.

**Parameters:**

- `mngr` — the pointer to keys manager.
- `key` — the pointer to key.
- `keyInfoCtx` — the key info context for verification.


**Returns:** 1 if key is verified, 0 otherwise, or a negative value if an error occurs.

---

### `xmlSecMSCryptoAppDefaultKeysMngrLoad`

```c
int xmlSecMSCryptoAppDefaultKeysMngrLoad(xmlSecKeysMngrPtr mngr, const char *uri);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L44)

Loads the XML keys file into the keys manager.

Loads XML keys file from `uri` to the keys manager `mngr` created with `xmlSecMSCryptoAppDefaultKeysMngrInit` function.

**Parameters:**

- `mngr` — the pointer to keys manager.
- `uri` — the uri.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppDefaultKeysMngrSave`

```c
int xmlSecMSCryptoAppDefaultKeysMngrSave(xmlSecKeysMngrPtr mngr, const char *filename, xmlSecKeyDataType type);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L46)

Saves keys from `mngr` to XML keys file.

**Parameters:**

- `mngr` — the pointer to keys manager.
- `filename` — the destination filename.
- `type` — the type of keys to save (public/private/symmetric).


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppDefaultKeysMngrPrivateKeyLoad`

```c
int xmlSecMSCryptoAppDefaultKeysMngrPrivateKeyLoad(xmlSecKeysMngrPtr mngr, void *hKey);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L49)

Adds private key `hKey` to the keys manager.

Adds private key `hKey` to the keys manager `mngr`.

**Parameters:**

- `mngr` — the pointer to keys manager.
- `hKey` — the key handle.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppDefaultKeysMngrPublicKeyLoad`

```c
int xmlSecMSCryptoAppDefaultKeysMngrPublicKeyLoad(xmlSecKeysMngrPtr mngr, void *hKey);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L51)

Adds public key `hKey` to the keys manager.

Adds public key `hKey` to the keys manager `mngr`.

**Parameters:**

- `mngr` — the pointer to keys manager.
- `hKey` — the key handle.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppDefaultKeysMngrSymKeyLoad`

```c
int xmlSecMSCryptoAppDefaultKeysMngrSymKeyLoad(xmlSecKeysMngrPtr mngr, void *hKey);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L53)

Adds symmetric key `hKey` to the keys manager.

Adds symmetric key `hKey` to the keys manager `mngr`.

**Parameters:**

- `mngr` — the pointer to keys manager.
- `hKey` — the key handle.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppDefaultKeysMngrAdoptKeyStore`

```c
int xmlSecMSCryptoAppDefaultKeysMngrAdoptKeyStore(xmlSecKeysMngrPtr mngr, void *keyStore);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L56)

Adds `keyStore` to the keys manager.

Adds `keyStore` to the list of key stores in the keys manager `mngr`.

**Parameters:**

- `mngr` — the keys manager.
- `keyStore` — the pointer to keys store.


**Returns:** 0 on success or a negative value if an error occurs.

---

### `xmlSecMSCryptoAppDefaultKeysMngrAdoptTrustedStore`

```c
int xmlSecMSCryptoAppDefaultKeysMngrAdoptTrustedStore(xmlSecKeysMngrPtr mngr, void *trustedStore);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L59)

Adds `trustedStore` to the trusted cert stores.

Adds `trustedStore` to the list of trusted cert stores in the keys manager `mngr`.

**Parameters:**

- `mngr` — the keys manager.
- `trustedStore` — the pointer to certs store.


**Returns:** 0 on success or a negative value if an error occurs.

---

### `xmlSecMSCryptoAppDefaultKeysMngrAdoptUntrustedStore`

```c
int xmlSecMSCryptoAppDefaultKeysMngrAdoptUntrustedStore(xmlSecKeysMngrPtr mngr, void *untrustedStore);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L62)

Adds `untrustedStore` to the untrusted cert stores.

Adds `untrustedStore` to the list of un-trusted cert stores in the keys manager `mngr`.

**Parameters:**

- `mngr` — the keys manager.
- `untrustedStore` — the pointer to certs store.


**Returns:** 0 on success or a negative value if an error occurs.

---

### `xmlSecMSCryptoAppKeysMngrCertLoad`

```c
int xmlSecMSCryptoAppKeysMngrCertLoad(xmlSecKeysMngrPtr mngr, const char *filename, xmlSecKeyDataFormat format, xmlSecKeyDataType type);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L65)

Reads a cert from a file and adds to the key store.

Reads cert from `filename` and adds to the list of trusted or known untrusted certs in `store`.

**Parameters:**

- `mngr` — the keys manager.
- `filename` — the certificate file.
- `format` — the certificate file format.
- `type` — the flag that indicates is the certificate in `filename` trusted or not.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppKeysMngrCertLoadMemory`

```c
int xmlSecMSCryptoAppKeysMngrCertLoadMemory(xmlSecKeysMngrPtr mngr, const xmlSecByte *data, xmlSecSize dataSize, xmlSecKeyDataFormat format, xmlSecKeyDataType type);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L69)

Reads cert from buffer and adds to the key store.

Reads cert from `data` and adds to the list of trusted or known untrusted certs in `store`.

**Parameters:**

- `mngr` — the keys manager.
- `data` — the binary certificate.
- `dataSize` — size of binary certificate (data)
- `format` — the certificate file format.
- `type` — the flag that indicates is the certificate in `filename` trusted or not.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppKeysMngrCrlLoad`

```c
int xmlSecMSCryptoAppKeysMngrCrlLoad(xmlSecKeysMngrPtr mngr, const char *filename, xmlSecKeyDataFormat format);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L75)

Reads CRLs from a file and adds to the store.

Reads crl from `filename` and adds to the list of crls in `store`.

**Parameters:**

- `mngr` — the keys manager.
- `filename` — the CRL file.
- `format` — the CRL file format.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppKeysMngrCrlLoadMemory`

```c
int xmlSecMSCryptoAppKeysMngrCrlLoadMemory(xmlSecKeysMngrPtr mngr, const xmlSecByte *data, xmlSecSize dataSize, xmlSecKeyDataFormat format);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L78)

Reads CRLs from memory and adds to the store.

Reads crl from `data` and adds to the list of crls in `store`.

**Parameters:**

- `mngr` — the keys manager.
- `data` — the binary CRL.
- `dataSize` — size of binary CRL (data)
- `format` — the CRL format.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppKeysMngrCrlLoadAndVerify`

```c
int xmlSecMSCryptoAppKeysMngrCrlLoadAndVerify(xmlSecKeysMngrPtr mngr, const char *filename, xmlSecKeyDataFormat format, xmlSecKeyInfoCtxPtr keyInfoCtx);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L82)

Loads and verifies a CRL from a file.

Atomically loads and verifies a CRL from `filename`.

**Parameters:**

- `mngr` — the keys manager.
- `filename` — the CRL filename.
- `format` — the CRL format (PEM or DER).
- `keyInfoCtx` — the key info context for verification parameters.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppKeyLoadEx`

```c
xmlSecKeyPtr xmlSecMSCryptoAppKeyLoadEx(const char *filename, xmlSecKeyDataType type, xmlSecKeyDataFormat format, const char *pwd, void *pwdCallback, void *pwdCallbackCtx);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L94)

Reads a key from a file.

**Parameters:**

- `filename` — the key filename.
- `type` — the expected key type.
- `format` — the key file format.
- `pwd` — the key file password.
- `pwdCallback` — the key password callback.
- `pwdCallbackCtx` — the user context for password callback.


**Returns:** pointer to the key or NULL if an error occurs.

---

### `xmlSecMSCryptoAppKeyLoadMemory`

```c
xmlSecKeyPtr xmlSecMSCryptoAppKeyLoadMemory(const xmlSecByte *data, xmlSecSize dataSize, xmlSecKeyDataFormat format, const char *pwd, void *pwdCallback, void *pwdCallbackCtx);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L100)

Reads a key from the binary `data`.

**Parameters:**

- `data` — the key binary data.
- `dataSize` — the key data size.
- `format` — the key format.
- `pwd` — the key password.
- `pwdCallback` — the key password callback.
- `pwdCallbackCtx` — the user context for password callback.


**Returns:** pointer to the key or NULL if an error occurs.

---

### `xmlSecMSCryptoAppPkcs12Load`

```c
xmlSecKeyPtr xmlSecMSCryptoAppPkcs12Load(const char *filename, const char *pwd, void *pwdCallback, void *pwdCallbackCtx);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L107)

Reads key and certificates from PKCS12 file.

Reads a key and all associated certificates from the PKCS12 file.

**Parameters:**

- `filename` — the PKCS12 key filename.
- `pwd` — the PKCS12 file password.
- `pwdCallback` — the password callback.
- `pwdCallbackCtx` — the user context for password callback.


**Returns:** pointer to the key or NULL if an error occurs.

---

### `xmlSecMSCryptoAppPkcs12LoadMemory`

```c
xmlSecKeyPtr xmlSecMSCryptoAppPkcs12LoadMemory(const xmlSecByte *data, xmlSecSize dataSize, const char *pwd, void *pwdCallback, void *pwdCallbackCtx);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L111)

Reads key and certificates from PKCS12 binary.

Reads a key and all associated certificates from the PKCS12 binary.

**Parameters:**

- `data` — the binary PKCS12 key in data.
- `dataSize` — size of binary pkcs12 data
- `pwd` — the PKCS12 file password.
- `pwdCallback` — the password callback.
- `pwdCallbackCtx` — the user context for password callback.


**Returns:** pointer to the key or NULL if an error occurs.

---

### `xmlSecMSCryptoAppKeyCertLoad`

```c
int xmlSecMSCryptoAppKeyCertLoad(xmlSecKeyPtr key, const char *filename, xmlSecKeyDataFormat format);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L116)

Reads the certificate from a file and adds to key.

Reads the certificate from `filename` and adds it to key.

**Parameters:**

- `key` — the pointer to key.
- `filename` — the certificate filename.
- `format` — the certificate file format.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppKeyCertLoadMemory`

```c
int xmlSecMSCryptoAppKeyCertLoadMemory(xmlSecKeyPtr key, const xmlSecByte *data, xmlSecSize dataSize, xmlSecKeyDataFormat format);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L119)

Reads the certificate from memory and adds to key.

Reads the certificate from `data` and adds it to key.

**Parameters:**

- `key` — the pointer to key.
- `data` — the binary certificate.
- `dataSize` — size of certificate binary (data)
- `format` — the certificate file format.


**Returns:** 0 on success or a negative value otherwise.

---

### `xmlSecMSCryptoAppGetDefaultPwdCallback`

```c
void * xmlSecMSCryptoAppGetDefaultPwdCallback(void);
```

*Source:* [include/xmlsec/mscrypto/app.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscrypto/app.h#L124)

Gets default password callback.

**Returns:** default password callback.

---
