| /* | |
| * X.509 certificate related helpers | |
| * | |
| * Copyright (c) 2024 Dorjoy Chowdhury <dorjoychy111@gmail.com> | |
| * | |
| * This work is licensed under the terms of the GNU GPL, version 2 or | |
| * (at your option) any later version. See the COPYING file in the | |
| * top-level directory. | |
| */ | |
| #ifndef QCRYPTO_X509_UTILS_H | |
| #define QCRYPTO_X509_UTILS_H | |
| #include "crypto/hash.h" | |
| int qcrypto_get_x509_cert_fingerprint(uint8_t *cert, size_t size, | |
| QCryptoHashAlgo hash, | |
| uint8_t *result, | |
| size_t *resultlen, | |
| Error **errp); | |
| /** | |
| * qcrypto_x509_convert_cert_der | |
| * @cert: pointer to the raw certificate data in PEM format | |
| * @size: size of the certificate | |
| * @result: output location for the allocated buffer for the certificate | |
| * in DER format | |
| * (the function allocates memory which must be freed by the caller) | |
| * @resultlen: pointer to the size of the buffer (will be updated with the | |
| * actual size of the DER-encoded certificate) | |
| * @errp: error pointer | |
| * | |
| * Convert the given @cert from PEM to DER format. | |
| * | |
| * Returns: 0 on success, | |
| * -1 on error. | |
| */ | |
| int qcrypto_x509_convert_cert_der(uint8_t *cert, size_t size, | |
| uint8_t **result, | |
| size_t *resultlen, | |
| Error **errp); | |
| /** | |
| * qcrypto_x509_check_cert_times | |
| * @cert: pointer to the raw certificate data | |
| * @size: size of the certificate | |
| * @errp: error pointer | |
| * | |
| * Check whether the activation and expiration times of @cert | |
| * are valid at the current time. | |
| * | |
| * Returns: 0 if the certificate times are valid, | |
| * -1 on error. | |
| */ | |
| int qcrypto_x509_check_cert_times(uint8_t *cert, size_t size, Error **errp); | |
| /** | |
| * qcrypto_x509_get_cert_key_id | |
| * @cert: pointer to the raw certificate data | |
| * @size: size of the certificate | |
| * @hash_alg: the hash algorithm flag | |
| * @result: output location for the allocated buffer for key ID | |
| * (the function allocates memory which must be freed by the caller) | |
| * @resultlen: pointer to the size of the buffer | |
| * (will be updated with the actual size of key id) | |
| * @errp: error pointer | |
| * | |
| * Retrieve the key ID from the @cert based on the specified @hash_alg. | |
| * | |
| * Returns: 0 if key ID was successfully stored in @result, | |
| * -1 on error. | |
| */ | |
| int qcrypto_x509_get_cert_key_id(uint8_t *cert, size_t size, | |
| QCryptoHashAlgo hash_alg, | |
| uint8_t **result, | |
| size_t *resultlen, | |
| Error **errp); | |
| /** | |
| * qcrypto_x509_check_ecc_curve_p521 | |
| * @cert: pointer to the raw certificate data | |
| * @size: size of the certificate | |
| * @errp: error pointer | |
| * | |
| * Determine whether the ECC public key in the given certificate uses the P-521 | |
| * curve. | |
| * | |
| * Returns: 0 if ECC public key does not use P521 curve. | |
| * 1 if ECC public key uses P521 curve. | |
| * -1 on error. | |
| */ | |
| int qcrypto_x509_check_ecc_curve_p521(uint8_t *cert, size_t size, Error **errp); | |
| /** | |
| * qcrypto_pkcs7_convert_sig_pem | |
| * @sig: pointer to the PKCS#7 signature in DER format | |
| * @sig_size: size of the signature | |
| * @result: output location for the allocated buffer for the signature in | |
| * PEM format | |
| * (the function allocates memory which must be freed by the caller) | |
| * @resultlen: pointer to the size of the buffer | |
| * (will be updated with the actual size of the PEM-encoded | |
| * signature) | |
| * @errp: error pointer | |
| * | |
| * Convert given PKCS#7 @sig from DER to PEM format. | |
| * | |
| * Returns: 0 if PEM-encoded signature was successfully stored in @result, | |
| * -1 on error. | |
| */ | |
| int qcrypto_pkcs7_convert_sig_pem(uint8_t *sig, size_t sig_size, | |
| uint8_t **result, | |
| size_t *resultlen, | |
| Error **errp); | |
| /** | |
| * qcrypto_x509_verify_sig | |
| * @cert: pointer to the raw certificate data | |
| * @cert_size: size of the certificate | |
| * @comp: pointer to the component to be verified | |
| * @comp_size: size of the component | |
| * @sig: pointer to the signature | |
| * @sig_size: size of the signature | |
| * @errp: error pointer | |
| * | |
| * Verify the provided @comp against the @sig and @cert. | |
| * | |
| * Returns: 0 on success, | |
| * -1 on error. | |
| */ | |
| int qcrypto_x509_verify_sig(uint8_t *cert, size_t cert_size, | |
| uint8_t *comp, size_t comp_size, | |
| uint8_t *sig, size_t sig_size, Error **errp); | |
| #endif |