1 /* Written by Dr Stephen N Henson (steve (at) openssl.org) for the OpenSSL 2 * project 2001. */ 3 /* ==================================================================== 4 * Copyright (c) 2001 The OpenSSL Project. All rights reserved. 5 * 6 * Redistribution and use in source and binary forms, with or without 7 * modification, are permitted provided that the following conditions 8 * are met: 9 * 10 * 1. Redistributions of source code must retain the above copyright 11 * notice, this list of conditions and the following disclaimer. 12 * 13 * 2. Redistributions in binary form must reproduce the above copyright 14 * notice, this list of conditions and the following disclaimer in 15 * the documentation and/or other materials provided with the 16 * distribution. 17 * 18 * 3. All advertising materials mentioning features or use of this 19 * software must display the following acknowledgment: 20 * "This product includes software developed by the OpenSSL Project 21 * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 22 * 23 * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 24 * endorse or promote products derived from this software without 25 * prior written permission. For written permission, please contact 26 * licensing (at) OpenSSL.org. 27 * 28 * 5. Products derived from this software may not be called "OpenSSL" 29 * nor may "OpenSSL" appear in their names without prior written 30 * permission of the OpenSSL Project. 31 * 32 * 6. Redistributions of any form whatsoever must retain the following 33 * acknowledgment: 34 * "This product includes software developed by the OpenSSL Project 35 * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 36 * 37 * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 38 * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 39 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 40 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 41 * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 42 * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 43 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 44 * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 45 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 46 * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 47 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 48 * OF THE POSSIBILITY OF SUCH DAMAGE. 49 * ==================================================================== 50 * 51 * This product includes cryptographic software written by Eric Young 52 * (eay (at) cryptsoft.com). This product includes software written by Tim 53 * Hudson (tjh (at) cryptsoft.com). */ 54 55 #include <openssl/asn1.h> 56 #include <openssl/evp.h> 57 #include <openssl/obj.h> 58 #include <openssl/x509.h> 59 60 #include "../internal.h" 61 62 63 int X509_CRL_set_version(X509_CRL *x, long version) 64 { 65 if (x == NULL) return(0); 66 if (x->crl->version == NULL) 67 { 68 if ((x->crl->version=M_ASN1_INTEGER_new()) == NULL) 69 return(0); 70 } 71 return(ASN1_INTEGER_set(x->crl->version,version)); 72 } 73 74 int X509_CRL_set_issuer_name(X509_CRL *x, X509_NAME *name) 75 { 76 if ((x == NULL) || (x->crl == NULL)) return(0); 77 return(X509_NAME_set(&x->crl->issuer,name)); 78 } 79 80 81 int X509_CRL_set_lastUpdate(X509_CRL *x, const ASN1_TIME *tm) 82 { 83 ASN1_TIME *in; 84 85 if (x == NULL) return(0); 86 in=x->crl->lastUpdate; 87 if (in != tm) 88 { 89 in=M_ASN1_TIME_dup(tm); 90 if (in != NULL) 91 { 92 M_ASN1_TIME_free(x->crl->lastUpdate); 93 x->crl->lastUpdate=in; 94 } 95 } 96 return(in != NULL); 97 } 98 99 int X509_CRL_set_nextUpdate(X509_CRL *x, const ASN1_TIME *tm) 100 { 101 ASN1_TIME *in; 102 103 if (x == NULL) return(0); 104 in=x->crl->nextUpdate; 105 if (in != tm) 106 { 107 in=M_ASN1_TIME_dup(tm); 108 if (in != NULL) 109 { 110 M_ASN1_TIME_free(x->crl->nextUpdate); 111 x->crl->nextUpdate=in; 112 } 113 } 114 return(in != NULL); 115 } 116 117 int X509_CRL_sort(X509_CRL *c) 118 { 119 size_t i; 120 X509_REVOKED *r; 121 /* sort the data so it will be written in serial 122 * number order */ 123 sk_X509_REVOKED_sort(c->crl->revoked); 124 for (i=0; i<sk_X509_REVOKED_num(c->crl->revoked); i++) 125 { 126 r=sk_X509_REVOKED_value(c->crl->revoked,i); 127 r->sequence=i; 128 } 129 c->crl->enc.modified = 1; 130 return 1; 131 } 132 133 void X509_CRL_up_ref(X509_CRL *crl) 134 { 135 CRYPTO_refcount_inc(&crl->references); 136 } 137 138 int X509_REVOKED_set_revocationDate(X509_REVOKED *x, ASN1_TIME *tm) 139 { 140 ASN1_TIME *in; 141 142 if (x == NULL) return(0); 143 in=x->revocationDate; 144 if (in != tm) 145 { 146 in=M_ASN1_TIME_dup(tm); 147 if (in != NULL) 148 { 149 M_ASN1_TIME_free(x->revocationDate); 150 x->revocationDate=in; 151 } 152 } 153 return(in != NULL); 154 } 155 156 int X509_REVOKED_set_serialNumber(X509_REVOKED *x, ASN1_INTEGER *serial) 157 { 158 ASN1_INTEGER *in; 159 160 if (x == NULL) return(0); 161 in=x->serialNumber; 162 if (in != serial) 163 { 164 in=M_ASN1_INTEGER_dup(serial); 165 if (in != NULL) 166 { 167 M_ASN1_INTEGER_free(x->serialNumber); 168 x->serialNumber=in; 169 } 170 } 171 return(in != NULL); 172 } 173