Jiri Simsa | d7616c9 | 2015-03-24 23:44:30 -0700 | [diff] [blame] | 1 | // Copyright 2015 The Vanadium Authors. All rights reserved. |
| 2 | // Use of this source code is governed by a BSD-style |
| 3 | // license that can be found in the LICENSE file. |
| 4 | |
Tilak Sharma | d6ade0e | 2014-08-20 16:28:32 -0700 | [diff] [blame] | 5 | package security |
| 6 | |
| 7 | import ( |
| 8 | "bytes" |
Ankur | 021e38e | 2014-09-26 10:26:45 -0700 | [diff] [blame] | 9 | "crypto/ecdsa" |
| 10 | "crypto/elliptic" |
| 11 | "crypto/rand" |
Tilak Sharma | d6ade0e | 2014-08-20 16:28:32 -0700 | [diff] [blame] | 12 | "reflect" |
| 13 | "testing" |
Mike Burrows | 7f7088d | 2015-03-25 13:05:00 -0700 | [diff] [blame] | 14 | |
| 15 | "v.io/v23/verror" |
Tilak Sharma | d6ade0e | 2014-08-20 16:28:32 -0700 | [diff] [blame] | 16 | ) |
| 17 | |
Ankur | 021e38e | 2014-09-26 10:26:45 -0700 | [diff] [blame] | 18 | func TestLoadSavePEMKey(t *testing.T) { |
| 19 | key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) |
| 20 | if err != nil { |
| 21 | t.Fatalf("Failed ecdsa.GenerateKey: %v", err) |
| 22 | } |
| 23 | |
| 24 | var buf bytes.Buffer |
Ankur | 73e7a93 | 2014-10-24 15:57:03 -0700 | [diff] [blame] | 25 | if err := SavePEMKey(&buf, key, nil); err != nil { |
Ankur | 021e38e | 2014-09-26 10:26:45 -0700 | [diff] [blame] | 26 | t.Fatalf("Failed to save ECDSA private key: %v", err) |
| 27 | } |
| 28 | |
Ankur | 73e7a93 | 2014-10-24 15:57:03 -0700 | [diff] [blame] | 29 | loadedKey, err := LoadPEMKey(&buf, nil) |
Suharsh Sivakumar | 0f35904 | 2014-10-01 22:53:45 -0700 | [diff] [blame] | 30 | if !reflect.DeepEqual(loadedKey, key) { |
| 31 | t.Fatalf("Got key %v, but want %v", loadedKey, key) |
| 32 | } |
| 33 | } |
| 34 | |
Suharsh Sivakumar | aca1c32 | 2014-10-21 11:27:32 -0700 | [diff] [blame] | 35 | func TestLoadSavePEMKeyWithPassphrase(t *testing.T) { |
Suharsh Sivakumar | 0f35904 | 2014-10-01 22:53:45 -0700 | [diff] [blame] | 36 | pass := []byte("openSesame") |
Suharsh Sivakumar | aca1c32 | 2014-10-21 11:27:32 -0700 | [diff] [blame] | 37 | incorrect_pass := []byte("wrongPassphrase") |
Suharsh Sivakumar | 0f35904 | 2014-10-01 22:53:45 -0700 | [diff] [blame] | 38 | key, err := ecdsa.GenerateKey(elliptic.P256(), rand.Reader) |
| 39 | if err != nil { |
| 40 | t.Fatalf("Failed ecdsa.GenerateKey: %v", err) |
| 41 | } |
| 42 | var buf bytes.Buffer |
Suharsh Sivakumar | aca1c32 | 2014-10-21 11:27:32 -0700 | [diff] [blame] | 43 | |
| 44 | // Test incorrect passphrase. |
Ankur | 73e7a93 | 2014-10-24 15:57:03 -0700 | [diff] [blame] | 45 | if err := SavePEMKey(&buf, key, pass); err != nil { |
Suharsh Sivakumar | 0f35904 | 2014-10-01 22:53:45 -0700 | [diff] [blame] | 46 | t.Fatalf("Failed to save ECDSA private key: %v", err) |
| 47 | } |
Ankur | 73e7a93 | 2014-10-24 15:57:03 -0700 | [diff] [blame] | 48 | loadedKey, err := LoadPEMKey(&buf, incorrect_pass) |
Suharsh Sivakumar | 6ceb430 | 2014-10-23 15:33:17 -0700 | [diff] [blame] | 49 | if loadedKey != nil && err != nil { |
| 50 | t.Errorf("expected (nil, err != nil) received (%v,%v)", loadedKey, err) |
Suharsh Sivakumar | 0f35904 | 2014-10-01 22:53:45 -0700 | [diff] [blame] | 51 | } |
| 52 | |
| 53 | // Test correct password. |
Ankur | 73e7a93 | 2014-10-24 15:57:03 -0700 | [diff] [blame] | 54 | if err := SavePEMKey(&buf, key, pass); err != nil { |
Suharsh Sivakumar | 0f35904 | 2014-10-01 22:53:45 -0700 | [diff] [blame] | 55 | t.Fatalf("Failed to save ECDSA private key: %v", err) |
| 56 | } |
Ankur | 73e7a93 | 2014-10-24 15:57:03 -0700 | [diff] [blame] | 57 | loadedKey, err = LoadPEMKey(&buf, pass) |
Ankur | 021e38e | 2014-09-26 10:26:45 -0700 | [diff] [blame] | 58 | if !reflect.DeepEqual(loadedKey, key) { |
| 59 | t.Fatalf("Got key %v, but want %v", loadedKey, key) |
| 60 | } |
Suharsh Sivakumar | aca1c32 | 2014-10-21 11:27:32 -0700 | [diff] [blame] | 61 | |
| 62 | // Test nil passphrase. |
Ankur | 73e7a93 | 2014-10-24 15:57:03 -0700 | [diff] [blame] | 63 | if err := SavePEMKey(&buf, key, pass); err != nil { |
Suharsh Sivakumar | aca1c32 | 2014-10-21 11:27:32 -0700 | [diff] [blame] | 64 | t.Fatalf("Failed to save ECDSA private key: %v", err) |
| 65 | } |
Mike Burrows | 7f7088d | 2015-03-25 13:05:00 -0700 | [diff] [blame] | 66 | if loadedKey, err = LoadPEMKey(&buf, nil); loadedKey != nil || verror.ErrorID(err) != ErrBadPassphrase.ID { |
| 67 | t.Fatalf("expected(nil, ErrBadPassphrase), instead got (%v, %v)", loadedKey, err) |
Suharsh Sivakumar | aca1c32 | 2014-10-21 11:27:32 -0700 | [diff] [blame] | 68 | } |
Ankur | 021e38e | 2014-09-26 10:26:45 -0700 | [diff] [blame] | 69 | } |