...

Source file src/github.com/golang-jwt/jwt/v4/ed25519_test.go

Documentation: github.com/golang-jwt/jwt/v4

     1  package jwt_test
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  	"testing"
     7  
     8  	"github.com/golang-jwt/jwt/v4"
     9  )
    10  
    11  var ed25519TestData = []struct {
    12  	name        string
    13  	keys        map[string]string
    14  	tokenString string
    15  	alg         string
    16  	claims      map[string]interface{}
    17  	valid       bool
    18  }{
    19  	{
    20  		"Basic Ed25519",
    21  		map[string]string{"private": "test/ed25519-private.pem", "public": "test/ed25519-public.pem"},
    22  		"eyJhbGciOiJFRDI1NTE5IiwidHlwIjoiSldUIn0.eyJmb28iOiJiYXIifQ.ESuVzZq1cECrt9Od_gLPVG-_6uRP_8Nq-ajx6CtmlDqRJZqdejro2ilkqaQgSL-siE_3JMTUW7UwAorLaTyFCw",
    23  		"EdDSA",
    24  		map[string]interface{}{"foo": "bar"},
    25  		true,
    26  	},
    27  	{
    28  		"Basic Ed25519",
    29  		map[string]string{"private": "test/ed25519-private.pem", "public": "test/ed25519-public.pem"},
    30  		"eyJhbGciOiJFRDI1NTE5IiwidHlwIjoiSldUIn0.eyJmb28iOiJiYXoifQ.ESuVzZq1cECrt9Od_gLPVG-_6uRP_8Nq-ajx6CtmlDqRJZqdejro2ilkqaQgSL-siE_3JMTUW7UwAorLaTyFCw",
    31  		"EdDSA",
    32  		map[string]interface{}{"foo": "bar"},
    33  		false,
    34  	},
    35  }
    36  
    37  func TestEd25519Verify(t *testing.T) {
    38  	for _, data := range ed25519TestData {
    39  		var err error
    40  
    41  		key, _ := os.ReadFile(data.keys["public"])
    42  
    43  		ed25519Key, err := jwt.ParseEdPublicKeyFromPEM(key)
    44  		if err != nil {
    45  			t.Errorf("Unable to parse Ed25519 public key: %v", err)
    46  		}
    47  
    48  		parts := strings.Split(data.tokenString, ".")
    49  
    50  		method := jwt.GetSigningMethod(data.alg)
    51  
    52  		err = method.Verify(strings.Join(parts[0:2], "."), parts[2], ed25519Key)
    53  		if data.valid && err != nil {
    54  			t.Errorf("[%v] Error while verifying key: %v", data.name, err)
    55  		}
    56  		if !data.valid && err == nil {
    57  			t.Errorf("[%v] Invalid key passed validation", data.name)
    58  		}
    59  	}
    60  }
    61  
    62  func TestEd25519Sign(t *testing.T) {
    63  	for _, data := range ed25519TestData {
    64  		var err error
    65  		key, _ := os.ReadFile(data.keys["private"])
    66  
    67  		ed25519Key, err := jwt.ParseEdPrivateKeyFromPEM(key)
    68  		if err != nil {
    69  			t.Errorf("Unable to parse Ed25519 private key: %v", err)
    70  		}
    71  
    72  		parts := strings.Split(data.tokenString, ".")
    73  
    74  		method := jwt.GetSigningMethod(data.alg)
    75  
    76  		sig, err := method.Sign(strings.Join(parts[0:2], "."), ed25519Key)
    77  		if err != nil {
    78  			t.Errorf("[%v] Error signing token: %v", data.name, err)
    79  		}
    80  		if sig == parts[2] && !data.valid {
    81  			t.Errorf("[%v] Identical signatures\nbefore:\n%v\nafter:\n%v", data.name, parts[2], sig)
    82  		}
    83  	}
    84  }
    85  

View as plain text