Browse Source

publish cert chain hash generation algorithm

Shelikhoo 4 years ago
parent
commit
34a3850f16
1 changed files with 15 additions and 10 deletions
  1. 15 10
      transport/internet/tls/config.go

+ 15 - 10
transport/internet/tls/config.go

@@ -175,16 +175,7 @@ func (c *Config) parseServerName() string {
 
 func (c *Config) verifyPeerCert(rawCerts [][]byte, verifiedChains [][]*x509.Certificate) error {
 	if c.PinnedPeerCertificateChainSha256 != nil {
-		var hashValue []byte
-		for _, certValue := range rawCerts {
-			out := sha256.Sum256(certValue)
-			if hashValue == nil {
-				hashValue = out[:]
-			} else {
-				newHashValue := sha256.Sum256(append(hashValue, out[:]...))
-				hashValue = newHashValue[:]
-			}
-		}
+		hashValue := GenerateCertChainHash(rawCerts)
 		for _, v := range c.PinnedPeerCertificateChainSha256 {
 			if hmac.Equal(hashValue, v) {
 				return nil
@@ -195,6 +186,20 @@ func (c *Config) verifyPeerCert(rawCerts [][]byte, verifiedChains [][]*x509.Cert
 	return nil
 }
 
+func GenerateCertChainHash(rawCerts [][]byte) []byte {
+	var hashValue []byte
+	for _, certValue := range rawCerts {
+		out := sha256.Sum256(certValue)
+		if hashValue == nil {
+			hashValue = out[:]
+		} else {
+			newHashValue := sha256.Sum256(append(hashValue, out[:]...))
+			hashValue = newHashValue[:]
+		}
+	}
+	return hashValue
+}
+
 // GetTLSConfig converts this Config into tls.Config.
 func (c *Config) GetTLSConfig(opts ...Option) *tls.Config {
 	root, err := c.getCertPool()