12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364 |
- package jwt
-
- import (
- "crypto"
- "crypto/ed25519"
- "crypto/x509"
- "encoding/pem"
- "errors"
- )
-
- var (
- ErrNotEdPrivateKey = errors.New("Key is not a valid Ed25519 private key")
- ErrNotEdPublicKey = errors.New("Key is not a valid Ed25519 public key")
- )
-
- // Parse PEM-encoded Edwards curve private key
- func ParseEdPrivateKeyFromPEM(key []byte) (crypto.PrivateKey, error) {
- var err error
-
- // Parse PEM block
- var block *pem.Block
- if block, _ = pem.Decode(key); block == nil {
- return nil, ErrKeyMustBePEMEncoded
- }
-
- // Parse the key
- var parsedKey interface{}
- if parsedKey, err = x509.ParsePKCS8PrivateKey(block.Bytes); err != nil {
- return nil, err
- }
-
- var pkey ed25519.PrivateKey
- var ok bool
- if pkey, ok = parsedKey.(ed25519.PrivateKey); !ok {
- return nil, ErrNotEdPrivateKey
- }
-
- return pkey, nil
- }
-
- // Parse PEM-encoded Edwards curve public key
- func ParseEdPublicKeyFromPEM(key []byte) (crypto.PublicKey, error) {
- var err error
-
- // Parse PEM block
- var block *pem.Block
- if block, _ = pem.Decode(key); block == nil {
- return nil, ErrKeyMustBePEMEncoded
- }
-
- // Parse the key
- var parsedKey interface{}
- if parsedKey, err = x509.ParsePKIXPublicKey(block.Bytes); err != nil {
- return nil, err
- }
-
- var pkey ed25519.PublicKey
- var ok bool
- if pkey, ok = parsedKey.(ed25519.PublicKey); !ok {
- return nil, ErrNotEdPublicKey
- }
-
- return pkey, nil
- }
|