<?php
/*
 * Copyright 2008-2010 GuardTime AS
 *
 * This file is part of the GuardTime PHP SDK.
 *
 * 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.
 */

/**
 * This is the master file you should include in your project.
 *
 * @package intro
 */

// util
require_once('util/GTException.php');
require_once('util/GTUtil.php');
require_once('util/GTBaseX.php');
require_once('util/GTBase16.php');
require_once('util/GTBase32.php');
require_once('util/GTBase64.php');
require_once('util/GTBigInteger.php');

// asn1
require_once('asn1/ASN1DERDecodable.php');
require_once('asn1/ASN1DEREncodable.php');
require_once('asn1/ASN1DER.php');
require_once('asn1/ASN1Constants.php');
require_once('asn1/ASN1Object.php');
require_once('asn1/ASN1String.php');
require_once('asn1/ASN1Tag.php');
require_once('asn1/ASN1Boolean.php');
require_once('asn1/ASN1Integer.php');
require_once('asn1/ASN1BitString.php');
require_once('asn1/ASN1OctetString.php');
require_once('asn1/ASN1Null.php');
require_once('asn1/ASN1ObjectId.php');
require_once('asn1/ASN1Sequence.php');
require_once('asn1/ASN1Set.php');
require_once('asn1/ASN1PrintableString.php');
require_once('asn1/ASN1T61String.php');
require_once('asn1/ASN1IA5String.php');
require_once('asn1/ASN1UTCTime.php');
require_once('asn1/ASN1GeneralizedTime.php');
require_once('asn1/ASN1BMPString.php');
require_once('asn1/ASN1UTF8String.php');

// asn1/cmp
// RFC 2510 Certificate Management Protocol
// http://www.ietf.org/rfc/rfc2510.txt
require_once('asn1/cmp/PKIStatusInfo.php');

// asn1/cms
// RFC 2630 Cryptographic Message Syntax
// http://www.ietf.org/rfc/rfc2630.txt
require_once('asn1/cms/CMSAttribute.php');
require_once('asn1/cms/CMSContentInfo.php');
require_once('asn1/cms/CMSSignedData.php');
require_once('asn1/cms/CMSEncapsulatedContentInfo.php');
require_once('asn1/cms/CMSSignerInfo.php');
require_once('asn1/cms/CMSIssuerAndSerialNumber.php');
require_once('asn1/cms/CMSSignerIdentifier.php');

// asn1/gt
// GuardTime defined structures
require_once('asn1/gt/GTTimeSignature.php');
require_once('asn1/gt/GTSignatureInfo.php');
require_once('asn1/gt/GTPublishedData.php');
require_once('asn1/gt/GTCertToken.php');
require_once('asn1/gt/GTCertTokenRequest.php');
require_once('asn1/gt/GTCertTokenResponse.php');
require_once('asn1/gt/GTVerificationRequest.php');

// asn1/x509
require_once('asn1/x509/X509AlgorithmIdentifier.php');
require_once('asn1/x509/X509GeneralName.php');
require_once('asn1/x509/X509Certificate.php');
require_once('asn1/x509/X509Extension.php');

// asn1/tsp
// RFC 3161 Time-Stamp Protocol
// http://www.ietf.org/rfc/rfc3161.txt
require_once('asn1/tsp/TSPAccuracy.php');
require_once('asn1/tsp/TSPMessageImprint.php');
require_once('asn1/tsp/TSPTimeStampReq.php');
require_once('asn1/tsp/TSPTimeStampResp.php');
require_once('asn1/tsp/TSPTSTInfo.php');

// tsp
require_once('tsp/GTHashAlgorithm.php');
require_once('tsp/GTDataHash.php');
require_once('tsp/GTHashEntry.php');
require_once('tsp/GTHashChain.php');
require_once('tsp/GTTimestamp.php');
require_once('tsp/GTPublicationsFile.php');
require_once('tsp/GTVerificationResultBase.php');
require_once('tsp/GTVerificationResult.php');
require_once('tsp/GTVerificationResultHttp.php');
require_once('tsp/GTVerifier.php');

// http
require_once('http/GTHttpClient.php');

if (!extension_loaded('bcmath')) {
    throw new GTException("BCMath extension is required by GuardTime PHP SDK");
}

if (!extension_loaded('curl')) {
    throw new GTException("CURL extension is required by GuardTime PHP SDK");
}

if (version_compare(PHP_VERSION, '5.3.0', '<')) {
    throw new GTException("PHP version 5.3.0 or greater is required by GuardTime PHP SDK");
}

if (!extension_loaded('hash')) {
    throw new GTException("Hash extension is required by GuardTime PHP SDK");
}

if (!extension_loaded('openssl')) {
    throw new GTException("OpenSSL extension is required by GuardTime PHP SDK");
}

if (version_compare(GTUtil::getOpensslVersion(), '0.9.8', '<')) {
    throw new GTException("OpenSSL version 0.9.8 or later is reqquired by GuardTime PHP SDK, current: " . OPENSSL_VERSION_TEXT);
}

?>
