47 lines
874 B
Go
47 lines
874 B
Go
/*
|
|
Copyright IBM Corp. All Rights Reserved.
|
|
|
|
SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
package comm
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/hyperledger/fabric/common/util"
|
|
"google.golang.org/grpc/credentials"
|
|
"google.golang.org/grpc/peer"
|
|
)
|
|
|
|
func certHashFromRawCert(rawCert []byte) []byte {
|
|
if len(rawCert) == 0 {
|
|
return nil
|
|
}
|
|
return util.ComputeSHA256(rawCert)
|
|
}
|
|
|
|
// ExtractCertificateHash extracts the hash of the certificate from the stream
|
|
func extractCertificateHashFromContext(ctx context.Context) []byte {
|
|
pr, extracted := peer.FromContext(ctx)
|
|
if !extracted {
|
|
return nil
|
|
}
|
|
|
|
authInfo := pr.AuthInfo
|
|
if authInfo == nil {
|
|
return nil
|
|
}
|
|
|
|
tlsInfo, isTLSConn := authInfo.(credentials.TLSInfo)
|
|
if !isTLSConn {
|
|
return nil
|
|
}
|
|
certs := tlsInfo.State.PeerCertificates
|
|
if len(certs) == 0 {
|
|
return nil
|
|
}
|
|
raw := certs[0].Raw
|
|
return certHashFromRawCert(raw)
|
|
}
|