@@ -100,7 +100,7 @@ void ClaimingHandlerClass::getIdReqHandler() {
100
100
idMsg.m .uhwid = _uhwidBytes;
101
101
_agentManager.sendMsg (idMsg);
102
102
103
- String token = getAIoTCloudJWT (*_secureElement, *_uhwid, _ts, 1 );
103
+ String token = generateToken ( );
104
104
if (token == " " ) {
105
105
DEBUG_ERROR (" CH::%s Error: token not created" , __FUNCTION__);
106
106
sendStatus (StatusMessage::ERROR);
@@ -112,6 +112,19 @@ void ClaimingHandlerClass::getIdReqHandler() {
112
112
jwtMsg.m .jwt = token.c_str ();
113
113
_agentManager.sendMsg (jwtMsg);
114
114
_ts = 0 ;
115
+
116
+ SElementJWS sejws;
117
+ String publicKey = sejws.publicKey (*_secureElement, 1 , false );
118
+ if (publicKey == " " ) {
119
+ DEBUG_ERROR (" CH::%s Error: public key not created" , __FUNCTION__);
120
+ sendStatus (StatusMessage::ERROR);
121
+ return ;
122
+ }
123
+
124
+ // Send public key
125
+ ProvisioningOutputMessage publicKeyMsg = {MessageOutputType::PROV_PUBLIC_KEY};
126
+ publicKeyMsg.m .provPublicKey = publicKey.c_str ();
127
+ _agentManager.sendMsg (publicKeyMsg);
115
128
} else {
116
129
DEBUG_ERROR (" CH::%s Error: timestamp not provided" , __FUNCTION__);
117
130
sendStatus (StatusMessage::PARAMS_NOT_FOUND);
@@ -186,7 +199,24 @@ void ClaimingHandlerClass::getProvSketchVersionRequestCb() {
186
199
_receivedEvent = ClaimingReqEvents::GET_PROV_SKETCH_VERSION;
187
200
}
188
201
189
- bool ClaimingHandlerClass::sendStatus (StatusMessage msg) {
190
- ProvisioningOutputMessage statusMsg = { MessageOutputType::STATUS, { msg } };
191
- return _agentManager.sendMsg (statusMsg);
202
+ String ClaimingHandlerClass::generateToken ()
203
+ {
204
+ String token = getAIoTCloudJWT (*_secureElement, *_uhwid, _ts, 1 );
205
+ if (token == " " ) {
206
+ byte publicKey[64 ];
207
+ DEBUG_INFO (" Generating private key" );
208
+ if (!_secureElement->generatePrivateKey (1 , publicKey)){
209
+ DEBUG_ERROR (" CH::%s Error: private key generation failed" , __FUNCTION__);
210
+ return " " ;
211
+ }
212
+ token = getAIoTCloudJWT (*_secureElement, *_uhwid, _ts, 1 );
213
+ }
214
+
215
+ return token;
216
+ }
217
+
218
+ bool ClaimingHandlerClass::sendStatus (StatusMessage msg)
219
+ {
220
+ ProvisioningOutputMessage statusMsg = {MessageOutputType::STATUS, {msg}};
221
+ return _agentManager.sendMsg (statusMsg);
192
222
}
0 commit comments