Validator.h
Go to the documentation of this file.
1 /****
2  * Sming Framework Project - Open Source framework for high efficiency native ESP8266 development.
3  * Created 2015 by Skurydin Alexey
4  * http://github.com/SmingHub/Sming
5  * All files of the Sming Core are provided under the LGPL v3 license.
6  *
7  * Validator.h
8  *
9  * @author: 2018 - Slavey Karadzhov <slav@attachix.com>
10  *
11  ****/
12 
13 #pragma once
14 
15 #include <Delegate.h>
16 #include "Certificate.h"
17 #include "Fingerprints.h"
18 
19 namespace Ssl
20 {
29 class Validator
30 {
31 public:
32  virtual ~Validator() = default;
33 
34  virtual bool validate(const Certificate& certificate) = 0;
35 };
36 
41 template <class FP> class FingerprintValidator : public Validator
42 {
43 public:
44  FingerprintValidator(const FP& fingerprint) : fp(fingerprint)
45  {
46  }
47 
48  bool validate(const Certificate& certificate) override
49  {
50  FP certFp;
51  if(!certificate.getFingerprint(FP::type, reinterpret_cast<Fingerprint&>(certFp))) {
52  // Fingerprint not available
53  return false;
54  }
55 
56  return certFp.hash == fp.hash;
57  }
58 
59 private:
60  FP fp;
61 };
62 
70 using ValidatorCallback = Delegate<bool(const Certificate* certificate, void* data)>;
71 
76 {
77 public:
78  CallbackValidator(ValidatorCallback callback, void* param) : callback(callback), param(param)
79  {
80  }
81 
83  {
84  // If callback hasn't been invoked yet, do it now to release any allocated memory
85  if(callback) {
86  callback(nullptr, param);
87  }
88  }
89 
90  bool validate(const Certificate& certificate) override
91  {
92  bool res = callback ? callback(&certificate, param) : false;
93  // Only invoke the callback once
94  callback = nullptr;
95  return res;
96  }
97 
98 private:
99  ValidatorCallback callback;
100  void* param;
101 };
102 
103 } // namespace Ssl
Validator class wrapping a user-provided callback delegate, plus optional parameter.
Definition: Validator.h:76
CallbackValidator(ValidatorCallback callback, void *param)
Definition: Validator.h:78
bool validate(const Certificate &certificate) override
Definition: Validator.h:90
~CallbackValidator()
Definition: Validator.h:82
Implemented by SSL adapter to handle certificate operations.
Definition: Certificate.h:49
virtual bool getFingerprint(Fingerprint::Type type, Fingerprint &fingerprint) const =0
Obtain certificate fingerprint.
Class template to validate any kind of fingerprint.
Definition: Validator.h:42
bool validate(const Certificate &certificate) override
Definition: Validator.h:48
FingerprintValidator(const FP &fingerprint)
Definition: Validator.h:44
Base validator class.
Definition: Validator.h:30
virtual ~Validator()=default
virtual bool validate(const Certificate &certificate)=0
Definition: Alert.h:16
Various types of fingerprint.
Definition: Fingerprints.h:27