blob: 680dfb4c409fd1a181f1a80fc02a3585ffcf2fab [file] [log] [blame]
Paul Bakker33b43f12013-08-20 11:48:36 +02001/* BEGIN_HEADER */
Paul Bakker6d620502012-02-16 14:09:13 +00002#include <polarssl/x509write.h>
3#include <polarssl/x509.h>
4#include <polarssl/pem.h>
Paul Bakkerc70b9822013-04-07 22:00:46 +02005#include <polarssl/oid.h>
Paul Bakker33b43f12013-08-20 11:48:36 +02006/* END_HEADER */
Paul Bakker6d620502012-02-16 14:09:13 +00007
Paul Bakker33b43f12013-08-20 11:48:36 +02008/* BEGIN_DEPENDENCIES
9 * depends_on:POLARSSL_X509_WRITE_C:POLARSSL_BIGNUM_C
10 * END_DEPENDENCIES
11 */
Paul Bakker6d620502012-02-16 14:09:13 +000012
Paul Bakker33b43f12013-08-20 11:48:36 +020013/* BEGIN_CASE */
14void x509_cert_req_check( char *key_file, int md_type,
15 char *cert_req_check_file )
Paul Bakker6d620502012-02-16 14:09:13 +000016{
17 rsa_context rsa;
18 pem_context pem;
19 x509_req_name req_name, *cur;
20 unsigned char *c;
21 unsigned char buf[4000];
22 unsigned char check_buf[4000];
23 int ret;
24 size_t olen = 2000;
25 FILE *f;
26
27 cur = &req_name;
28
29 memset( cur, 0, sizeof(x509_req_name) );
Paul Bakkerc70b9822013-04-07 22:00:46 +020030 strcpy( cur->oid, OID_AT_CN );
Paul Bakker6d620502012-02-16 14:09:13 +000031 strcpy( cur->name, "PolarSSL Server 1" );
32 cur->next = malloc( sizeof(x509_req_name) );
33 cur = cur->next;
34
35 memset( cur, 0, sizeof(x509_req_name) );
Paul Bakkerc70b9822013-04-07 22:00:46 +020036 strcpy( cur->oid, OID_AT_ORGANIZATION );
Paul Bakker6d620502012-02-16 14:09:13 +000037 strcpy( cur->name, "PolarSSL" );
38 cur->next = malloc( sizeof(x509_req_name) );
39 cur = cur->next;
40
41 memset( cur, 0, sizeof(x509_req_name) );
Paul Bakkerc70b9822013-04-07 22:00:46 +020042 strcpy( cur->oid, OID_AT_COUNTRY );
Paul Bakker6d620502012-02-16 14:09:13 +000043 strcpy( cur->name, "NL" );
44
45 memset( &rsa, 0, sizeof(rsa_context) );
Paul Bakker33b43f12013-08-20 11:48:36 +020046 ret = x509parse_keyfile_rsa( &rsa, key_file, NULL );
Paul Bakker6d620502012-02-16 14:09:13 +000047 TEST_ASSERT( ret == 0 );
48 if( ret != 0 )
Paul Bakker33b43f12013-08-20 11:48:36 +020049 return;
Paul Bakker6d620502012-02-16 14:09:13 +000050
Paul Bakker33b43f12013-08-20 11:48:36 +020051 ret = x509_write_cert_req( buf, 4000, &rsa, &req_name, md_type );
Paul Bakker6d620502012-02-16 14:09:13 +000052 TEST_ASSERT( ret >= 0 );
53
54 c = buf + 3999 - ret;
55
Paul Bakker33b43f12013-08-20 11:48:36 +020056 f = fopen( cert_req_check_file, "r" );
Paul Bakker6d620502012-02-16 14:09:13 +000057 TEST_ASSERT( f != NULL );
58 fread( check_buf, 1, 4000, f );
59 fclose( f );
60
61 pem_init( &pem );
62 pem_read_buffer( &pem, "-----BEGIN CERTIFICATE REQUEST-----", "-----END CERTIFICATE REQUEST-----", check_buf, NULL, 0, &olen );
63
64 TEST_ASSERT( memcmp( c, pem.buf, pem.buflen ) == 0 );
65 TEST_ASSERT( pem.buflen == (size_t) ret );
Paul Bakker58ef6ec2013-01-03 11:33:48 +010066
67 while( ( cur = req_name.next ) != NULL )
68 {
69 req_name.next = cur->next;
70 free( cur );
71 }
72
73 rsa_free( &rsa );
74 pem_free( &pem );
Paul Bakker6d620502012-02-16 14:09:13 +000075}
Paul Bakker33b43f12013-08-20 11:48:36 +020076/* END_CASE */