package jwt
import (
"crypto"
"crypto/ed25519"
"crypto/rand"
"errors"
)
var (
ErrEd25519Verification = errors .New ("ed25519: verification error" )
)
type SigningMethodEd25519 struct {}
var (
SigningMethodEdDSA *SigningMethodEd25519
)
func init () {
SigningMethodEdDSA = &SigningMethodEd25519 {}
RegisterSigningMethod (SigningMethodEdDSA .Alg (), func () SigningMethod {
return SigningMethodEdDSA
})
}
func (m *SigningMethodEd25519 ) Alg () string {
return "EdDSA"
}
func (m *SigningMethodEd25519 ) Verify (signingString string , sig []byte , key interface {}) error {
var ed25519Key ed25519 .PublicKey
var ok bool
if ed25519Key , ok = key .(ed25519 .PublicKey ); !ok {
return newError ("Ed25519 verify expects ed25519.PublicKey" , ErrInvalidKeyType )
}
if len (ed25519Key ) != ed25519 .PublicKeySize {
return ErrInvalidKey
}
if !ed25519 .Verify (ed25519Key , []byte (signingString ), sig ) {
return ErrEd25519Verification
}
return nil
}
func (m *SigningMethodEd25519 ) Sign (signingString string , key interface {}) ([]byte , error ) {
var ed25519Key crypto .Signer
var ok bool
if ed25519Key , ok = key .(crypto .Signer ); !ok {
return nil , newError ("Ed25519 sign expects crypto.Signer" , ErrInvalidKeyType )
}
if _ , ok := ed25519Key .Public ().(ed25519 .PublicKey ); !ok {
return nil , ErrInvalidKey
}
sig , err := ed25519Key .Sign (rand .Reader , []byte (signingString ), crypto .Hash (0 ))
if err != nil {
return nil , err
}
return sig , nil
}
The pages are generated with Golds v0.7.6 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .