https://github.com/andreypfau/curve25519-kotlin
A pure Kotlin/Multiplatform implementation of group operations on Curve25519.
https://github.com/andreypfau/curve25519-kotlin
cryptography curve25519 ed25519 edwards-curve kotlin kotlin-js kotlin-jvm kotlin-multiplatform kotlin-native montgomery-curve x25519
Last synced: 8 months ago
JSON representation
A pure Kotlin/Multiplatform implementation of group operations on Curve25519.
- Host: GitHub
- URL: https://github.com/andreypfau/curve25519-kotlin
- Owner: andreypfau
- License: mit
- Created: 2022-10-22T01:22:32.000Z (about 3 years ago)
- Default Branch: main
- Last Pushed: 2025-01-14T01:48:07.000Z (11 months ago)
- Last Synced: 2025-03-30T04:51:15.168Z (9 months ago)
- Topics: cryptography, curve25519, ed25519, edwards-curve, kotlin, kotlin-js, kotlin-jvm, kotlin-multiplatform, kotlin-native, montgomery-curve, x25519
- Language: Kotlin
- Homepage:
- Size: 1.06 MB
- Stars: 19
- Watchers: 2
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# curve25519-kotlin
[](https://search.maven.org/artifact/io.github.andreypfau/curve25519-kotlin/0.0.8/pom)
[](https://opensource.org/licenses/MIT)
[](http://kotlinlang.org)
**A pure Kotlin/Multiplatform implementation of group operations on Curve25519.**
### Gradle Kotlin DSL:
```kotlin
dependencies {
implementation("io.github.andreypfau:curve25519-kotlin:0.0.8")
}
```
### Apache Maven:
```xml
io.github.andreypfau
curve25519-kotlin-jvm
0.0.8
```
## Examples:
### Generate key-pair from random
```kotlin
val privateKey: Ed25519PrivateKey = Ed25519.generateKey(Random)
val publicKey: Ed25519PublicKey = privateKey.publicKey()
```
### Generate key-pair from seed bytes
```kotlin
val seedBytes: ByteArray = ByteArray(32)
val privateKey: Ed25519PrivateKey = Ed25519.keyFromSeed(seedBytes)
val publicKey: Ed25519PublicKey = privateKey.publicKey()
```
### Signing messages & verify signatures
```kotlin
val message: ByteArray = "test message".encodeToByteArray()
val signature: ByteArray = privateKey.sign(message)
check(publicKey.verify(message, signature)) // Valid message returns true
val invalidMessage = "invalid message".encodeToByteArray()
check(!publicKey.verify(invalidMessage, signature)) // Invalid message returns false
```
### Shared key calculation
```kotlin
val alicePrivate = Ed25519.generateKey(Random)
val alicePublic = alicePrivate.publicKey()
val bobPrivate = Ed25519.generateKey(Random)
val bobPublic = bobPrivate.publicKey()
val aliceShared = alicePrivate.sharedKey(bobPublic)
val bobShared = bobPrivate.sharedKey(alicePublic)
check(aliceShared.contentEquals(bobShared))
```