blob: b78afdcd2548c272ee426efcfa3981472d22bfbe [file] [log] [blame]
/**
* 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(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);
}