//CreateAttributesMetadata create the AttributesMetadata from the original metadata func CreateAttributesMetadata(raw []byte, metadata []byte, preK0 []byte, attributeKeys []string) ([]byte, error) { cert, err := utils.DERToX509Certificate(raw) if err != nil { return nil, err } return CreateAttributesMetadataFromCert(cert, metadata, preK0, attributeKeys) }
//NewAttributesHandlerImpl creates a new AttributesHandlerImpl from a pb.ChaincodeSecurityContext object. func NewAttributesHandlerImpl(holder chaincodeHolder) (*AttributesHandlerImpl, error) { // Getting certificate certRaw, err := holder.GetCallerCertificate() if err != nil { return nil, err } if certRaw == nil { return nil, errors.New("The certificate can't be nil.") } var tcert *x509.Certificate tcert, err = utils.DERToX509Certificate(certRaw) if err != nil { return nil, err } keys := make(map[string][]byte) /* TODO: ##attributes-keys-pending This code have be redefined to avoid use of metadata field. //Getting Attributes Metadata from security context. var attrsMetadata *attributespb.AttributesMetadata var rawMetadata []byte rawMetadata, err = holder.GetCallerMetadata() if err != nil { return nil, err } if rawMetadata != nil { attrsMetadata, err = attributes.GetAttributesMetadata(rawMetadata) if err == nil { for _, entry := range attrsMetadata.Entries { keys[entry.AttributeName] = entry.AttributeKey } } }*/ cache := make(map[string][]byte) return &AttributesHandlerImpl{tcert, cache, keys, nil, false}, nil }