xca/lib/pki_temp.cpp
chris2511 935e9c9a46 Minwindow-size reduced,
error with  servercerts removed
2003-02-23 22:08:28 +00:00

294 lines
6.7 KiB
C++

/*
* Copyright (C) 2001 Christian Hohnstaedt.
*
* All rights reserved.
*
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met:
*
* - Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* - Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation
* and/or other materials provided with the distribution.
* - Neither the name of the author nor the names of its contributors may be
* used to endorse or promote products derived from this software without
* specific prior written permission.
*
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
* THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
* OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
* WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
* OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
*
* This program links to software with different licenses from:
*
* http://www.openssl.org which includes cryptographic software
* written by Eric Young (eay@cryptsoft.com)"
*
* http://www.sleepycat.com
*
* http://www.trolltech.com
*
*
*
* http://www.hohnstaedt.de/xca
* email: christian@hohnstaedt.de
*
* $Id$
*
*/
#include "pki_temp.h"
pki_temp::pki_temp(const pki_temp *pk)
:pki_base(pk->desc)
{
version=pk->version;
type=pk->type;
C=pk->C;
P=pk->P;
L=pk->L;
O=pk->O;
OU=pk->OU;
CN=pk->CN;
EMAIL=pk->EMAIL;
subAltName=pk->subAltName;
issAltName=pk->issAltName;
crlDist=pk->crlDist;
nsCertType=pk->nsCertType;
nsComment=pk->nsComment;
nsBaseUrl=pk->nsBaseUrl;
nsRevocationUrl=pk->nsRevocationUrl;
nsCARevocationUrl=pk->nsCARevocationUrl;
nsRenewalUrl=pk->nsRenewalUrl;
nsCaPolicyUrl=pk->nsCaPolicyUrl;
nsSslServerName=pk->nsSslServerName;
ca=pk->ca;
bcCrit=pk->bcCrit;
keyUseCrit=pk->keyUseCrit;
eKeyUseCrit=pk->eKeyUseCrit;
subKey=pk->subKey;
authKey=pk->authKey;
subAltCp=pk->subAltCp;
issAltCp=pk->issAltCp;
pathLen=pk->pathLen;
validN=pk->validN;
validM=pk->validM;
keyUse=pk->keyUse;
eKeyUse=pk->eKeyUse;
}
pki_temp::pki_temp(const string d, int atype)
:pki_base(d)
{
version=1;
type=atype;
C="";
P="";
L="";
O="";
OU="";
CN="";
EMAIL="";
subAltName="";
issAltName="";
crlDist="";
nsCertType=0;
nsComment="xca certificate";
nsBaseUrl="";
nsRevocationUrl="";
nsCARevocationUrl="";
nsRenewalUrl="";
nsCaPolicyUrl="";
nsSslServerName="";
ca=false;
bcCrit=false;
keyUseCrit=false;
eKeyUseCrit=false;
subKey=false;
authKey=false;
subAltCp=false;
issAltCp=false;
pathLen=0;
validN=365;
validM=0;
keyUse=0;
eKeyUse=0;
if (type==tCA) {
ca=true;
bcCrit=true;
subKey=true;
authKey=true;
issAltCp=false;
nsCertType=112;
keyUse=96;
}
if (type==tCLIENT) {
ca=false;
bcCrit=true;
subKey=true;
authKey=true;
issAltCp=true;
subAltCp=true;
nsCertType=5;
keyUse=13;
}
if (type==tSERVER) {
ca=false;
bcCrit=true;
subKey=true;
authKey=true;
issAltCp=true;
subAltCp=true;
nsCertType=2;
keyUse=7;
}
}
void pki_temp::fromData(unsigned char *p, int size )
{
CERR("Temp fromData");
unsigned char *p1 = p;
version=intFromData(&p1);
type=intFromData(&p1);
ca=boolFromData(&p1);
bcCrit=boolFromData(&p1);
keyUseCrit=boolFromData(&p1);
eKeyUseCrit=boolFromData(&p1);
subKey=boolFromData(&p1);
authKey=boolFromData(&p1);
subAltCp=boolFromData(&p1);
issAltCp=boolFromData(&p1);
pathLen=intFromData(&p1);
validN=intFromData(&p1);
validM=intFromData(&p1);
keyUse=intFromData(&p1);
eKeyUse=intFromData(&p1);
nsCertType=intFromData(&p1);
C=stringFromData(&p1);
P=stringFromData(&p1);
L=stringFromData(&p1);
O=stringFromData(&p1);
OU=stringFromData(&p1);
CN=stringFromData(&p1);
EMAIL=stringFromData(&p1);
subAltName=stringFromData(&p1);
issAltName=stringFromData(&p1);
crlDist=stringFromData(&p1);
nsComment=stringFromData(&p1);
nsBaseUrl=stringFromData(&p1);
nsRevocationUrl=stringFromData(&p1);
nsCARevocationUrl=stringFromData(&p1);
nsRenewalUrl=stringFromData(&p1);
nsCaPolicyUrl=stringFromData(&p1);
nsSslServerName=stringFromData(&p1);
//next version:
//if (version == 2) { ..... }
if (p1-p != size) {
CERR( "AAAAarrrrgghhhhh wrong tempsize..." << (p1-p) << " - " <<size );
openssl_error("Wrong Size");
}
}
unsigned char *pki_temp::toData(int *size)
{
CERR("temp toData " << getDescription() );
unsigned char *p, *p1;
*size = dataSize();
p = (unsigned char*)OPENSSL_malloc(*size);
p1 = p;
intToData(&p1, version);
intToData(&p1, type);
boolToData(&p1, ca);
boolToData(&p1, bcCrit);
boolToData(&p1, keyUseCrit);
boolToData(&p1, eKeyUseCrit);
boolToData(&p1, subKey);
boolToData(&p1, authKey);
boolToData(&p1, subAltCp);
boolToData(&p1, issAltCp);
intToData(&p1, pathLen);
intToData(&p1, validN);
intToData(&p1, validM);
intToData(&p1, keyUse);
intToData(&p1, eKeyUse);
intToData(&p1, nsCertType);
stringToData(&p1, C);
stringToData(&p1, P);
stringToData(&p1, L);
stringToData(&p1, O);
stringToData(&p1, OU);
stringToData(&p1, CN);
stringToData(&p1, EMAIL);
stringToData(&p1, subAltName);
stringToData(&p1, issAltName);
stringToData(&p1, crlDist);
stringToData(&p1, nsComment);
stringToData(&p1, nsBaseUrl);
stringToData(&p1, nsRevocationUrl);
stringToData(&p1, nsCARevocationUrl);
stringToData(&p1, nsRenewalUrl);
stringToData(&p1, nsCaPolicyUrl);
stringToData(&p1, nsSslServerName);
CERR( "Temp toData end ..."<< (p1-p) << " - "<<*size );
return p;
}
pki_temp::~pki_temp()
{
}
int pki_temp::dataSize()
{
return 8 * sizeof(int) + 8 * sizeof(bool) + (
C.length() +
P.length() +
L.length() +
O.length() +
OU.length() +
CN.length() +
EMAIL.length() +
subAltName.length() +
issAltName.length() +
crlDist.length() +
nsComment.length() +
nsBaseUrl.length() +
nsRevocationUrl.length() +
nsCARevocationUrl.length() +
nsRenewalUrl.length() +
nsCaPolicyUrl.length() +
nsSslServerName.length() +
17 ) * sizeof(char);
}
bool pki_temp::compare(pki_base *ref)
{
// we don't care if templates with identical contents
// are stored in the database ...
return false;
}