1/*
2 * Copyright (c) 2004-2005 Apple Computer, Inc. All Rights Reserved.
3 *
4 * @APPLE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. Please obtain a copy of the License at
10 * http://www.opensource.apple.com/apsl/ and read it before using this
11 * file.
12 *
13 * The Original Code and all software distributed under the License are
14 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
15 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
16 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
18 * Please see the License for the specific language governing rights and
19 * limitations under the License.
20 *
21 * @APPLE_LICENSE_HEADER_END@
22 */
23
24/*
25 * ocspRequest.h - OCSP Request class
26 */
27
28#ifndef	_OCSP_REQUEST_H_
29#define _OCSP_REQUEST_H_
30
31#include <Security/SecAsn1Coder.h>
32#include <Security/ocspTemplates.h>
33#include <security_utilities/utilities.h>
34#include <clAppUtils/CertParser.h>
35
36class OCSPClientCertID;
37
38class OCSPRequest
39{
40	NOCOPY(OCSPRequest)
41public:
42	/*
43	 * The only constructor. Subject and issuer must remain valid for the
44	 * lifetime of this object.
45	 */
46	OCSPRequest(
47		CertParser		&subject,
48		CertParser		&issuer,
49		bool			genNonce);
50
51	~OCSPRequest();
52
53	/*
54	 * Obtain encoded OCSP request suitable for posting to responder.
55	 * This object owns and maintains the memory.
56	 */
57	const CSSM_DATA *encode();
58
59	/*
60	 * Obtain this request's nonce (which we randomly generate at encode() time),
61	 * This object owns and maintains the memory. Result is NULL} if we
62	 * didn't generate a nonce.
63	 */
64	const CSSM_DATA *nonce();
65
66	/*
67	 * Obtain this request's CertID. Used to look up matching SingleResponse
68	 * in the OCSPResponse.
69	 */
70	OCSPClientCertID	*certID();
71
72private:
73	SecAsn1CoderRef		mCoder;
74	CertParser			&mSubject;
75	CertParser			&mIssuer;
76	bool				mGenNonce;
77	CSSM_DATA			mNonce;
78	CSSM_DATA			mEncoded;	/* lazily evaluated */
79	OCSPClientCertID	*mCertID;	/* calculated during encode() */
80
81};
82
83#endif	/* _OCSP_REQUEST_H_ */
84
85