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()
33  {
34  }
35 
36  virtual bool validate(const Certificate& certificate) = 0;
37 };
38 
43 template <class FP> class FingerprintValidator : public Validator
44 {
45 public:
46  FingerprintValidator(const FP& fingerprint) : fp(fingerprint)
47  {
48  }
49 
50  bool validate(const Certificate& certificate) override
51  {
52  FP certFp;
53  if(!certificate.getFingerprint(FP::type, reinterpret_cast<Fingerprint&>(certFp))) {
54  // Fingerprint not available
55  return false;
56  }
57 
58  return certFp.hash == fp.hash;
59  }
60 
61 private:
62  FP fp;
63 };
64 
72 using ValidatorCallback = Delegate<bool(const Certificate* certificate, void* data)>;
73 
77 class CallbackValidator : public Validator
78 {
79 public:
80  CallbackValidator(ValidatorCallback callback, void* param) : callback(callback), param(param)
81  {
82  }
83 
85  {
86  // If callback hasn't been invoked yet, do it now to release any allocated memory
87  if(callback) {
88  callback(nullptr, param);
89  }
90  }
91 
92  bool validate(const Certificate& certificate) override
93  {
94  bool res = callback ? callback(&certificate, param) : false;
95  // Only invoke the callback once
96  callback = nullptr;
97  return res;
98  }
99 
100 private:
101  ValidatorCallback callback;
102  void* param;
103 };
104 
105 } // namespace Ssl
Implemented by SSL adapter to handle certificate operations.
Definition: Certificate.h:58
virtual ~Validator()
Definition: Validator.h:52
bool validate(const Certificate &certificate) override
Definition: Validator.h:102
Various types of fingerprint.
Definition: Fingerprints.h:35
~CallbackValidator()
Definition: Validator.h:94
Base validator class.
Definition: Validator.h:39
FingerprintValidator(const FP &fingerprint)
Definition: Validator.h:56
CallbackValidator(ValidatorCallback callback, void *param)
Definition: Validator.h:90
virtual bool validate(const Certificate &certificate)=0
Validator class wrapping a user-provided callback delegate, plus optional parameter.
Definition: Validator.h:87
bool validate(const Certificate &certificate) override
Definition: Validator.h:60
Definition: Alert.h:15