github.com/zmap/zlint@v1.1.0/util/algorithm_identifier_test.go (about)

     1  package util
     2  
     3  import (
     4  	"encoding/asn1"
     5  	"encoding/base64"
     6  	"testing"
     7  )
     8  
     9  func TestCheckAlgorithmIDParamNotNULL(t *testing.T) {
    10  
    11  	testCases := []struct {
    12  		name      string
    13  		checkOID  asn1.ObjectIdentifier
    14  		algorithm string
    15  		errStr    string
    16  	}{
    17  		{
    18  			name:      "valid rsaEncryption",
    19  			checkOID:  OidRSAEncryption,
    20  			algorithm: "MA0GCSqGSIb3DQEBAQUA",
    21  			errStr:    "",
    22  		},
    23  		{
    24  			name:      "valid md2WithRSAEncryption",
    25  			checkOID:  OidMD2WithRSAEncryption,
    26  			algorithm: "MA0GCSqGSIb3DQEBAgUA",
    27  			errStr:    "",
    28  		},
    29  		{
    30  			name:      "valid md5WithRSAEncryption",
    31  			checkOID:  OidMD5WithRSAEncryption,
    32  			algorithm: "MA0GCSqGSIb3DQEBBAUA",
    33  			errStr:    "",
    34  		},
    35  		{
    36  			name:      "valid sha-1WithRSAEncryption",
    37  			checkOID:  OidSHA1WithRSAEncryption,
    38  			algorithm: "MA0GCSqGSIb3DQEBBQUA",
    39  			errStr:    "",
    40  		},
    41  		{
    42  			name:      "valid sha224WithRSAEncryption",
    43  			checkOID:  OidSHA224WithRSAEncryption,
    44  			algorithm: "MA0GCSqGSIb3DQEBDgUA",
    45  			errStr:    "",
    46  		},
    47  		{
    48  			name:      "valid sha256WithRSAEncryption",
    49  			checkOID:  OidSHA256WithRSAEncryption,
    50  			algorithm: "MA0GCSqGSIb3DQEBCwUA",
    51  			errStr:    "",
    52  		},
    53  		{
    54  			name:      "valid sha384WithRSAEncryption",
    55  			checkOID:  OidSHA384WithRSAEncryption,
    56  			algorithm: "MA0GCSqGSIb3DQEBDAUA",
    57  			errStr:    "",
    58  		},
    59  		{
    60  			name:      "valid sha512WithRSAEncryption",
    61  			checkOID:  OidSHA512WithRSAEncryption,
    62  			algorithm: "MA0GCSqGSIb3DQEBDQUA",
    63  			errStr:    "",
    64  		},
    65  
    66  		{
    67  			name:      "extra field in algorithm sequence",
    68  			checkOID:  OidRSAEncryption,
    69  			algorithm: "MA8GCSqGSIb3DQEBAQUAAgA=",
    70  			errStr:    "RSA algorithm identifier with trailing data",
    71  		},
    72  		{
    73  			name:      "missing NULL param",
    74  			checkOID:  OidRSAEncryption,
    75  			algorithm: "MAsGCSqGSIb3DQEBAQ==",
    76  			errStr:    "RSA algorithm identifier missing required NULL parameter",
    77  		},
    78  		{
    79  			name:      "NULL param containing data",
    80  			checkOID:  OidRSAEncryption,
    81  			algorithm: "MBQGCSqGSIb3DQEBAQUHTk9UTlVMTA==",
    82  			errStr:    "RSA algorithm identifier with NULL parameter containing data",
    83  		},
    84  		{
    85  			name:      "trailing data after NULL param",
    86  			checkOID:  OidRSAEncryption,
    87  			algorithm: "MBQGCSqGSIb3DQEBAQUATk9UTlVMTA==",
    88  			errStr:    "RSA algorithm identifier with trailing data",
    89  		},
    90  		{
    91  			name:      "context-specific 0 tag in param",
    92  			checkOID:  OidRSAEncryption,
    93  			algorithm: "MA0GCSqGSIb3DQEBAaAA",
    94  			errStr:    "RSA algorithm identifier with non-NULL parameter",
    95  		},
    96  		{
    97  			name:      "wrong algorithm oid",
    98  			algorithm: "MBQGCSqGSIb3DQEBAgUATk9UTlVMTA==",
    99  			errStr:    "error algorithmID to check is not RSA",
   100  		},
   101  		{
   102  			name:      "malformed algorithm sequence",
   103  			checkOID:  OidRSAEncryption,
   104  			algorithm: "MQ0GCSqGSIb3DQEBAQU",
   105  			errStr:    "error reading algorithm",
   106  		},
   107  		{
   108  			name:      "malformed OID",
   109  			checkOID:  OidRSAEncryption,
   110  			algorithm: "MBgTFDEuMi44NDAuMTEzNTQ5LjEuMS4xBQA=",
   111  			errStr:    "error reading algorithm OID",
   112  		},
   113  	}
   114  
   115  	for _, tc := range testCases {
   116  		t.Run(tc.name, func(t *testing.T) {
   117  			algoBytes, _ := base64.StdEncoding.DecodeString(tc.algorithm)
   118  
   119  			err := CheckAlgorithmIDParamNotNULL(algoBytes, tc.checkOID)
   120  			if err == nil {
   121  				if tc.errStr != "" {
   122  					t.Errorf("expected error %v was no error", tc.errStr)
   123  				}
   124  
   125  				return
   126  			}
   127  
   128  			if err.Error() != tc.errStr {
   129  				t.Errorf("expected error %q was %q", tc.errStr, err.Error())
   130  			}
   131  		})
   132  	}
   133  }