2024-08-02 04:27:56 +00:00
|
|
|
|
<a id="whalesong-diffie-hellman-ephemeral-fernet-based-encryption"></a>
|
|
|
|
|
|
|
|
|
|
# WhaleSong: Diffie hellman ephemeral Fernet based encryption
|
2024-08-01 01:09:11 +00:00
|
|
|
|
|
|
|
|
|
### *class* Cryptography.WhaleSong.DHEFern(cache, nodeNickname, cLog)
|
|
|
|
|
|
2024-08-01 22:03:59 +00:00
|
|
|
|
[🔗 Source](https://git.utopic.work/PierMesh/piermesh/src/branch/main/Cryptography/WhaleSong.py)
|
|
|
|
|
|
2024-08-01 01:09:11 +00:00
|
|
|
|
#### cLog
|
|
|
|
|
|
|
|
|
|
Method reference to run.Node.cLog so we can log to the ui from here
|
|
|
|
|
|
|
|
|
|
#### loadedParams
|
|
|
|
|
|
|
|
|
|
In memory representations of cryptography parameters
|
|
|
|
|
|
|
|
|
|
* **Type:**
|
|
|
|
|
dict
|
|
|
|
|
|
|
|
|
|
#### loadedKeys
|
|
|
|
|
|
|
|
|
|
In memory representations of cryptography keys
|
|
|
|
|
|
|
|
|
|
* **Type:**
|
|
|
|
|
dict
|
|
|
|
|
|
|
|
|
|
#### nodeNickname
|
|
|
|
|
|
|
|
|
|
Name of node for isolating configs when running multiple nodes
|
|
|
|
|
|
|
|
|
|
* **Type:**
|
|
|
|
|
str
|
|
|
|
|
|
|
|
|
|
#### cache
|
|
|
|
|
|
|
|
|
|
Daisy cache for use in storing cryptography information
|
|
|
|
|
|
|
|
|
|
* **Type:**
|
|
|
|
|
Components.daisy.Cache
|
|
|
|
|
|
|
|
|
|
#### publicKey
|
|
|
|
|
|
|
|
|
|
Public key for node
|
|
|
|
|
|
|
|
|
|
#### privateKey
|
|
|
|
|
|
|
|
|
|
Private key for node
|
|
|
|
|
|
|
|
|
|
#### checkInMem(store: str, nodeID: str)
|
|
|
|
|
|
|
|
|
|
Check if parameters or keys are loaded for node of nodeID
|
|
|
|
|
|
|
|
|
|
* **Parameters:**
|
|
|
|
|
**store** (*str*) – Whether to check loaded keys or parameters
|
|
|
|
|
|
|
|
|
|
#### decrypt(data, nodeID: str)
|
|
|
|
|
|
|
|
|
|
Decrypt bytes and return either str or dict (TODO: Check whether to msgpack load)
|
|
|
|
|
|
|
|
|
|
#### encrypt(data, nodeID: str, isDict: bool = True)
|
|
|
|
|
|
|
|
|
|
Do Fernet encryption
|
|
|
|
|
|
|
|
|
|
data
|
|
|
|
|
: Either bytes or dict to encrypt
|
|
|
|
|
|
|
|
|
|
isDict: bool
|
|
|
|
|
: Whether data is a dictionary
|
|
|
|
|
|
|
|
|
|
#### genKeyPair(paramsOverride=False, setSelf: bool = True)
|
|
|
|
|
|
|
|
|
|
Generate public and private keys from self.params (TODO: Gen from passed params)
|
|
|
|
|
|
|
|
|
|
paramsOverride
|
|
|
|
|
: False or parameters to use (TODO)
|
|
|
|
|
|
|
|
|
|
setSelf: bool
|
|
|
|
|
: Whether to set self.privateKey and self.publicKey
|
|
|
|
|
|
|
|
|
|
#### genParams()
|
|
|
|
|
|
|
|
|
|
Generate Diffie Hellman parameters
|
|
|
|
|
|
|
|
|
|
#### getParamsBytes()
|
|
|
|
|
|
|
|
|
|
Get bytes encoded from self.parameters (TODO: Encode from store)
|
|
|
|
|
|
|
|
|
|
#### getRecord(store: str, key: str)
|
|
|
|
|
|
|
|
|
|
Get record from store: store with key: key
|
|
|
|
|
|
|
|
|
|
#### getSalt()
|
|
|
|
|
|
|
|
|
|
Get random salt
|
|
|
|
|
|
|
|
|
|
#### initStore(store: str)
|
|
|
|
|
|
|
|
|
|
Initialize store: store
|
|
|
|
|
|
|
|
|
|
#### keyDerive(pubKey: bytes, salt: bytes, nodeID: str, params: bytes)
|
|
|
|
|
|
|
|
|
|
Derive shared key using Diffie Hellman
|
|
|
|
|
|
|
|
|
|
pubKey: bytes
|
|
|
|
|
: Public key
|
|
|
|
|
|
|
|
|
|
nodeID: str
|
|
|
|
|
: PierMesh node ID
|
|
|
|
|
|
|
|
|
|
params: bytes
|
|
|
|
|
: Encryption parameters
|
|
|
|
|
|
|
|
|
|
#### loadParamBytes(pemBytes: bytes)
|
|
|
|
|
|
|
|
|
|
Load parameters to self.params from given bytes (TODO: Load from store)
|
|
|
|
|
|
|
|
|
|
#### loadRecordToMem(store: str, nodeID: str)
|
|
|
|
|
|
|
|
|
|
Load record of nodeID from store to either keys or pameters
|