95 lines
2.1 KiB
Go
95 lines
2.1 KiB
Go
package hodu
|
|
|
|
import "bytes"
|
|
import "crypto/rand"
|
|
import "crypto/rsa"
|
|
import "testing"
|
|
import "time"
|
|
|
|
func TestRSAAESRoundTrip(t *testing.T) {
|
|
var key *rsa.PrivateKey
|
|
var codec *RSAAES
|
|
var input []byte
|
|
var doc string
|
|
var output []byte
|
|
var err error
|
|
|
|
key, err = rsa.GenerateKey(rand.Reader, 2048)
|
|
if err != nil {
|
|
t.Fatalf("failed to generate rsa key - %s", err.Error())
|
|
}
|
|
|
|
codec = NewRSAAES(key)
|
|
input = []byte("client-token-123")
|
|
|
|
doc, err = codec.Encipher(input)
|
|
if err != nil {
|
|
t.Fatalf("failed to encipher - %s", err.Error())
|
|
}
|
|
|
|
output, err = codec.Decipher(doc)
|
|
if err != nil {
|
|
t.Fatalf("failed to decipher - %s", err.Error())
|
|
}
|
|
|
|
if !bytes.Equal(output, input) {
|
|
t.Fatalf("unexpected plaintext %q", string(output))
|
|
}
|
|
}
|
|
|
|
func TestRSAAESInvalidDocument(t *testing.T) {
|
|
var key *rsa.PrivateKey
|
|
var codec *RSAAES
|
|
var err error
|
|
|
|
key, err = rsa.GenerateKey(rand.Reader, 2048)
|
|
if err != nil {
|
|
t.Fatalf("failed to generate rsa key - %s", err.Error())
|
|
}
|
|
|
|
codec = NewRSAAES(key)
|
|
_, err = codec.Decipher("broken")
|
|
if err == nil {
|
|
t.Fatal("expected decipher failure for invalid document")
|
|
}
|
|
}
|
|
|
|
func TestRSAAESTokenRoundTrip(t *testing.T) {
|
|
var key *rsa.PrivateKey
|
|
var codec *RSAAES
|
|
var issued_at time.Time
|
|
var expires_at time.Time
|
|
var doc string
|
|
var tok *RSAAESToken
|
|
var err error
|
|
|
|
key, err = rsa.GenerateKey(rand.Reader, 2048)
|
|
if err != nil {
|
|
t.Fatalf("failed to generate rsa key - %s", err.Error())
|
|
}
|
|
|
|
codec = NewRSAAES(key)
|
|
issued_at = time.Unix(1700000000, 0)
|
|
expires_at = issued_at.Add(30 * time.Second)
|
|
|
|
doc, err = codec.EncipherToken("client-token-xyz", issued_at, expires_at)
|
|
if err != nil {
|
|
t.Fatalf("failed to encipher token - %s", err.Error())
|
|
}
|
|
|
|
tok, err = codec.DecipherToken(doc, issued_at.Add(5 * time.Second))
|
|
if err != nil {
|
|
t.Fatalf("failed to decipher token - %s", err.Error())
|
|
}
|
|
|
|
if tok.Token != "client-token-xyz" {
|
|
t.Fatalf("unexpected token %q", tok.Token)
|
|
}
|
|
if !tok.IssuedAt.Equal(issued_at) {
|
|
t.Fatalf("unexpected issued-at %v", tok.IssuedAt)
|
|
}
|
|
if !tok.ExpiresAt.Equal(expires_at) {
|
|
t.Fatalf("unexpected expires-at %v", tok.ExpiresAt)
|
|
}
|
|
}
|