/* Ċ Ġ* ĠCopyright ĠÂ© Ġ 2 0 2 0 ĠN HS X . ĠAll Ġrights Ġreserved . Ċ Ġ*/ Ċ Ċ package Ġuk . n hs . n hs x . sonar . android . app . crypto Ċ Ċ import Ġorg . joda . time . DateTime Ċ import Ġorg . joda . time . DateTime Zone Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjavax . inject . Inject Ċ import Ġjavax . inject . Singleton Ċ Ċ @ Singleton Ċ class ĠBluetooth Id Provider Ġ@ Inject Ġconstructor ( ĊĠĠĠ Ġprivate Ġval Ġcrypto gram Provider : ĠCrypto gram Provider , ĊĠĠĠ Ġprivate Ġval Ġbluetooth Id Signer : ĠBluetooth Id Signer , ĊĠĠĠ Ġprivate Ġval Ġcurrent Date Provider : Ġ() Ġ-> ĠDateTime Ġ= Ġ{ ĠDateTime . now ( DateTime Zone . UTC ) Ġ} Ċ ) Ġ{ ĊĠĠĠ Ġ// Ġhttps :// android . google source . com / platform / frameworks / base / +/ master / core / java / android / bluetooth / le / Bluetooth Le Ad vert iser . java # 1 4 4 ĊĠĠĠ Ġprivate Ġval Ġtx Power Level Ġ= Ġ(- 7 ). to Byte () ĊĊĠĠĠ Ġprivate Ġval Ġlock Ġ= ĠObject () ĊĊĠĠĠ Ġfun Ġprovide Bluetooth Payload (): ĠBluetooth Identifier Ġ{ ĊĠĠĠĠĠĠĠ Ġsynchronized ( lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcrypto gram Ġ= Ġcrypto gram Provider . provide Crypto gram () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransmission Time Bytes Ġ= Ġcurrent Date Provider (). encode As Seconds Since Epoch () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtransmission Time Ġ= ĠByteBuffer . wrap ( transmission Time Bytes ). int ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsignature Ġ= Ġbluetooth Id Signer . compute H mac Signature ( COUNTRY _ CODE , Ġcrypto gram . as Bytes (), Ġtx Power Level , Ġtransmission Time Bytes ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠBluetooth Identifier ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCOUN TRY _ CODE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcrypto gram , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtx Power Level , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtransmission Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsignature ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcan Provide Identifier (): ĠBoolean Ġ= Ġcrypto gram Provider . can Provide Crypto gram () Ġ&& Ġbluetooth Id Signer . can Sign () Ċ } Ċ