package libp2pwebrtc
import (
"crypto"
"crypto/x509"
"errors"
ma "github.com/multiformats/go-multiaddr"
"github.com/multiformats/go-multibase"
mh "github.com/multiformats/go-multihash"
"github.com/pion/webrtc/v4"
)
var errHashUnavailable = errors .New ("fingerprint: hash algorithm is not linked into the binary" )
func parseFingerprint(cert *x509 .Certificate , algo crypto .Hash ) ([]byte , error ) {
if !algo .Available () {
return nil , errHashUnavailable
}
h := algo .New ()
h .Write (cert .Raw )
return h .Sum (nil ), nil
}
func decodeRemoteFingerprint(maddr ma .Multiaddr ) (*mh .DecodedMultihash , error ) {
remoteFingerprintMultibase , err := maddr .ValueForProtocol (ma .P_CERTHASH )
if err != nil {
return nil , err
}
_ , data , err := multibase .Decode (remoteFingerprintMultibase )
if err != nil {
return nil , err
}
return mh .Decode (data )
}
func encodeDTLSFingerprint(fp webrtc .DTLSFingerprint ) (string , error ) {
digest , err := decodeInterspersedHexFromASCIIString (fp .Value )
if err != nil {
return "" , err
}
encoded , err := mh .Encode (digest , mh .SHA2_256 )
if err != nil {
return "" , err
}
return multibase .Encode (multibase .Base64url , encoded )
}
The pages are generated with Golds v0.8.2 . (GOOS=linux GOARCH=amd64)
Golds is a Go 101 project developed by Tapir Liu .
PR and bug reports are welcome and can be submitted to the issue list .
Please follow @zigo_101 (reachable from the left QR code) to get the latest news of Golds .