/* * Copyright 2002-2005 The Apache Software Foundation. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* * XSEC * * XSECCryptoX509:= A base class for handling X509 (V3) certificates * * $Id: XSECCryptoX509.cpp 389736 2006-03-29 10:00:42Z blautenb $ * */ #include #include #include #include #include void XSECCryptoX509::loadX509PEM(const char * buf, unsigned int len) { const char * b; char * b1 = NULL; if (len == 0) b = buf; else { XSECnew(b1, char[len+1]); memcpy(b1, buf, len); b1[len] = '\0'; b = b1; } const char *p = strstr(buf, "-----BEGIN CERTIFICATE-----"); if (p == NULL) { if (b1 != NULL) delete[] b1; throw XSECCryptoException(XSECCryptoException::X509Error, "X509::loadX509PEM - Cannot find start of PEM certificate"); } p += strlen("-----BEGIN CERTIFICATE-----"); while (*p == '\n' || *p == '\r' || *p == '-') p++; safeBuffer output; int i = 0; while (*p != '\0' && *p != '-') { output[i++] = *p; ++p; } if (strstr(p, "-----END CERTIFICATE-----") != p) { if (b1 != NULL) delete[] b1; throw XSECCryptoException(XSECCryptoException::X509Error, "X509::loadX509PEM - Cannot find end of PEM certificate"); } if (b1 != NULL) delete[] b1; output[i] = '\0'; this->loadX509Base64Bin(output.rawCharBuffer(), i); }