Keystore.swift makes it easy to extract private keys from Ethereum keystore files and generate keystore files from existing private keys.
This library belongs to our Swift Crypto suite. For a pure Swift Ethereum Web3 library check out Web3.swift!
This library also supports EIP 2335 (BLS/ETH2) keystores.
Check the usage below or look through the repositories tests.
We only support Swift Package Manager. Everything else is outdated.
Keystore is compatible with Swift Package Manager v5 (Swift 5 and above). Simply add it to the dependencies in your Package.swift
.
dependencies: [
.package(url: "https://github.com/Boilertalk/Keystore.swift.git", from: "0.3.0")
]
And then add it to your target dependencies:
targets: [
.target(
name: "MyProject",
dependencies: [
.product(name: "Keystore", package: "Keystore.swift"),
]),
.testTarget(
name: "MyProjectTests",
dependencies: ["MyProject"])
]
After the installation you can import Keystore
in your .swift
files.
import Keystore
To extract a private key from an existing keystore file, just do the following.
import Keystore
let decoder = JSONDecoder()
let keystoreData: Data = ... // Load keystore data from file?
let keystore = try decoder.decode(Keystore.self, from: keystoreData)
let password = "your_super_secret_password"
let privateKey = try keystore.privateKey(password: password)
print(privateKey) // Your decrypted private key
And to generate a keystore file from an existing private key, your code should look a little bit like the following.
let privateKey: [UInt8] = ... // Get your private key as a byte array
let password = "your_super_secret_password"
let keystore = try Keystore(privateKey: privateKey, password: password)
let keystoreJson = try JSONEncoder().encode(keystore)
print(String(data: keystoreJson, encoding: .utf8)) // Your encrypted keystore as a json string
To extract a private key from an existing keystore file, just do the following.
import Keystore
let decoder = JSONDecoder()
let keystoreData: Data = ... // Load keystore data from file?
let keystore = try decoder.decode(KeystoreETH2.self, from: keystoreData)
let password = "your_super_secret_password"
let privateKey = try keystore.privateKey(password: password)
print(privateKey) // Your decrypted private key
The awesome guys at Boilertalk ⚗️
...and even more awesome members from the community 💜
Check out the contributors list for a complete list.
Keystore is available under the MIT license. See the LICENSE file for more info.