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 }