1a8e1175bSopenharmony_ci/* 2a8e1175bSopenharmony_ci * Certificate request reading application 3a8e1175bSopenharmony_ci * 4a8e1175bSopenharmony_ci * Copyright The Mbed TLS Contributors 5a8e1175bSopenharmony_ci * SPDX-License-Identifier: Apache-2.0 OR GPL-2.0-or-later 6a8e1175bSopenharmony_ci */ 7a8e1175bSopenharmony_ci 8a8e1175bSopenharmony_ci#include "mbedtls/build_info.h" 9a8e1175bSopenharmony_ci 10a8e1175bSopenharmony_ci#include "mbedtls/platform.h" 11a8e1175bSopenharmony_ci 12a8e1175bSopenharmony_ci#if !defined(MBEDTLS_BIGNUM_C) || !defined(MBEDTLS_RSA_C) || \ 13a8e1175bSopenharmony_ci !defined(MBEDTLS_X509_CSR_PARSE_C) || !defined(MBEDTLS_FS_IO) || \ 14a8e1175bSopenharmony_ci defined(MBEDTLS_X509_REMOVE_INFO) 15a8e1175bSopenharmony_ciint main(void) 16a8e1175bSopenharmony_ci{ 17a8e1175bSopenharmony_ci mbedtls_printf("MBEDTLS_BIGNUM_C and/or MBEDTLS_RSA_C and/or " 18a8e1175bSopenharmony_ci "MBEDTLS_X509_CSR_PARSE_C and/or MBEDTLS_FS_IO not defined and/or " 19a8e1175bSopenharmony_ci "MBEDTLS_X509_REMOVE_INFO defined.\n"); 20a8e1175bSopenharmony_ci mbedtls_exit(0); 21a8e1175bSopenharmony_ci} 22a8e1175bSopenharmony_ci#else 23a8e1175bSopenharmony_ci 24a8e1175bSopenharmony_ci#include "mbedtls/x509_csr.h" 25a8e1175bSopenharmony_ci 26a8e1175bSopenharmony_ci#include <stdio.h> 27a8e1175bSopenharmony_ci#include <stdlib.h> 28a8e1175bSopenharmony_ci#include <string.h> 29a8e1175bSopenharmony_ci 30a8e1175bSopenharmony_ci#define DFL_FILENAME "cert.req" 31a8e1175bSopenharmony_ci#define DFL_DEBUG_LEVEL 0 32a8e1175bSopenharmony_ci 33a8e1175bSopenharmony_ci#define USAGE \ 34a8e1175bSopenharmony_ci "\n usage: req_app param=<>...\n" \ 35a8e1175bSopenharmony_ci "\n acceptable parameters:\n" \ 36a8e1175bSopenharmony_ci " filename=%%s default: cert.req\n" \ 37a8e1175bSopenharmony_ci "\n" 38a8e1175bSopenharmony_ci 39a8e1175bSopenharmony_ci 40a8e1175bSopenharmony_ci/* 41a8e1175bSopenharmony_ci * global options 42a8e1175bSopenharmony_ci */ 43a8e1175bSopenharmony_cistruct options { 44a8e1175bSopenharmony_ci const char *filename; /* filename of the certificate request */ 45a8e1175bSopenharmony_ci} opt; 46a8e1175bSopenharmony_ci 47a8e1175bSopenharmony_ciint main(int argc, char *argv[]) 48a8e1175bSopenharmony_ci{ 49a8e1175bSopenharmony_ci int ret = 1; 50a8e1175bSopenharmony_ci int exit_code = MBEDTLS_EXIT_FAILURE; 51a8e1175bSopenharmony_ci unsigned char buf[100000]; 52a8e1175bSopenharmony_ci mbedtls_x509_csr csr; 53a8e1175bSopenharmony_ci int i; 54a8e1175bSopenharmony_ci char *p, *q; 55a8e1175bSopenharmony_ci 56a8e1175bSopenharmony_ci /* 57a8e1175bSopenharmony_ci * Set to sane values 58a8e1175bSopenharmony_ci */ 59a8e1175bSopenharmony_ci mbedtls_x509_csr_init(&csr); 60a8e1175bSopenharmony_ci 61a8e1175bSopenharmony_ci#if defined(MBEDTLS_USE_PSA_CRYPTO) 62a8e1175bSopenharmony_ci psa_status_t status = psa_crypto_init(); 63a8e1175bSopenharmony_ci if (status != PSA_SUCCESS) { 64a8e1175bSopenharmony_ci mbedtls_fprintf(stderr, "Failed to initialize PSA Crypto implementation: %d\n", 65a8e1175bSopenharmony_ci (int) status); 66a8e1175bSopenharmony_ci goto exit; 67a8e1175bSopenharmony_ci } 68a8e1175bSopenharmony_ci#endif /* MBEDTLS_USE_PSA_CRYPTO */ 69a8e1175bSopenharmony_ci 70a8e1175bSopenharmony_ci if (argc < 2) { 71a8e1175bSopenharmony_ciusage: 72a8e1175bSopenharmony_ci mbedtls_printf(USAGE); 73a8e1175bSopenharmony_ci goto exit; 74a8e1175bSopenharmony_ci } 75a8e1175bSopenharmony_ci 76a8e1175bSopenharmony_ci opt.filename = DFL_FILENAME; 77a8e1175bSopenharmony_ci 78a8e1175bSopenharmony_ci for (i = 1; i < argc; i++) { 79a8e1175bSopenharmony_ci p = argv[i]; 80a8e1175bSopenharmony_ci if ((q = strchr(p, '=')) == NULL) { 81a8e1175bSopenharmony_ci goto usage; 82a8e1175bSopenharmony_ci } 83a8e1175bSopenharmony_ci *q++ = '\0'; 84a8e1175bSopenharmony_ci 85a8e1175bSopenharmony_ci if (strcmp(p, "filename") == 0) { 86a8e1175bSopenharmony_ci opt.filename = q; 87a8e1175bSopenharmony_ci } else { 88a8e1175bSopenharmony_ci goto usage; 89a8e1175bSopenharmony_ci } 90a8e1175bSopenharmony_ci } 91a8e1175bSopenharmony_ci 92a8e1175bSopenharmony_ci /* 93a8e1175bSopenharmony_ci * 1.1. Load the CSR 94a8e1175bSopenharmony_ci */ 95a8e1175bSopenharmony_ci mbedtls_printf("\n . Loading the CSR ..."); 96a8e1175bSopenharmony_ci fflush(stdout); 97a8e1175bSopenharmony_ci 98a8e1175bSopenharmony_ci ret = mbedtls_x509_csr_parse_file(&csr, opt.filename); 99a8e1175bSopenharmony_ci 100a8e1175bSopenharmony_ci if (ret != 0) { 101a8e1175bSopenharmony_ci mbedtls_printf(" failed\n ! mbedtls_x509_csr_parse_file returned %d\n\n", ret); 102a8e1175bSopenharmony_ci mbedtls_x509_csr_free(&csr); 103a8e1175bSopenharmony_ci goto exit; 104a8e1175bSopenharmony_ci } 105a8e1175bSopenharmony_ci 106a8e1175bSopenharmony_ci mbedtls_printf(" ok\n"); 107a8e1175bSopenharmony_ci 108a8e1175bSopenharmony_ci /* 109a8e1175bSopenharmony_ci * 1.2 Print the CSR 110a8e1175bSopenharmony_ci */ 111a8e1175bSopenharmony_ci mbedtls_printf(" . CSR information ...\n"); 112a8e1175bSopenharmony_ci ret = mbedtls_x509_csr_info((char *) buf, sizeof(buf) - 1, " ", &csr); 113a8e1175bSopenharmony_ci if (ret == -1) { 114a8e1175bSopenharmony_ci mbedtls_printf(" failed\n ! mbedtls_x509_csr_info returned %d\n\n", ret); 115a8e1175bSopenharmony_ci mbedtls_x509_csr_free(&csr); 116a8e1175bSopenharmony_ci goto exit; 117a8e1175bSopenharmony_ci } 118a8e1175bSopenharmony_ci 119a8e1175bSopenharmony_ci mbedtls_printf("%s\n", buf); 120a8e1175bSopenharmony_ci 121a8e1175bSopenharmony_ci exit_code = MBEDTLS_EXIT_SUCCESS; 122a8e1175bSopenharmony_ci 123a8e1175bSopenharmony_ciexit: 124a8e1175bSopenharmony_ci mbedtls_x509_csr_free(&csr); 125a8e1175bSopenharmony_ci#if defined(MBEDTLS_USE_PSA_CRYPTO) 126a8e1175bSopenharmony_ci mbedtls_psa_crypto_free(); 127a8e1175bSopenharmony_ci#endif /* MBEDTLS_USE_PSA_CRYPTO */ 128a8e1175bSopenharmony_ci 129a8e1175bSopenharmony_ci mbedtls_exit(exit_code); 130a8e1175bSopenharmony_ci} 131a8e1175bSopenharmony_ci#endif /* MBEDTLS_BIGNUM_C && MBEDTLS_RSA_C && MBEDTLS_X509_CSR_PARSE_C && 132a8e1175bSopenharmony_ci MBEDTLS_FS_IO */ 133