Each Virgil Security SDK includes a persistent storage mechanism that allows developers to store users' private keys on their devices. It is highly recommended that the private key is protected with password before it is persisted.
The following is the list of key storage backends used by default by each SDK:
PHP: file system
JavaScript: IndexedDB
Node.js: file system
Java: file system
Ruby: file system
Python: file system
Swift: Keychain
Objective-C: Keychain
Go: file system
C#/.NET: Isolated Storage that is encrypted for current user.
However, you can provide your own private key storage mechanism and the SDK will use that.