Solid Encrypt is an implementation of data encryption which can be used to encrypt the content in turtle files stored in Solid PODs.
The encryption of files works with both Android and Web based client applications. The main fucntionalities in the package include set up encryption keys, encrypt file content, change/update encryption keys, and revoke the encryption.
The strength of this package is that the encryption key is not stored in Solid server, but in local storage. Only the key checksum is saved in the Solid sever.
- Set up an encryption key for encrypting files in a Solid POD
- Encrypt content of a file in a Solid POD
- Change the encryption key which will re-encrypt all the encrypted files in the POD
- Revoke the encryption completely which will decrypt all encrypted files and remove the encryption key
To use the Solid Encrypt package you will also need the Solid Auth package. This package uses authentication tokens provided by the Solid Auth package to read and write data from and to Solid PODs.
To use this package add solid_encrypt
as a dependency in your pubspec.yaml
file.
An example project that uses solid_auth
can be found here.
import 'package:solid_auth/solid_auth.dart';
// Example WebID
String _myWebId = 'https://charlieb.solidcommunity.net/profile/card#me';
// Authentication process for the Solid POD using Solid Auth package
var authData = await authenticate(...);
import 'package:solid_auth/solid_encrypt.dart';
// Set up encryption client object
EncryptClient encryptClient = EncryptClient(authData, _myWebId);
// Set up encryption key
String encryptKey = 'my-enc-key';
await encryptClient.setupEncKey(encryptKey);
import 'package:solid_auth/solid_encrypt.dart';
// Set up encryption client object
EncryptClient encryptClient = EncryptClient(authData, _myWebId);
// Verify and store the encryption key in local storage
String encryptKey = 'my-enc-key';
await encryptClient.verifyEncKey(encryptKey);
// Encrypt files
String encryptFileLocation = 'private/medical-data';
String encryptFileName = 'vaccination_history.ttl'
await encryptClient.encryptFile(encryptFileLocation, encryptFileName);
import 'package:solid_auth/solid_encrypt.dart';
// Set up encryption client object
EncryptClient encryptClient = EncryptClient(authData, _myWebId);
// Define old and new encryption keys
String encryptKeyPrev = 'my-enc-key';
String encryptKeyNew = 'my-new-enc-key';
// Update encryption key
await encryptClient.updateEncKey(encryptKeyPrev, encryptKeyNew);
import 'package:solid_auth/solid_encrypt.dart';
// Set up encryption client object
EncryptClient encryptClient = EncryptClient(authData, _myWebId);
// Define encryption keys
String encryptKey = 'my-enc-key';
// Revoke encryption
await encryptClient.revokeEnc(encryptKey);
The source code can be accessed via GitHub repository. You can also file issues you face at GitHub Issues.