File: algorithm_identifier_test.go

package info (click to toggle)
golang-github-zmap-zlint 3.6.2-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 10,008 kB
  • sloc: sh: 162; makefile: 38
file content (134 lines) | stat: -rw-r--r-- 3,392 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
package util

import (
	"encoding/base64"
	"testing"

	"github.com/zmap/zcrypto/encoding/asn1"
)

func TestCheckAlgorithmIDParamNotNULL(t *testing.T) {

	testCases := []struct {
		name      string
		checkOID  asn1.ObjectIdentifier
		algorithm string
		errStr    string
	}{
		{
			name:      "valid rsaEncryption",
			checkOID:  OidRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBAQUA",
			errStr:    "",
		},
		{
			name:      "valid md2WithRSAEncryption",
			checkOID:  OidMD2WithRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBAgUA",
			errStr:    "",
		},
		{
			name:      "valid md5WithRSAEncryption",
			checkOID:  OidMD5WithRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBBAUA",
			errStr:    "",
		},
		{
			name:      "valid sha-1WithRSAEncryption",
			checkOID:  OidSHA1WithRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBBQUA",
			errStr:    "",
		},
		{
			name:      "valid sha224WithRSAEncryption",
			checkOID:  OidSHA224WithRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBDgUA",
			errStr:    "",
		},
		{
			name:      "valid sha256WithRSAEncryption",
			checkOID:  OidSHA256WithRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBCwUA",
			errStr:    "",
		},
		{
			name:      "valid sha384WithRSAEncryption",
			checkOID:  OidSHA384WithRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBDAUA",
			errStr:    "",
		},
		{
			name:      "valid sha512WithRSAEncryption",
			checkOID:  OidSHA512WithRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBDQUA",
			errStr:    "",
		},

		{
			name:      "extra field in algorithm sequence",
			checkOID:  OidRSAEncryption,
			algorithm: "MA8GCSqGSIb3DQEBAQUAAgA=",
			errStr:    "RSA algorithm identifier with trailing data",
		},
		{
			name:      "missing NULL param",
			checkOID:  OidRSAEncryption,
			algorithm: "MAsGCSqGSIb3DQEBAQ==",
			errStr:    "RSA algorithm identifier missing required NULL parameter",
		},
		{
			name:      "NULL param containing data",
			checkOID:  OidRSAEncryption,
			algorithm: "MBQGCSqGSIb3DQEBAQUHTk9UTlVMTA==",
			errStr:    "RSA algorithm identifier with NULL parameter containing data",
		},
		{
			name:      "trailing data after NULL param",
			checkOID:  OidRSAEncryption,
			algorithm: "MBQGCSqGSIb3DQEBAQUATk9UTlVMTA==",
			errStr:    "RSA algorithm identifier with trailing data",
		},
		{
			name:      "context-specific 0 tag in param",
			checkOID:  OidRSAEncryption,
			algorithm: "MA0GCSqGSIb3DQEBAaAA",
			errStr:    "RSA algorithm identifier with non-NULL parameter",
		},
		{
			name:      "wrong algorithm oid",
			algorithm: "MBQGCSqGSIb3DQEBAgUATk9UTlVMTA==",
			errStr:    "error algorithmID to check is not RSA",
		},
		{
			name:      "malformed algorithm sequence",
			checkOID:  OidRSAEncryption,
			algorithm: "MQ0GCSqGSIb3DQEBAQU",
			errStr:    "error reading algorithm",
		},
		{
			name:      "malformed OID",
			checkOID:  OidRSAEncryption,
			algorithm: "MBgTFDEuMi44NDAuMTEzNTQ5LjEuMS4xBQA=",
			errStr:    "error reading algorithm OID",
		},
	}

	for _, tc := range testCases {
		t.Run(tc.name, func(t *testing.T) {
			algoBytes, _ := base64.StdEncoding.DecodeString(tc.algorithm)

			err := CheckAlgorithmIDParamNotNULL(algoBytes, tc.checkOID)
			if err == nil {
				if tc.errStr != "" {
					t.Errorf("expected error %v was no error", tc.errStr)
				}

				return
			}

			if err.Error() != tc.errStr {
				t.Errorf("expected error %q was %q", tc.errStr, err.Error())
			}
		})
	}
}