diff options
Diffstat (limited to 'lib/paseto/v2/example_public_mode_test.go')
| -rw-r--r-- | lib/paseto/v2/example_public_mode_test.go | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/lib/paseto/v2/example_public_mode_test.go b/lib/paseto/v2/example_public_mode_test.go new file mode 100644 index 00000000..0930aebf --- /dev/null +++ b/lib/paseto/v2/example_public_mode_test.go @@ -0,0 +1,97 @@ +// SPDX-License-Identifier: BSD-3-Clause +// SPDX-FileCopyrightText: 2020 M. Shulhan <ms@kilabit.info> + +package pasetov2 + +import ( + "crypto/ed25519" + "encoding/hex" + "fmt" + "log" +) + +func ExamplePublicMode() { + subjectMessage := "message" + + senderSK, _ := hex.DecodeString("e9ae9c7eae2fce6fd6727b5ca8df0fbc0aa60a5ffb354d4fdee1729e4e1463688d2160a4dc71a9a697d6ad6424da3f9dd18a259cdd51b0ae2b521e998b82d36e") + senderPK, _ := hex.DecodeString("8d2160a4dc71a9a697d6ad6424da3f9dd18a259cdd51b0ae2b521e998b82d36e") + senderKey := Key{ + ID: "sender", + Private: ed25519.PrivateKey(senderSK), + Public: ed25519.PublicKey(senderPK), + AllowedSubjects: map[string]struct{}{ + subjectMessage: struct{}{}, + }, + } + + receiverSK, _ := hex.DecodeString("4983da648bff1fd3e1892df9c56370215aa640829a5cab02d6616b115fa0bc5707c22e74ab9b181f8d87bdf03cf88476ec4c35e5517e173f236592f6695d59f5") + receiverPK, _ := hex.DecodeString("07c22e74ab9b181f8d87bdf03cf88476ec4c35e5517e173f236592f6695d59f5") + receiverKey := Key{ + ID: "receiver", + Private: ed25519.PrivateKey(receiverSK), + Public: ed25519.PublicKey(receiverPK), + } + + // + // In the sender part, we register the sender key and the public key + // of receiver in the list of peers. + // + sender, err := NewPublicMode(senderKey) + if err != nil { + log.Fatal(err) + } + + err = sender.AddPeer(receiverKey) + if err != nil { + log.Fatal(err) + } + + footer := map[string]any{ + "FOOTER": "HERE", + } + token, err := sender.Pack(receiverKey.ID, subjectMessage, []byte("hello receiver"), footer) + if err != nil { + log.Fatal(err) + } + invalidToken, err := sender.Pack(receiverKey.ID, "unknown-subject", []byte("hello receiver"), footer) + if err != nil { + log.Fatal(err) + } + + // token generated by sender and send to receiver + // ... + + // + // In the receiver part, we register the receiver key and the public key + // of sender in the list of peers. + // + receiver, err := NewPublicMode(receiverKey) + if err != nil { + log.Fatal(err) + } + + err = receiver.AddPeer(senderKey) + if err != nil { + log.Fatal(err) + } + + // receiver receive the token from sender and unpack it ... + got, err := receiver.Unpack(token) + if err != nil { + log.Fatal(err) + } + + fmt.Printf("Received data: %s\n", got.Data) + fmt.Printf("Received footer: %+v\n", got.Footer) + + // receiver receive invalid token from sender and unpack it ... + got, err = receiver.Unpack(invalidToken) + if err != nil { + fmt.Println(err) + } + + // Output: + // Received data: hello receiver + // Received footer: {Data:map[FOOTER:HERE] KID:sender} + // token subject "unknown-subject" is not allowed for key "sender" +} |
