2323package no .nordicsemi .android .mesh .provisionerstates ;
2424
2525import java .nio .ByteBuffer ;
26- import java .util .Arrays ;
2726
2827import androidx .annotation .NonNull ;
2928import androidx .annotation .RestrictTo ;
30- import no . nordicsemi . android . mesh . InternalProvisioningCallbacks ;
29+
3130import no .nordicsemi .android .mesh .InternalTransportCallbacks ;
3231import no .nordicsemi .android .mesh .MeshManagerApi ;
3332import no .nordicsemi .android .mesh .MeshProvisioningStatusCallbacks ;
3433import no .nordicsemi .android .mesh .logger .MeshLogger ;
3534import no .nordicsemi .android .mesh .utils .MeshParserUtils ;
36- import no .nordicsemi .android .mesh .utils .SecureUtils ;
3735
3836public class ProvisioningRandomConfirmationState extends ProvisioningState {
3937
4038 private final String TAG = ProvisioningRandomConfirmationState .class .getSimpleName ();
4139 private final UnprovisionedMeshNode node ;
4240 private final MeshProvisioningStatusCallbacks mStatusCallbacks ;
43- private final InternalProvisioningCallbacks provisioningCallbacks ;
4441 private final InternalTransportCallbacks mInternalTransportCallbacks ;
4542
4643 /**
@@ -49,16 +46,13 @@ public class ProvisioningRandomConfirmationState extends ProvisioningState {
4946 * @param node {@link UnprovisionedMeshNode} node.
5047 * @param internalTransportCallbacks {@link InternalTransportCallbacks} callbacks.
5148 * @param provisioningStatusCallbacks {@link MeshProvisioningStatusCallbacks} callbacks.
52- * @param internalProvisioningCallbacks {@link InternalProvisioningCallbacks} callbacks.
5349 */
5450 @ RestrictTo (RestrictTo .Scope .LIBRARY )
5551 public ProvisioningRandomConfirmationState (@ NonNull final UnprovisionedMeshNode node ,
56- @ NonNull final InternalProvisioningCallbacks internalProvisioningCallbacks ,
5752 @ NonNull final InternalTransportCallbacks internalTransportCallbacks ,
5853 @ NonNull final MeshProvisioningStatusCallbacks provisioningStatusCallbacks ) {
5954 super ();
6055 this .node = node ;
61- this .provisioningCallbacks = internalProvisioningCallbacks ;
6256 this .mInternalTransportCallbacks = internalTransportCallbacks ;
6357 this .mStatusCallbacks = provisioningStatusCallbacks ;
6458 }
@@ -79,7 +73,7 @@ public void executeSend() {
7973 public boolean parseData (@ NonNull final byte [] data ) {
8074 mStatusCallbacks .onProvisioningStateChanged (node , States .PROVISIONING_RANDOM_RECEIVED , data );
8175 parseProvisioneeRandom (data );
82- return provisioneeMatches () ;
76+ return true ;
8377 }
8478
8579 private byte [] createProvisionerRandomPDU () {
@@ -92,37 +86,6 @@ private byte[] createProvisionerRandomPDU() {
9286 return data ;
9387 }
9488
95- private boolean provisioneeMatches () {
96- final byte [] provisioneeRandom = node .getProvisioneeRandom ();
97-
98- final byte [] confirmationInputs = provisioningCallbacks .generateConfirmationInputs (node .getProvisionerPublicKeyXY (),
99- node .getProvisioneePublicKeyXY ());
100- MeshLogger .verbose (TAG , "Confirmation inputs: " + MeshParserUtils .bytesToHex (confirmationInputs , false ));
101-
102- //Generate a confirmation salt of the confirmation inputs
103- final byte [] confirmationSalt = SecureUtils .calculateSalt (confirmationInputs );
104- MeshLogger .verbose (TAG , "Confirmation salt: " + MeshParserUtils .bytesToHex (confirmationSalt , false ));
105-
106- final byte [] ecdhSecret = node .getSharedECDHSecret ();
107-
108- //Generate the confirmationKey by calculating the K1 of ECDH, confirmationSalt and ASCII value of "prck".
109- final byte [] confirmationKey = SecureUtils .calculateK1 (ecdhSecret , confirmationSalt , SecureUtils .PRCK );
110- MeshLogger .verbose (TAG , "Confirmation key: " + MeshParserUtils .bytesToHex (confirmationKey , false ));
111-
112- //Generate authentication value from the user input pin
113- final byte [] authenticationValue = node .getAuthenticationValue ();
114- MeshLogger .verbose (TAG , "Authentication value: " + MeshParserUtils .bytesToHex (authenticationValue , false ));
115-
116- ByteBuffer buffer = ByteBuffer .allocate (provisioneeRandom .length + authenticationValue .length );
117- buffer .put (provisioneeRandom );
118- buffer .put (authenticationValue );
119- final byte [] confirmationData = buffer .array ();
120-
121- final byte [] confirmationValue = SecureUtils .calculateCMAC (confirmationData , confirmationKey );
122-
123- return Arrays .equals (confirmationValue , node .getProvisioneeConfirmation ());
124- }
125-
12689 private void parseProvisioneeRandom (final byte [] provisioneeRandomPDU ) {
12790 final ByteBuffer buffer = ByteBuffer .allocate (provisioneeRandomPDU .length - 2 );
12891 buffer .put (provisioneeRandomPDU , 2 , buffer .limit ());
0 commit comments