github.com/bigzoro/my_simplechain@v0.0.0-20240315012955-8ad0a2a29bb9/core/access_contoller/cert.go (about) 1 package access_contoller 2 3 import ( 4 "crypto/x509/pkix" 5 "encoding/asn1" 6 "github.com/bigzoro/my_simplechain/core/access_contoller/crypto" 7 "github.com/bigzoro/my_simplechain/core/access_contoller/crypto/hash" 8 bcx509 "github.com/bigzoro/my_simplechain/core/access_contoller/crypto/x509" 9 ) 10 11 type subjectPublicKeyInfo struct { 12 Algorithm pkix.AlgorithmIdentifier 13 SubjectPublicKey asn1.BitString 14 } 15 16 func ComputeSKI(hashType crypto.HashType, pub interface{}) ([]byte, error) { 17 encodedPub, err := bcx509.MarshalPKIXPublicKey(pub) 18 if err != nil { 19 return nil, err 20 } 21 22 var subPKI subjectPublicKeyInfo 23 _, err = asn1.Unmarshal(encodedPub, &subPKI) 24 if err != nil { 25 return nil, err 26 } 27 28 pubHash, err := hash.Get(hashType, subPKI.SubjectPublicKey.Bytes) 29 if err != nil { 30 return nil, err 31 } 32 33 return pubHash[:], nil 34 }