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  }