Ice 3.7 C++98 API Reference
Loading...
Searching...
No Matches
Plugin.h
Go to the documentation of this file.
1//
2// Copyright (c) ZeroC, Inc. All rights reserved.
3//
4
5#ifndef ICESSL_PLUGIN_H
6#define ICESSL_PLUGIN_H
7
8#include <Ice/Plugin.h>
9#include <IceSSL/Config.h>
11
12#ifdef ICE_CPP11_MAPPING
13# include <chrono>
14#else
15# include <IceUtil/Time.h>
16#endif
17
18#include <vector>
19#include <list>
20
21#ifndef ICESSL_API
22# if defined(ICE_STATIC_LIBS)
23# define ICESSL_API /**/
24# elif defined(ICESSL_API_EXPORTS)
25# define ICESSL_API ICE_DECLSPEC_EXPORT
26# else
27# define ICESSL_API ICE_DECLSPEC_IMPORT
28# endif
29#endif
30
31namespace IceSSL
32{
33
37#ifdef ICE_CPP11_MAPPING
38enum class TrustError : unsigned char
39#else
87
91
95const unsigned int KEY_USAGE_DIGITAL_SIGNATURE = 1u << 0;
99const unsigned int KEY_USAGE_NON_REPUDIATION = 1u << 1;
103const unsigned int KEY_USAGE_KEY_ENCIPHERMENT = 1u << 2;
107const unsigned int KEY_USAGE_DATA_ENCIPHERMENT = 1u << 3;
111const unsigned int KEY_USAGE_KEY_AGREEMENT = 1u << 4;
115const unsigned int KEY_USAGE_KEY_CERT_SIGN = 1u << 5;
119const unsigned int KEY_USAGE_CRL_SIGN = 1u << 6;
123const unsigned int KEY_USAGE_ENCIPHER_ONLY = 1u << 7;
127const unsigned int KEY_USAGE_DECIPHER_ONLY = 1u << 8;
128
132const unsigned int EXTENDED_KEY_USAGE_ANY_KEY_USAGE = 1u << 0;
136const unsigned int EXTENDED_KEY_USAGE_SERVER_AUTH = 1u << 1;
140const unsigned int EXTENDED_KEY_USAGE_CLIENT_AUTH = 1u << 2;
144const unsigned int EXTENDED_KEY_USAGE_CODE_SIGNING = 1u << 3;
148const unsigned int EXTENDED_KEY_USAGE_EMAIL_PROTECTION = 1u << 4;
152const unsigned int EXTENDED_KEY_USAGE_TIME_STAMPING = 1u << 5;
156const unsigned int EXTENDED_KEY_USAGE_OCSP_SIGNING = 1u << 6;
157
162class ICESSL_API CertificateReadException : public IceUtil::ExceptionHelper<CertificateReadException>
163{
164public:
165
166 CertificateReadException(const char*, int, const std::string&);
167
168#ifndef ICE_CPP11_COMPILER
169 virtual ~CertificateReadException() throw();
170#endif
171
172 virtual std::string ice_id() const;
173
174#ifndef ICE_CPP11_MAPPING
180#endif
181
183 std::string reason;
184
185private:
186
187 static const char* _name;
188};
189
194class ICESSL_API CertificateEncodingException : public IceUtil::ExceptionHelper<CertificateEncodingException>
195{
196public:
197
198 CertificateEncodingException(const char*, int, const std::string&);
199
200#ifndef ICE_CPP11_COMPILER
202#endif
203
204 virtual std::string ice_id() const;
205
206#ifndef ICE_CPP11_MAPPING
212#endif
213
215 std::string reason;
216
217private:
218
219 static const char* _name;
220};
221
227{
228public:
229
230 ParseException(const char*, int, const std::string&);
231
232#ifndef ICE_CPP11_COMPILER
233 virtual ~ParseException() throw();
234#endif
235
236 virtual std::string ice_id() const;
237
238#ifndef ICE_CPP11_MAPPING
243 virtual ParseException* ice_clone() const;
244#endif
245
247 std::string reason;
248
249private:
250
251 static const char* _name;
252};
253
268{
269public:
270
276 explicit DistinguishedName(const std::string& name);
277
285 explicit DistinguishedName(const std::list<std::pair<std::string, std::string> >&);
286
291
296
303 bool match(const DistinguishedName& dn) const;
304
311 bool match(const std::string& dn) const;
312
317 operator std::string() const;
318
319protected:
320
322 void unescape();
324
325private:
326
327 std::list<std::pair<std::string, std::string> > _rdns;
328 std::list<std::pair<std::string, std::string> > _unescaped;
329};
330
334inline bool
336{
337 return rhs < lhs;
338}
339
343inline bool
344operator<=(const DistinguishedName& lhs, const DistinguishedName& rhs)
345{
346 return !(lhs > rhs);
347}
348
352inline bool
354{
355 return !(lhs < rhs);
356}
357
361inline bool
363{
364 return !(lhs == rhs);
365}
366
372#ifndef ICE_CPP11_MAPPING
373 : public virtual IceUtil::Shared
374#endif
375{
376public:
377
382 virtual bool isCritical() const = 0;
383
388 virtual std::string getOID() const = 0;
389
394 virtual std::vector<Ice::Byte> getData() const = 0;
395};
397
398class Certificate;
400
407#ifdef ICE_CPP11_MAPPING
408 public std::enable_shared_from_this<Certificate>
409#else
410 public virtual IceUtil::Shared
411#endif
412{
413public:
414
418 virtual bool operator==(const Certificate&) const = 0;
419
423 virtual bool operator!=(const Certificate&) const = 0;
424
429 virtual std::vector<Ice::Byte> getAuthorityKeyIdentifier() const = 0;
430
435 virtual std::vector<Ice::Byte> getSubjectKeyIdentifier() const = 0;
436
443 virtual bool verify(const CertificatePtr& cert) const = 0;
444
450 virtual std::string encode() const = 0;
451
457 virtual bool checkValidity() const = 0;
458
464#ifdef ICE_CPP11_MAPPING
465 virtual bool checkValidity(const std::chrono::system_clock::time_point& t) const = 0;
466#else
467 virtual bool checkValidity(const IceUtil::Time& t) const = 0;
468#endif
469
477 unsigned int getKeyUsage() const;
478
486 unsigned int getExtendedKeyUsage() const;
487
492#ifdef ICE_CPP11_MAPPING
493 virtual std::chrono::system_clock::time_point getNotAfter() const = 0;
494#else
495 virtual IceUtil::Time getNotAfter() const = 0;
496#endif
497
502#ifdef ICE_CPP11_MAPPING
503 virtual std::chrono::system_clock::time_point getNotBefore() const = 0;
504#else
505 virtual IceUtil::Time getNotBefore() const = 0;
506#endif
507
512 virtual std::string getSerialNumber() const = 0;
513
518 virtual DistinguishedName getIssuerDN() const = 0;
519
548 virtual std::vector<std::pair<int, std::string> > getIssuerAlternativeNames() const = 0;
549
554 virtual DistinguishedName getSubjectDN() const = 0;
555
560 virtual std::vector<std::pair<int, std::string> > getSubjectAlternativeNames() const = 0;
561
566 virtual int getVersion() const = 0;
567
573 virtual std::string toString() const = 0;
574
579 virtual std::vector<X509ExtensionPtr> getX509Extensions() const = 0;
580
586 virtual X509ExtensionPtr getX509Extension(const std::string& oid) const = 0;
587
595 static CertificatePtr load(const std::string& file);
596
602 static CertificatePtr decode(const std::string& str);
603};
604
605#ifndef ICE_CPP11_MAPPING // C++98 mapping
606
613{
614public:
615
617
623 virtual bool verify(const ConnectionInfoPtr& info) = 0;
624};
626
644{
645public:
646
648
655 virtual std::string getPassword() = 0;
656};
658#endif
659
665{
666public:
667
668 virtual ~Plugin();
669
675#ifdef ICE_CPP11_MAPPING
676 virtual void setCertificateVerifier(std::function<bool(const std::shared_ptr<ConnectionInfo>&)> v) = 0;
677#else
679#endif
680
686#ifdef ICE_CPP11_MAPPING
687 virtual void setPasswordPrompt(std::function<std::string()> p) = 0;
688#else
689 virtual void setPasswordPrompt(const PasswordPromptPtr& p) = 0;
690#endif
691
698 virtual CertificatePtr load(const std::string& file) const = 0;
699
706 virtual CertificatePtr decode(const std::string& str) const = 0;
707};
709
710}
711
712#endif
#define ICESSL_API
Definition ConnectionInfoF.h:49
#define ICE_DEFINE_PTR(TPtr, T)
Definition Config.h:377
std::string reason
The reason for the exception.
Definition Plugin.h:215
virtual std::string ice_id() const
Returns the type ID of this exception.
virtual CertificateEncodingException * ice_clone() const
Creates a shallow copy of this exception.
CertificateEncodingException(const char *, int, const std::string &)
CertificateReadException(const char *, int, const std::string &)
std::string reason
The reason for the exception.
Definition Plugin.h:183
virtual CertificateReadException * ice_clone() const
Creates a shallow copy of this exception.
virtual std::string ice_id() const
Returns the type ID of this exception.
An application can customize the certificate verification process by implementing the CertificateVeri...
Definition Plugin.h:613
virtual bool verify(const ConnectionInfoPtr &info)=0
Determines whether to accept a certificate.
This convenience class is a wrapper around a native certificate.
Definition Plugin.h:412
virtual IceUtil::Time getNotBefore() const =0
Obtains the not-before validity time.
virtual std::vector< Ice::Byte > getSubjectKeyIdentifier() const =0
Obtains the subject key identifier.
virtual std::string encode() const =0
Obtains a string encoding of the certificate in PEM format.
virtual std::vector< X509ExtensionPtr > getX509Extensions() const =0
Obtains a list of the X509v3 extensions contained in the certificate.
virtual std::vector< std::pair< int, std::string > > getSubjectAlternativeNames() const =0
See the comment for Plugin::getIssuerAlternativeNames.
virtual bool verify(const CertificatePtr &cert) const =0
Verifies that this certificate was signed by the given certificate public key.
virtual std::string toString() const =0
Stringifies the certificate.
virtual bool operator!=(const Certificate &) const =0
Compares the certificates for equality using the native certificate comparison method.
virtual bool checkValidity(const IceUtil::Time &t) const =0
Checks that the certificate is valid at the given time.
virtual int getVersion() const =0
Obtains the certificate version number.
virtual bool checkValidity() const =0
Checks that the certificate is currently valid, that is, the current date falls between the validity ...
virtual DistinguishedName getSubjectDN() const =0
Obtains the subject's distinguished name (DN).
virtual IceUtil::Time getNotAfter() const =0
Obtains the not-after validity time.
static CertificatePtr decode(const std::string &str)
Decodes a certificate from a string that uses the PEM encoding format.
virtual bool operator==(const Certificate &) const =0
Compares the certificates for equality using the native certificate comparison method.
virtual X509ExtensionPtr getX509Extension(const std::string &oid) const =0
Obtains the extension with the given OID.
virtual std::string getSerialNumber() const =0
Obtains the serial number.
unsigned int getExtendedKeyUsage() const
Returns the value of the extended key usage extension.
static CertificatePtr load(const std::string &file)
Loads the certificate from a file.
virtual std::vector< std::pair< int, std::string > > getIssuerAlternativeNames() const =0
Obtains the values in the issuer's alternative names extension.
virtual DistinguishedName getIssuerDN() const =0
Obtains the issuer's distinguished name (DN).
unsigned int getKeyUsage() const
Returns the value of the key usage extension.
virtual std::vector< Ice::Byte > getAuthorityKeyIdentifier() const =0
Obtains the authority key identifier.
This class represents a DistinguishedName, similar to the Java type X500Principal and the ....
Definition Plugin.h:268
bool match(const std::string &dn) const
Performs a partial match with another DistinguishedName.
DistinguishedName(const std::string &name)
Creates a DistinguishedName from a string encoded using the rules in RFC2253.
friend bool operator==(const DistinguishedName &, const DistinguishedName &)
Performs an exact match.
friend bool operator<(const DistinguishedName &, const DistinguishedName &)
Performs an exact match.
bool match(const DistinguishedName &dn) const
Performs a partial match with another DistinguishedName.
DistinguishedName(const std::list< std::pair< std::string, std::string > > &)
Creates a DistinguishedName from a list of RDN pairs, where each pair consists of the RDN's type and ...
ParseException(const char *, int, const std::string &)
std::string reason
The reason for the exception.
Definition Plugin.h:247
virtual std::string ice_id() const
Returns the type ID of this exception.
virtual ParseException * ice_clone() const
Creates a shallow copy of this exception.
In order to read an encrypted file, such as one containing a private key, OpenSSL requests a password...
Definition Plugin.h:644
virtual std::string getPassword()=0
Obtains the password.
Represents the IceSSL plug-in object.
Definition Plugin.h:665
virtual void setCertificateVerifier(const CertificateVerifierPtr &v)=0
Establish the certificate verifier object.
virtual ~Plugin()
virtual void setPasswordPrompt(const PasswordPromptPtr &p)=0
Establish the password prompt object.
virtual CertificatePtr decode(const std::string &str) const =0
Decode a certificate from a string that uses the PEM encoding format.
virtual CertificatePtr load(const std::string &file) const =0
Load the certificate from a file.
Represents an X509 Certificate extension.
Definition Plugin.h:375
virtual std::vector< Ice::Byte > getData() const =0
Obtains the data associated with this extension.
virtual std::string getOID() const =0
Obtains the object ID of this extension.
virtual bool isCritical() const =0
Determines whether the information in this extension is important.
Helper template for the implementation of Ice::Exception.
Definition Exception.h:161
Definition Handle.h:143
Definition Shared.h:78
Definition Time.h:18
A communicator plug-in.
Definition Plugin.h:198
Definition ConnectionInfo.h:138
IceUtil::Handle< PasswordPrompt > PasswordPromptPtr
Definition Plugin.h:657
const unsigned int KEY_USAGE_ENCIPHER_ONLY
The key usage "encipherOnly" bit is set.
Definition Plugin.h:123
const unsigned int EXTENDED_KEY_USAGE_CODE_SIGNING
The extended key usage "codeSigning" bit is set.
Definition Plugin.h:144
bool operator>=(const DistinguishedName &lhs, const DistinguishedName &rhs)
Performs an exact match.
Definition Plugin.h:353
const unsigned int EXTENDED_KEY_USAGE_TIME_STAMPING
The extended key usage "timeStamping" bit is set.
Definition Plugin.h:152
const unsigned int EXTENDED_KEY_USAGE_ANY_KEY_USAGE
The extended key usage "anyKeyUsage" bit is set.
Definition Plugin.h:132
std::string getHost(const IceSSL::ConnectionInfoPtr &)
const unsigned int EXTENDED_KEY_USAGE_SERVER_AUTH
The extended key usage "serverAuth" bit is set.
Definition Plugin.h:136
const unsigned int KEY_USAGE_KEY_ENCIPHERMENT
The key usage "keyEncipherment" bit is set.
Definition Plugin.h:103
const unsigned int KEY_USAGE_KEY_CERT_SIGN
The key usage "keyCertSign" bit is set.
Definition Plugin.h:115
const unsigned int EXTENDED_KEY_USAGE_OCSP_SIGNING
The extended key usage "OCSPSigning" bit is set.
Definition Plugin.h:156
::IceUtil::Handle< X509Extension > X509ExtensionPtr
Definition Plugin.h:396
::IceInternal::Handle< ConnectionInfo > ConnectionInfoPtr
Definition ConnectionInfo.h:144
const unsigned int EXTENDED_KEY_USAGE_CLIENT_AUTH
The extended key usage "clientAuth" bit is set.
Definition Plugin.h:140
bool operator>(const DistinguishedName &lhs, const DistinguishedName &rhs)
Performs an exact match.
Definition Plugin.h:335
TrustError getTrustError(const IceSSL::ConnectionInfoPtr &)
const unsigned int KEY_USAGE_DATA_ENCIPHERMENT
The key usage "dataEncipherment" bit is set.
Definition Plugin.h:107
const unsigned int KEY_USAGE_DECIPHER_ONLY
The key usage "decipherOnly" bit is set.
Definition Plugin.h:127
const unsigned int KEY_USAGE_NON_REPUDIATION
The key usage "nonRepudiation" bit is set.
Definition Plugin.h:99
bool operator<=(const DistinguishedName &lhs, const DistinguishedName &rhs)
Performs an exact match.
Definition Plugin.h:344
TrustError
The reason for an IceSSL certificate verification failure.
Definition Plugin.h:42
@ InvalidSignature
The X509 chain is invalid due to an invalid certificate signature.
Definition Plugin.h:70
@ InvalidPolicyConstraints
The X509 chain is invalid due to invalid policy constraints.
Definition Plugin.h:66
@ HasExcludedNameConstraint
The X509 chain is invalid because a certificate has excluded a name constraint.
Definition Plugin.h:48
@ PartialChain
The X509 chain could not be built up to the root certificate.
Definition Plugin.h:77
@ InvalidPurpose
The supplied certificate cannot be used for the specified purpose.
Definition Plugin.h:68
@ InvalidBasicConstraints
The X509 chain is invalid due to invalid basic constraints.
Definition Plugin.h:60
@ InvalidNameConstraints
The X509 chain is invalid due to invalid name constraints.
Definition Plugin.h:64
@ UnknownTrustFailure
The X509 chain is invalid due to other unknown failure.
Definition Plugin.h:85
@ RevocationStatusUnknown
It is not possible to determine whether the certificate has been revoked.
Definition Plugin.h:79
@ HasNonPermittedNameConstraint
The certificate has a non permitted name constraint.
Definition Plugin.h:52
@ InvalidExtension
The X509 chain is invalid due to an invalid extension.
Definition Plugin.h:62
@ UntrustedRoot
The X509 chain is invalid due to an untrusted root certificate.
Definition Plugin.h:83
@ Revoked
The X509 chain is invalid due to a revoked certificate.
Definition Plugin.h:81
@ HasNonSupportedCriticalExtension
The certificate does not support a critical extension.
Definition Plugin.h:54
@ NotTrusted
The certificate is explicitly not trusted.
Definition Plugin.h:75
@ HasNonDefinedNameConstraint
The certificate has an undefined name constraint.
Definition Plugin.h:50
@ HostNameMismatch
A host name mismatch has occurred.
Definition Plugin.h:58
@ ChainTooLong
The certificate chain length is greater than the specified maximum depth.
Definition Plugin.h:46
@ HasNonSupportedNameConstraint
The certificate does not have a supported name constraint or has a name constraint that is unsupporte...
Definition Plugin.h:56
@ NoError
The certification verification succeed.
Definition Plugin.h:44
@ InvalidTime
The X509 chain is not valid due to an invalid time value, such as a value that indicates an expired c...
Definition Plugin.h:73
const unsigned int KEY_USAGE_DIGITAL_SIGNATURE
The key usage "digitalSignature" bit is set.
Definition Plugin.h:95
const unsigned int KEY_USAGE_KEY_AGREEMENT
The key usage "keyAgreement" bit is set.
Definition Plugin.h:111
const unsigned int KEY_USAGE_CRL_SIGN
The key usage "cRLSign" bit is set.
Definition Plugin.h:119
bool operator!=(const DistinguishedName &lhs, const DistinguishedName &rhs)
Performs an exact match.
Definition Plugin.h:362
IceUtil::Handle< CertificateVerifier > CertificateVerifierPtr
Definition Plugin.h:625
::IceUtil::Handle< Certificate > CertificatePtr
Definition Plugin.h:399
::IceUtil::Handle< Plugin > PluginPtr
Definition Plugin.h:708
const unsigned int EXTENDED_KEY_USAGE_EMAIL_PROTECTION
The extended key usage "emailProtection" bit is set.
Definition Plugin.h:148
std::string getTrustErrorDescription(TrustError)