x509cset.c revision 221304ee937bc0910948a8be1320cb8cc4eb6d36
1c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* crypto/x509/x509cset.c */
2c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)/* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * project 2001.
4c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
59ab5563a3196760eb381d102cbb2bc0f7abc6a50Ben Murdoch/* ====================================================================
6c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Copyright (c) 2001 The OpenSSL Project.  All rights reserved.
7c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
8c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * Redistribution and use in source and binary forms, with or without
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * modification, are permitted provided that the following conditions
107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch * are met:
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
12c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 1. Redistributions of source code must retain the above copyright
13c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer.
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *
15c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 2. Redistributions in binary form must reproduce the above copyright
16c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    notice, this list of conditions and the following disclaimer in
17c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    the documentation and/or other materials provided with the
18c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    distribution.
19c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
20c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 3. All advertising materials mentioning features or use of this
215d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *    software must display the following acknowledgment:
225d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *    "This product includes software developed by the OpenSSL Project
23c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)"
24c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
25c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to
26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *    endorse or promote products derived from this software without
27c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    prior written permission. For written permission, please contact
285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) *    licensing@OpenSSL.org.
29c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
30c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 5. Products derived from this software may not be called "OpenSSL"
31c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    nor may "OpenSSL" appear in their names without prior written
32c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    permission of the OpenSSL Project.
33c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
34c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * 6. Redistributions of any form whatsoever must retain the following
35c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    acknowledgment:
36c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    "This product includes software developed by the OpenSSL Project
37c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *    for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)"
38c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY
40c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
41c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
42c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR
43c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
46c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
47c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
48c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
50c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * OF THE POSSIBILITY OF SUCH DAMAGE.
51c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * ====================================================================
52c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
53c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * This product includes cryptographic software written by Eric Young
54c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) * (eay@cryptsoft.com).  This product includes software written by Tim
55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) * Hudson (tjh@cryptsoft.com).
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) *
57c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles) */
58c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
59c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <stdio.h>
60c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "cryptlib.h"
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <openssl/asn1.h>
62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <openssl/objects.h>
63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include <openssl/evp.h>
64c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include <openssl/x509.h>
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
66c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int X509_CRL_set_version(X509_CRL *x, long version)
67c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	{
68c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if (x == NULL) return(0);
695d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	if (x->crl->version == NULL)
705d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)		{
71c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		if ((x->crl->version=M_ASN1_INTEGER_new()) == NULL)
72c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)			return(0);
73c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		}
74c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	return(ASN1_INTEGER_set(x->crl->version,version));
75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)	}
76c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
77c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name)
78c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	{
79c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if ((x == NULL) || (x->crl == NULL)) return(0);
80c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	return(X509_NAME_set(&x->crl->issuer,name));
81c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	}
82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm)
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	{
86c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	ASN1_TIME *in;
87c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
885d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	if (x == NULL) return(0);
895d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	in=x->crl->lastUpdate;
905d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	if (in != tm)
91c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		{
92c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		in=M_ASN1_TIME_dup(tm);
93c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		if (in != NULL)
94c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)			{
954e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)			M_ASN1_TIME_free(x->crl->lastUpdate);
964e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)			x->crl->lastUpdate=in;
974e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)			}
984e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)		}
994e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)	return(in != NULL);
1004e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)	}
101c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
102c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm)
103c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	{
104c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	ASN1_TIME *in;
1057dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)	if (x == NULL) return(0);
1077dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	in=x->crl->nextUpdate;
1087dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	if (in != tm)
1097dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		{
1107dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		in=M_ASN1_TIME_dup(tm);
1117dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		if (in != NULL)
112a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch			{
113a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch			M_ASN1_TIME_free(x->crl->nextUpdate);
114a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch			x->crl->nextUpdate=in;
115a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch			}
116a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch		}
117a3f7b4e666c476898878fa745f637129375cd889Ben Murdoch	return(in != NULL);
1187dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	}
1197dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
120d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)int X509_CRL_sort(X509_CRL *c)
121d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	{
122d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	int i;
123d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	X509_REVOKED *r;
124d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)	/* sort the data so it will be written in serial
1257dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	 * number order */
1267dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	sk_X509_REVOKED_sort(c->crl->revoked);
1277dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	for (i=0; i<sk_X509_REVOKED_num(c->crl->revoked); i++)
1287dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		{
1297dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		r=sk_X509_REVOKED_value(c->crl->revoked,i);
1307dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		r->sequence=i;
1317dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		}
1327dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	c->crl->enc.modified = 1;
1337dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	return 1;
1347dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	}
1357dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1367dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdochint X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm)
1377dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	{
1387dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	ASN1_TIME *in;
1397dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch
1407dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	if (x == NULL) return(0);
1417dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	in=x->revocationDate;
1427dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch	if (in != tm)
1437dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		{
1447dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		in=M_ASN1_TIME_dup(tm);
1457dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch		if (in != NULL)
1467dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch			{
1477dbb3d5cf0c15f500944d211057644d6a2f37371Ben Murdoch			M_ASN1_TIME_free(x->revocationDate);
148868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)			x->revocationDate=in;
149868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)			}
150868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)		}
151868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)	return(in != NULL);
152c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	}
153c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
154c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial)
155c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	{
156c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	ASN1_INTEGER *in;
157c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
158c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if (x == NULL) return(0);
159c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	in=x->serialNumber;
160c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	if (in != serial)
161c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		{
162c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		in=M_ASN1_INTEGER_dup(serial);
163c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		if (in != NULL)
164c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)			{
165c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)			M_ASN1_INTEGER_free(x->serialNumber);
166c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)			x->serialNumber=in;
167c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)			}
168c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)		}
169c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	return(in != NULL);
170c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)	}
171c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)