planet-nine-app / sessionless

A repo for the sessionless protocol
https://sessionless.org
MIT License
38 stars 10 forks source link

Sessionless - kotlin #24

Closed Galacticai closed 4 months ago

Galacticai commented 4 months ago

Sessionless in kotlin

Module:

src/kotlin/standalone/kotlin/

Example (Spring boot web mvc)

src/kotlin/example/spring/

Highlights:

Main focus:

Notice:

Almost all classes, objects, and functions are documented using comment docs which means that your IDE will show you the documentation while typing/hovering/etc...

vercel[bot] commented 4 months ago

@Galacticai is attempting to deploy a commit to the zach-planet-nine's projects Team on Vercel.

A member of the Team first needs to authorize it.

Galacticai commented 4 months ago

ISessionless:

classDiagram
  class ISessionless {
    +vault: IVault

    +generateUUID(): String
    +sign(message: String, key: PrivateKey): IMessageSignature
    +verify(signedMessage: SignedMessage): Boolean
    +associate(...signedMessages: SignedMessage): Boolean
  }

  class IWithKeyStore {
    @Override
    ^vault: IKeyStoreVault

    +generateKeys(access: KeyAccessInfo): KeyPair
    +generateKeysAsync(access: KeyAccessInfo): KeyPair
    +getKeys(): KeyPair
    +sign(message: String, access: KeyAccess): IMessageSignature
  }

  class IWithCustomVault {
    @Override
    ^vault: ICustomVault

    +generateKeys(): KeyPairHex
    +generateKeysAsync(): KeyPairHex
    +getKeys(): KeyPairHex
    +sign(message: String): IMessageSignature
  }

  ISessionless <-- IWithKeyStore
  ISessionless <-- IWithCustomVault

IVault:

classDiagram
  class IVault {
    +getDefault(keyStore: KeyStore): KeyStoreVault
  }
  class IKeyStoreVault {
    +keyStore: KeyStore

    +save(pair: KeyPair, access: KeyAccessInfo, certificate: Certificate)
    +get(access: KeyAccessInfo): KeyPair
  }
  class ICustomVault {
    +save(pair: KeyPairHex)
    +get(): KeyPairHex?
  }

  class KeyStoreVault {
    +save(pair: KeyPair, access: KeyAccessInfo)
    +constructor(keyStore: KeyStore)
  }

  IVault <-- IKeyStoreVault
  IVault <-- ICustomVault
  IKeyStoreVault <-- KeyStoreVault

The rest:

MessageSignature:

classDiagram
  class IMessageSignature { }
  class MessageSignatureInt {
    +r: BigInteger
    +s: BigInteger
    +constructor(r: BigInteger, s: BigInteger)
    +constructor(ints: Array<BigInteger>)
    +toHex(): MessageSignatureHex
  }
  class MessageSignatureHex {
    +rHex: String
    +sHex: String
    +constructor(rHex: String, sHex: String)
    +toInt(): MessageSignatureInt
  }

  IMessageSignature <-- MessageSignatureInt
  IMessageSignature <-- MessageSignatureHex

More...

classDiagram
  class SignedMessage {
    +message: String
    +signature: MessageSignatureHex
    +publicKey: String
    +constructor(..all..)
  }

  class KeyPairHex {
    +privateKey: String
    +publicKey: String
    +constructor(..all..)
  }

  class KeyAccessInfo {
    +alias: String
    +password: CharArray?
    +constructor(..all..)
    +constructor(alias: String, password: String)
  }