![](/media/cache/img/default_profile.jpg.50x50_q85.jpg)
fork to force BLE id to have prefix that is assumed by the app
Dependencies: BLE_API Crypto RNG mbed nRF51822
Fork of Garagem by
SecurityService.h
- Committer:
- dgomes
- Date:
- 2015-08-26
- Revision:
- 11:3de9b542eeac
- Child:
- 12:eaee29bfa1c7
File content as of revision 11:3de9b542eeac:
#ifndef __BLE_SECURITY_SERVICE_H__ #define __BLE_SECURITY_SERVICE_H__ #include "Crypto.h" class SecurityService { public: const static uint16_t SECURITY_SERVICE_UUID = 0x3000; const static uint16_t SECURITY_IV_CHARACTERISTIC_UUID = 0x3001; const static uint16_t SECURITY_KEY_CHARACTERISTIC_UUID = 0x3002; SecurityService(BLE &_ble, char *shared_key) : ble(_ble), SecurityIV(SECURITY_IV_CHARACTERISTIC_UUID, (uint8_t *) 0), SecurityKey(SECURITY_KEY_CHARACTERISTIC_UUID, (uint8_t *) 0) { boot = true; GattCharacteristic *charTable[] = {&SecurityIV, &SecurityKey}; GattService SecurityService(SECURITY_SERVICE_UUID, charTable, sizeof(charTable) / sizeof(GattCharacteristic *)); ble.gattServer().addService(SecurityService); //Initialize AES setKey(shared_key); genIV(); } void decode(uint8_t *out, uint8_t *in, uint32_t len) { AES myAES(AES_128, myKey, iv); myAES.decrypt(out,in,len); genIV(); } void setKey(char *shared_key) { if(boot) { DBG("Set shared_key = %s\r\n", shared_key); MD5::computeHash(myKey, (uint8_t*) shared_key, strlen(shared_key)); } } void bootComplete() { boot = false; } void genIV() { //TODO RANDOM THIS: uint8_t new_iv[16] = { 0xA2, 0x68, 0x56, 0x36, 0x52, 0x18, 0x71, 0xD0, 0x23, 0x06, 0xE2, 0xEB, 0x8F, 0x70, 0x27, 0xB3 }; memcpy(iv, new_iv,16); ble.gattServer().write(SecurityIV.getValueHandle(), (uint8_t *)iv, 16*sizeof(uint8_t)); } GattAttribute::Handle_t getKeyHandle() const { return SecurityKey.getValueHandle(); } private: BLE &ble; ReadOnlyArrayGattCharacteristic<uint8_t, 16> SecurityIV; WriteOnlyArrayGattCharacteristic<uint8_t, 16> SecurityKey; bool boot; uint8_t iv[16]; //openssl enc -aes-128-cbc -pass pass:********** -nosalt -P uint8_t myKey[16]; }; #endif /* #ifndef __BLE_SECURITY_SERVICE_H__ */