xsec/enc/XSECCryptoX509.cpp (43 lines of code) (raw):

/** * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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$ * */ #include <xsec/framework/XSECDefs.hpp> #include <xsec/enc/XSECCryptoX509.hpp> #include <xsec/framework/XSECError.hpp> #include <xsec/enc/XSECCryptoException.hpp> #include <string.h> 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(b, "-----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); }