In most cases, like in the Substrate, you would create a mnemonic, get its seed, and use its first 32 bytes to get Secret Key instance:
val seedBytes: ByteArray// should be exactly 32 bytes, otherwise error will be thrownval miniSecretKey: MiniSecretKey= MiniSecretKey.fromByteArray(seedBytes)val backToSeed: ByteArray= miniSecretKey.toByteArray()
Or you can generate it skipping seed provision part using Kotlin's SecureRandom from krypt library or by providing your custom CPSRNG:
val generatedMiniSecretKey: MiniSecretKey= MiniSecretKey.generate()val yourSecureRandom: kotlin.random.Randomval generatedMiniSecretKeyWithCPSRNG: MiniSecretKey= MiniSecretKey.generateWith(yourSecureRandom)
val signingTranscript: SigningTranscriptval yourMiniSecretKey: MiniSecretKeyval signedMessage: Signature= yourMiniSecretKey.signDoubleCheck(signingTranscript)
Simple signing:
val yourContextLabel: Stringval messageToSign: ByteArray// Still, we need to set the contextval signingContext: SigningContext= SigningContext .fromContext(yourContextLabel.toByteArray())val yourMiniSecretKey: MiniSecretKeyval signedMessage: Signature= yourMiniSecretKey.signSimple(signingContext, messageToSign)val doubleCheckedSignedMessage: Signature= yourMiniSecretKey.signSimpleDoubleCheck(signingContext, messageToSign)
Uniform
You can convert Mini Secret Key to Uniform Secret Key:
val miniSecretKey: MiniSecretKeyval secretKeyUniform: SecretKey= miniSecretKey.expandUniform()// orval secretKeyUniform: SecretKey= miniSecretKey.expand(ExpansionMode.UNIFORM)
ed25519
Also, you're able to do the same with ed25519 representation
val miniSecretKey: MiniSecretKeyval secretKeyEd25519: SecretKey= miniSecretKey.expandEd25519()// orval secretKeyEd25519: SecretKey= miniSecretKey.expand(ExpansionMode.ED25519)
Public Key
To avoid extra step of conversion to Secret Key and then to Public Key, use this:
val miniSecretKey: MiniSecretKeyval expansionMode: ExpansionMode// ExpansionMode.UNIFORM or ExpansionMode.ED25519val publicKey: PublicKey= miniSecretKey.expandToKeyPair(expansionMode)
Key Pair
And finally, to get the Key Pair right from Mini Secret Key, try this:
val miniSecretKey: MiniSecretKeyval expansionMode: ExpansionMode// ExpansionMode.UNIFORM or ExpansionMode.ED25519val keyPair: KeyPair= miniSecretKey.expandToKeypair(expansionMode)