Skip to content

Improve API surface usability #32

@cromefire

Description

@cromefire

The current API seems to be very verbose at the moment as it seems to just be the generated protobufs. I in particular am using Kotlin so I can work around it, but it's not that great either:

val keyAttributes = PsaKeyAttributes.KeyAttributes.newBuilder().apply {
    keyType = PsaKeyAttributes.KeyType.newBuilder().apply {
        eccKeyPair = PsaKeyAttributes.KeyType.EccKeyPair.newBuilder().apply {
            curveFamily = PsaKeyAttributes.KeyType.EccFamily.SECP_R1
        }.build()
    }.build()
    keyPolicy = PsaKeyAttributes.KeyPolicy.newBuilder().apply {
        keyUsageFlags = PsaKeyAttributes.UsageFlags.newBuilder().apply {
            signHash = true
            signMessage = true
            verifyHash = true
            verifyMessage = true
        }.build()
        keyAlgorithm = PsaAlgorithm.Algorithm.newBuilder().apply {
            hash = PsaAlgorithm.Algorithm.Hash.SHA_256
            asymmetricSignature = PsaAlgorithm.Algorithm.AsymmetricSignature.newBuilder().apply {
                ecdsa = PsaAlgorithm.Algorithm.AsymmetricSignature.Ecdsa.newBuilder().apply {
                    hashAlg = PsaAlgorithm.Algorithm.AsymmetricSignature.SignHash.newBuilder().apply {
                        specific = PsaAlgorithm.Algorithm.Hash.SHA_256
                    }.build()
                }.build()
            }.build()
        }.build()
    }.build()
}.build()

A few options would include:

  • Generating optional kotlin protobuf extensions (though this only helps kotlin users)
  • Adding some helpful constants (like I believe the rust client has)
  • Add new, more usable classes that are more adapted to the JVM with easier-to-use builders and such

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions