Ryan Brown | fed691e | 2014-09-15 13:09:40 -0700 | [diff] [blame] | 1 | package agent_test |
| 2 | |
| 3 | import ( |
| 4 | "crypto/ecdsa" |
| 5 | "crypto/elliptic" |
| 6 | "crypto/rand" |
| 7 | "os" |
| 8 | "reflect" |
| 9 | "testing" |
Jiri Simsa | 519c507 | 2014-09-17 21:37:57 -0700 | [diff] [blame] | 10 | "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 Brown | fed691e | 2014-09-15 13:09:40 -0700 | [diff] [blame] | 15 | ) |
| 16 | |
| 17 | type fakesigner struct { |
| 18 | key security.PublicKey |
| 19 | } |
| 20 | |
| 21 | type testdata struct { |
| 22 | server_conn os.File |
| 23 | agent security.Signer |
| 24 | signer fakesigner |
| 25 | } |
| 26 | |
| 27 | func 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 | } |
Ryan Brown | 50b473a | 2014-09-23 14:23:00 -0700 | [diff] [blame] | 39 | if agent, err := agent.NewAgentSigner(client, int(sock.Fd()), runtime.NewContext()); err == nil { |
Ryan Brown | fed691e | 2014-09-15 13:09:40 -0700 | [diff] [blame] | 40 | result.agent = agent |
| 41 | return result |
| 42 | } else { |
| 43 | panic(err) |
| 44 | } |
| 45 | } |
| 46 | |
| 47 | func 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 | |
| 60 | func 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 | |
| 69 | func 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 | |
| 77 | func (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 | |
| 83 | func (s fakesigner) PublicKey() security.PublicKey { |
| 84 | return s.key |
| 85 | } |