pkiutilities/ocsp/src/response.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Tue, 26 Jan 2010 15:20:08 +0200
changeset 0 164170e6151a
permissions -rw-r--r--
Revision: 201004

// Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
// All rights reserved.
// This component and the accompanying materials are made available
// under the terms of "Eclipse Public License v1.0"
// which accompanies this distribution, and is available
// at the URL "http://www.eclipse.org/legal/epl-v10.html".
//
// Initial Contributors:
// Nokia Corporation - initial contribution.
//
// Contributors:
//
// Description:
// Object encapsulating the OCSP response - uses ASN1 encoding
// 
//


#include "ocsp.h"
#include "oids.h"
#include "panic.h"
#include "certid.h"

#include <asn1dec.h>
#include <x509cert.h>
#include <x500dn.h>
#include "ocsprequestandresponse.h"

COCSPResponse::COCSPResponse()
	{
	}


COCSPResponse::~COCSPResponse()
	{
	delete iArchiveCutoff;
	iCertInfos.ResetAndDestroy();
	}


EXPORT_C TInt COCSPResponse::CertCount() const
	{
	return iCertInfos.Count();
	}


EXPORT_C const COCSPResponseCertInfo& COCSPResponse::CertInfo(TUint aIndex) const
	{
	return *iCertInfos[aIndex];
	}


const TPtrC8 COCSPResponse::SignedDataL() const
	{
	return iSignedData;	
	}


const TPtrC8* COCSPResponse::DataElementEncoding(const TUint aIndex) const
	{
	const TPtrC8* result = NULL;
	
	switch (aIndex)
		{
		case ECertificateChain:
			result = iSigningCerts.Length() ? &iSigningCerts : NULL;
			break;
		case ENonce:
			result = iNonce.Length() ? &iNonce : NULL;
			break;
		case EResponderIDName:
			result = iResponderIDName.Length() ? &iResponderIDName : NULL;
			break;
		case EResponderIDKeyHash:
			result = iResponderIDKeyHash.Length() ? &iResponderIDKeyHash : NULL;
			break;
		default:
			Panic(KErrArgument);	
		}

	return result;
	}


void COCSPResponse::InternalizeL(RReadStream& /* aStream */)
	{
	Panic(KErrNotSupported);	
	}


EXPORT_C TTime COCSPResponse::ProducedAt() const
	{
	return iProducedAt;
	}


EXPORT_C const TTime* COCSPResponse::ArchiveCutoff() const
	{
	return iArchiveCutoff;
	}


TInt COCSPResponse::Find(const COCSPCertID& aCertID) const
	{
	TInt count = CertCount();
	for (TInt index = 0; index < count; ++index)
		{
		const COCSPCertID& responseCertID = CertInfo(index).CertID();
		if (responseCertID == aCertID)
			{
			return index;
			}
		}
	
	return KErrNotFound;
	}