Files
hodu/rsa_aes_test.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)
}
}