...

Source file src/github.com/google/certificate-transparency-go/logid/logid_test.go

Documentation: github.com/google/certificate-transparency-go/logid

     1  // Copyright 2017 Google LLC. All Rights Reserved.
     2  //
     3  // Licensed under the Apache License, Version 2.0 (the "License");
     4  // you may not use this file except in compliance with the License.
     5  // You may obtain a copy of the License at
     6  //
     7  //     http://www.apache.org/licenses/LICENSE-2.0
     8  //
     9  // Unless required by applicable law or agreed to in writing, software
    10  // distributed under the License is distributed on an "AS IS" BASIS,
    11  // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    12  // See the License for the specific language governing permissions and
    13  // limitations under the License.
    14  
    15  package logid
    16  
    17  import (
    18  	"crypto/sha256"
    19  	"encoding/base64"
    20  	"log"
    21  	"reflect"
    22  	"testing"
    23  )
    24  
    25  var (
    26  	wanted LogID = [32]byte{
    27  		'c', 't', 'l', 'o', 'g', '_', 'i', 'd', '_', 'f', 'o', 'r', '_', 't', 'e', 's',
    28  		't', 'i', 'n', 'g', '_', 'p', 'u', 'r', 'p', 'o', 's', 'e', 's', '!', '!', '1',
    29  	}
    30  )
    31  
    32  func toBytes(s string, l int) []byte {
    33  	bs := []byte(s)
    34  	if len(bs) != l {
    35  		log.Fatalf("string %q is %d bytes long, wanted length %d", s, len(bs), l)
    36  	}
    37  	return bs
    38  }
    39  
    40  func TestFromBytes(t *testing.T) {
    41  	tests := []struct {
    42  		in      string
    43  		size    int
    44  		want    *LogID
    45  		wantErr bool
    46  	}{
    47  		{"ctlog_id_for_testing_purposes!!1", sha256.Size, &wanted, false},
    48  		// "invalid CT LogID - expected 32 bytes but got 16"
    49  		{"ctlog_id_for_tes", 16, nil, true},
    50  		// "invalid CT LogID - expected 32 bytes but got 37"
    51  		{"ctlog_id_for_testing_purposes!!1extra", 37, nil, true},
    52  	}
    53  
    54  	for _, test := range tests {
    55  		got, err := FromBytes(toBytes(test.in, test.size))
    56  		if gotErr := err != nil; gotErr != test.wantErr {
    57  			t.Errorf("FromBytes(%q): got err? %t, want? %t (err=%v)", test.in, gotErr, test.wantErr, err)
    58  		}
    59  		if err == nil && !reflect.DeepEqual(&got, test.want) {
    60  			t.Errorf("FromBytes(%q): got %v, wanted %v", test.in, got, test.want)
    61  		}
    62  	}
    63  }
    64  
    65  func TestFromB64(t *testing.T) {
    66  	tests := []struct {
    67  		in      string
    68  		want    *LogID
    69  		wantErr bool
    70  	}{
    71  		{"Y3Rsb2dfaWRfZm9yX3Rlc3RpbmdfcHVycG9zZXMhITE=", &wanted, false},
    72  		// "illegal base64 data at input byte 4"
    73  		{"garbage", nil, true},
    74  		// "invalid CT LogID - expected 32 bytes but got 1"
    75  		{"ab==", nil, true},
    76  		// "invalid CT LogID - expected 32 bytes but got 36"
    77  		{"this+input+decodes+to+36+bytes+which+is+too+long", nil, true},
    78  	}
    79  
    80  	for _, test := range tests {
    81  		got, err := FromB64(test.in)
    82  		if gotErr := err != nil; gotErr != test.wantErr {
    83  			t.Errorf("FromB64(%q): got err? %t, want? %t (err=%v)", test.in, gotErr, test.wantErr, err)
    84  		}
    85  		if err == nil && !reflect.DeepEqual(&got, test.want) {
    86  			t.Errorf("FromB64(%q): got %v, wanted %v", test.in, got, test.want)
    87  		}
    88  	}
    89  }
    90  
    91  func TestFromPubKeyB64(t *testing.T) {
    92  	tests := []struct {
    93  		desc    string
    94  		b64     string
    95  		want    string
    96  		wantErr bool
    97  	}{
    98  		{
    99  			desc:    "not base64",
   100  			b64:     "Not valid b64",
   101  			want:    "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
   102  			wantErr: true,
   103  		},
   104  		{
   105  			desc:    "ECDSA",
   106  			b64:     "MFkwEwYHKoZIzj0CAQYIKoZIzj0DAQcDQgAEfahLEimAoz2t01p3uMziiLOl/fHTDM0YDOhBRuiBARsV4UvxG2LdNgoIGLrtCzWE0J5APC2em4JlvR8EEEFMoA==",
   107  			want:    "pLkJkLQYWBSHuxOizGdwCjw1mAT5G9+443fNDsgN3BA=",
   108  			wantErr: false,
   109  		},
   110  		{
   111  			desc:    "RSA",
   112  			b64:     "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAolpIHxdSlTXLo1s6H1OCdpSj/4DyHDc8wLG9wVmLqy1lk9fz4ATVmm+/1iN2Nk8jmctUKK2MFUtlWXZBSpym97M7frGlSaQXUWyA3CqQUEuIJOmlEjKTBEiQAvpfDjCHjlV2Be4qTM6jamkJbiWtgnYPhJL6ONaGTiSPm7Byy57iaz/hbckldSOIoRhYBiMzeNoA0DiRZ9KmfSeXZ1rB8y8X5urSW+iBzf2SaOfzBvDpcoTuAaWx2DPazoOl28fP1hZ+kHUYvxbcMjttjauCFx+JII0dmuZNIwjfeG/GBb9frpSX219k1O4Wi6OEbHEr8at/XQ0y7gTikOxBn/s5wQIDAQAB",
   113  			want:    "rDua7X+pZ0dXFZ5tfVdWcvnZgQCUHpve/+yhMTt1eC0=",
   114  			wantErr: false,
   115  		},
   116  	}
   117  
   118  	for _, test := range tests {
   119  		logID, err := FromPubKeyB64(test.b64)
   120  		if gotErr := err != nil; gotErr != test.wantErr {
   121  			t.Errorf("%s: got? %t want? %t (err=%v)", test.desc, gotErr, test.wantErr, err)
   122  			continue
   123  		}
   124  		if got := base64.StdEncoding.EncodeToString(logID.Bytes()); got != test.want {
   125  			t.Errorf("%s: got? %s want? %s", test.desc, got, test.want)
   126  		}
   127  	}
   128  }
   129  

View as plain text