# MsCng X.509 Support

**API Group:** `xmlsec_mscng_x509`

X.509 certificate handling for the MsCng back-end.

X509 certificates verification support functions for MSCng.

X509 certificates implementation for MSCng. X509 certificates implementation for MSCng.

## Macros

### `xmlSecMSCngKeyDataX509Id`

*Defined as:* `xmlSecMSCngKeyDataX509GetKlass()`

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L28)

The MSCng X509 data klass.

---

### `xmlSecMSCngKeyDataRawX509CertId`

*Defined as:* `xmlSecMSCngKeyDataRawX509CertGetKlass()`

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L35)

The MSCng raw X509 certificate klass.

---

### `xmlSecMSCngX509StoreId`

*Defined as:* `xmlSecMSCngX509StoreGetKlass()`

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L42)

The MSCng X509 store klass.

---

## Functions

### `xmlSecMSCngKeyDataX509GetKlass`

```c
xmlSecKeyDataId xmlSecMSCngKeyDataX509GetKlass(void);
```

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

The MSCng X509 key data klass.

**Returns:** the X509 data klass.

---

### `xmlSecMSCngKeyDataRawX509CertGetKlass`

```c
xmlSecKeyDataId xmlSecMSCngKeyDataRawX509CertGetKlass(void);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L37)

The raw X509 certificates key data klass.

**Returns:** raw X509 certificates key data klass.

---

### `xmlSecMSCngX509StoreGetKlass`

```c
xmlSecKeyDataStoreId xmlSecMSCngX509StoreGetKlass(void);
```

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

The MSCng X509 certificates key data store klass.

**Returns:** pointer to MSCng X509 certificates key data store klass.

---

### `xmlSecMSCngKeyDataX509GetKeyCert`

```c
void * xmlSecMSCngKeyDataX509GetKeyCert(xmlSecKeyDataPtr data);
```

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

Gets the certificate from which the key was extracted.

**Parameters:**

- `data` — the pointer to X509 key data.


**Returns:** the key's certificate or NULL if key data was not used for key extraction or an error occurs.

---

### `xmlSecMSCngKeyDataX509AdoptKeyCert`

```c
int xmlSecMSCngKeyDataX509AdoptKeyCert(xmlSecKeyDataPtr data, void *cert);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L47)

Adds certificate to the X509 key data and sets the it as the key's.

**Parameters:**

- `data` — the pointer to key data.
- `cert` — the pointer to certificates.
certificate in `data`. On success, the `data` owns the cert.

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

---

### `xmlSecMSCngKeyDataX509AdoptCert`

```c
int xmlSecMSCngKeyDataX509AdoptCert(xmlSecKeyDataPtr data, void *cert);
```

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

Adds a certificate to `data`.

Adds `cert` to `data` as a certificate. On success, `data` owns the `cert`. 

**Parameters:**

- `data` — the pointer to key data.
- `cert` — the pointer to certificates.


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

---

### `xmlSecMSCngKeyDataX509AdoptCrl`

```c
int xmlSecMSCngKeyDataX509AdoptCrl(xmlSecKeyDataPtr data, PCCRL_CONTEXT crl);
```

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

Adds CRL to the X509 key data.

**Parameters:**

- `data` — the pointer to X509 key data.
- `crl` — the pointer to MSCng X509 CRL.


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

---

### `xmlSecMSCngX509StoreAdoptCert`

```c
int xmlSecMSCngX509StoreAdoptCert(xmlSecKeyDataStorePtr store, void *cert, xmlSecKeyDataType type);
```

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

Adds trusted or untrusted certificate to the store.

Adds trusted (root) or untrusted certificate to the store. 

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `pCert` — the pointer to PCCERT_CONTEXT X509 certificate.
- `type` — the certificate type (trusted/untrusted).


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

---

### `xmlSecMSCngX509StoreAdoptCrl`

```c
int xmlSecMSCngX509StoreAdoptCrl(xmlSecKeyDataStorePtr store, PCCRL_CONTEXT crl);
```

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

Adds CRL to the store for revocation checking.

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `crl` — the pointer to PCCRL_CONTEXT X509 CRL.


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

---

### `xmlSecMSCngX509StoreVerifyCrl`

```c
int xmlSecMSCngX509StoreVerifyCrl(xmlSecKeyDataStorePtr store, PCCRL_CONTEXT crl, xmlSecKeyInfoCtx *keyInfoCtx);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L66)

Verifies a CRL against trusted certificates in the store.

Verifies `crl` against the trusted certificates in `store`. 

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `crl` — the pointer to CRL.
- `keyInfoCtx` — the pointer to key info context.


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

---

### `xmlSecMSCngX509StoreAdoptKeyStore`

```c
int xmlSecMSCngX509StoreAdoptKeyStore(xmlSecKeyDataStorePtr store, void *keyStore);
```

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

Adds `keyStore` to the list of key stores.

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `keyStore` — the pointer to keys store.


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

---

### `xmlSecMSCngX509StoreAdoptTrustedStore`

```c
int xmlSecMSCngX509StoreAdoptTrustedStore(xmlSecKeyDataStorePtr store, void *trustedStore);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L71)

Adds `trustedStore` to the trusted certs list.

Adds `trustedStore` to the list of trusted certs stores. 

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `trustedStore` — the pointer to certs store.


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

---

### `xmlSecMSCngX509StoreAdoptUntrustedStore`

```c
int xmlSecMSCngX509StoreAdoptUntrustedStore(xmlSecKeyDataStorePtr store, void *untrustedStore);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L73)

Adds `trustedStore` to the untrusted certs list.

Adds `trustedStore` to the list of untrusted certs stores. 

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `untrustedStore` — the pointer to certs store.


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

---

### `xmlSecMSCngX509StoreVerify`

```c
void * xmlSecMSCngX509StoreVerify(xmlSecKeyDataStorePtr store, void *certs, xmlSecKeyInfoCtx *keyInfoCtx);
```

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

Verifies `certs` list.

**Parameters:**

- `store` — the pointer to X509 certificate context store klass.
- `certs` — the untrusted certificates stack.
- `keyInfoCtx` — the pointer to <dsig:KeyInfo/> element processing context.


**Returns:** pointer to the first verified certificate from `certs`.

---

### `xmlSecMSCngX509StoreFindCert`

```c
void * xmlSecMSCngX509StoreFindCert(xmlSecKeyDataStorePtr store, xmlChar *subjectName, xmlChar *issuerName, xmlChar *issuerSerial, xmlChar *ski, xmlSecKeyInfoCtx *keyInfoCtx);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L85)

Searches `store` for a certificate that matches given criteria.

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `subjectName` — the desired certificate name.
- `issuerName` — the desired certificate issuer name.
- `issuerSerial` — the desired certificate issuer serial number.
- `ski` — the desired certificate SKI.
- `keyInfoCtx` — the pointer to <dsig:KeyInfo/> element processing context.


**Returns:** pointer to found certificate or NULL if certificate is not found or an error occurs.

---

### `xmlSecMSCngX509StoreFindCert_ex`

```c
void * xmlSecMSCngX509StoreFindCert_ex(xmlSecKeyDataStorePtr store, xmlChar *subjectName, xmlChar *issuerName, xmlChar *issuerSerial, xmlSecByte *ski, xmlSecSize skiSize, xmlSecKeyInfoCtx *keyInfoCtx);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L91)

Searches `store` for a certificate that matches given criteria.

**Parameters:**

- `store` — the pointer to X509 key data store klass.
- `subjectName` — the desired certificate name.
- `issuerName` — the desired certificate issuer name.
- `issuerSerial` — the desired certificate issuer serial number.
- `ski` — the desired certificate SKI.
- `skiSize` — the desired certificate SKI size.
- `keyInfoCtx` — the pointer to <dsig:KeyInfo/> element processing context.


**Returns:** pointer to found certificate or NULL if certificate is not found or an error occurs.

---

### `xmlSecMSCngX509FindCertBySubject`

```c
void * xmlSecMSCngX509FindCertBySubject(void *store, char *wcSubject, unsigned\ long dwCertEncodingType);
```

*Source:* [include/xmlsec/mscng/x509.h](https://github.com/lsh123/xmlsec/blob/1.3.11/include/xmlsec/mscng/x509.h#L98)

Searches for a cert by `subject` in the store.

Searches for a cert with given `subject` in the `store` 

**Parameters:**

- `store` — the pointer to certs store
- `wcSubject` — the cert subject (Unicode)
- `dwCertEncodingType` — the cert encoding type


**Returns:** cert handle on success or NULL otherwise

---
