brokeyourbike/providusbank-api-client-go

View on GitHub
signature/signature.go

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
package signature

import (
    "context"
    "crypto/sha512"
    "fmt"
)

type Generator interface {
    // Generate, generates a new signature.
    Generate(ctx context.Context) string
}

type Verifier interface {
    // Verify verifies the given message against signature.
    Verify(ctx context.Context, message string) bool
}

type signer struct {
    token  string
    secret string
}

func NewSigner(token, secret string) *signer {
    return &signer{token: token, secret: secret}
}

func (s *signer) Generate(ctx context.Context) string {
    signature := sha512.Sum512([]byte(fmt.Sprintf("%s:%s", s.token, s.secret)))
    return fmt.Sprintf("%x", signature)
}

func (s *signer) Verify(ctx context.Context, message string) bool {
    return message == s.Generate(ctx)
}