blob: 07baf2d75fc3006b931d7219224bc2247834dd98 [file] [log] [blame]
Ryan Brownfed691e2014-09-15 13:09:40 -07001package agent_test
2
3import (
4 "crypto/ecdsa"
5 "crypto/elliptic"
6 "crypto/rand"
7 "os"
8 "reflect"
9 "testing"
Jiri Simsa519c5072014-09-17 21:37:57 -070010 "veyron.io/veyron/veyron/security/agent"
11 "veyron.io/veyron/veyron/security/agent/server"
12 "veyron.io/veyron/veyron2"
13 "veyron.io/veyron/veyron2/rt"
14 "veyron.io/veyron/veyron2/security"
Ryan Brownfed691e2014-09-15 13:09:40 -070015)
16
17type fakesigner struct {
18 key security.PublicKey
19}
20
21type testdata struct {
22 server_conn os.File
23 agent security.Signer
24 signer fakesigner
25}
26
27func setup() *testdata {
28 runtime := rt.Init()
29 result := &testdata{signer: newFakeSigner()}
30 sock, err := server.RunAnonymousAgent(runtime, result.signer)
31 if err != nil {
32 panic(err)
33 }
34 defer sock.Close()
35 client, err := runtime.NewClient(veyron2.VCSecurityNone)
36 if err != nil {
37 panic(err)
38 }
39 if agent, err := agent.NewAgentSigner(client, agent.CreateAgentEndpoint(int(sock.Fd())), runtime.NewContext()); err == nil {
40 result.agent = agent
41 return result
42 } else {
43 panic(err)
44 }
45}
46
47func TestSignature(t *testing.T) {
48 td := setup()
49 sig, err := td.agent.Sign(nil, []byte("abc"))
50
51 if err != nil {
52 t.Error(err)
53 }
54 expected := security.Signature{R: []byte{6}, S: []byte{7}}
55 if !reflect.DeepEqual(sig, expected) {
56 t.Errorf("Bad signature. Got\n%#v\nExpected:\n%#v", sig, expected)
57 }
58}
59
60func TestPublicKey(t *testing.T) {
61 td := setup()
62 expected_key := td.signer.PublicKey()
63 agent_key := td.agent.PublicKey()
64 if !reflect.DeepEqual(expected_key, agent_key) {
65 t.Errorf("Different keys: %v, %v", expected_key, agent_key)
66 }
67}
68
69func newFakeSigner() fakesigner {
70 key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader)
71 if err != nil {
72 panic(err)
73 }
74 return fakesigner{security.NewECDSAPublicKey(&key.PublicKey)}
75}
76
77func (fakesigner) Sign(message []byte) (security.Signature, error) {
78 var sig security.Signature
79 sig.R, sig.S = []byte{6}, []byte{7}
80 return sig, nil
81}
82
83func (s fakesigner) PublicKey() security.PublicKey {
84 return s.key
85}