This commit is contained in:
Jack Robison 2017-11-27 10:22:04 -05:00
parent 4cff2dd233
commit 2fcc2f106e
No known key found for this signature in database
GPG key ID: 284699E7404E3CFF
2 changed files with 36 additions and 36 deletions

View file

@ -1,43 +1,43 @@
package claim package claim
import ( import (
"../pb"
"encoding/hex"
"errors" "errors"
"github.com/golang/protobuf/proto" "github.com/golang/protobuf/proto"
"encoding/hex"
"../pb"
) )
func (claim *ClaimHelper) Serialized() ([]byte, error) { func (c *ClaimHelper) Serialized() ([]byte, error) {
serialized := claim.String() serialized := c.String()
if serialized == "" { if serialized == "" {
return nil, errors.New("not initialized") return nil, errors.New("not initialized")
} }
v := claim.GetVersion() v := c.GetVersion()
t := claim.GetClaimType() t := c.GetClaimType()
return proto.Marshal( return proto.Marshal(
&pb.Claim{ &pb.Claim{
Version: &v, Version: &v,
ClaimType: &t, ClaimType: &t,
Stream: claim.GetStream(), Stream: c.GetStream(),
Certificate: claim.GetCertificate(), Certificate: c.GetCertificate(),
PublisherSignature: claim.GetPublisherSignature()}) PublisherSignature: c.GetPublisherSignature()})
} }
func (claim *ClaimHelper) GetProtobuf() (*pb.Claim) { func (c *ClaimHelper) GetProtobuf() *pb.Claim {
v := claim.GetVersion() v := c.GetVersion()
t := claim.GetClaimType() t := c.GetClaimType()
return &pb.Claim{ return &pb.Claim{
Version: &v, Version: &v,
ClaimType: &t, ClaimType: &t,
Stream: claim.GetStream(), Stream: c.GetStream(),
Certificate: claim.GetCertificate(), Certificate: c.GetCertificate(),
PublisherSignature: claim.GetPublisherSignature()} PublisherSignature: c.GetPublisherSignature()}
} }
func (claim *ClaimHelper) SerializedHexString() (string, error) { func (c *ClaimHelper) SerializedHexString() (string, error) {
serialized, err := claim.Serialized() serialized, err := c.Serialized()
if err != nil { if err != nil {
return "", err return "", err
} }
@ -45,19 +45,19 @@ func (claim *ClaimHelper) SerializedHexString() (string, error) {
return serialized_hex, nil return serialized_hex, nil
} }
func (claim *ClaimHelper) SerializedNoSignature() ([]byte, error) { func (c *ClaimHelper) SerializedNoSignature() ([]byte, error) {
if claim.String() == "" { if c.String() == "" {
return nil, errors.New("not initialized") return nil, errors.New("not initialized")
} }
if claim.GetPublisherSignature() == nil { if c.GetPublisherSignature() == nil {
serialized, err := claim.Serialized() serialized, err := c.Serialized()
if err != nil { if err != nil {
return nil, err return nil, err
} }
return serialized, nil return serialized, nil
} else { } else {
clone := &pb.Claim{} clone := &pb.Claim{}
proto.Merge(clone, claim.GetProtobuf()) proto.Merge(clone, c.GetProtobuf())
proto.ClearAllExtensions(clone.PublisherSignature) proto.ClearAllExtensions(clone.PublisherSignature)
clone.PublisherSignature = nil clone.PublisherSignature = nil
return proto.Marshal(clone) return proto.Marshal(clone)

View file

@ -35,8 +35,8 @@ func GetClaimSignatureDigest(claimAddress [25]byte, certificateId [20]byte, seri
return [32]byte(digest) return [32]byte(digest)
} }
func (claim *ClaimHelper) GetCertificatePublicKey() (*btcec.PublicKey, error) { func (c *ClaimHelper) GetCertificatePublicKey() (*btcec.PublicKey, error) {
derBytes := claim.GetCertificate().GetPublicKey() derBytes := c.GetCertificate().GetPublicKey()
pub := publicKeyInfo{} pub := publicKeyInfo{}
asn1.Unmarshal(derBytes, &pub) asn1.Unmarshal(derBytes, &pub)
pubkey_bytes := []byte(pub.PublicKey.Bytes) pubkey_bytes := []byte(pub.PublicKey.Bytes)
@ -47,13 +47,13 @@ func (claim *ClaimHelper) GetCertificatePublicKey() (*btcec.PublicKey, error) {
return p, err return p, err
} }
func (claim *ClaimHelper) VerifyDigest(certificate *ClaimHelper, signature [64]byte, digest [32]byte) bool { func (c *ClaimHelper) VerifyDigest(certificate *ClaimHelper, signature [64]byte, digest [32]byte) bool {
public_key, err := certificate.GetCertificatePublicKey() public_key, err := certificate.GetCertificatePublicKey()
if err != nil { if err != nil {
return false return false
} }
if claim.PublisherSignature.SignatureType.String() == SECP256k1 { if c.PublisherSignature.SignatureType.String() == SECP256k1 {
R := &big.Int{} R := &big.Int{}
S := &big.Int{} S := &big.Int{}
R.SetBytes(signature[0:32]) R.SetBytes(signature[0:32])
@ -63,8 +63,8 @@ func (claim *ClaimHelper) VerifyDigest(certificate *ClaimHelper, signature [64]b
return false return false
} }
func (claim *ClaimHelper) ValidateClaimSignatureBytes(certificate *ClaimHelper, claimAddress [25]byte, certificateId [20]byte, blockchainName string) (bool, error) { func (c *ClaimHelper) ValidateClaimSignatureBytes(certificate *ClaimHelper, claimAddress [25]byte, certificateId [20]byte, blockchainName string) (bool, error) {
signature := claim.GetPublisherSignature() signature := c.GetPublisherSignature()
if signature == nil { if signature == nil {
return false, errors.New("claim does not have a signature") return false, errors.New("claim does not have a signature")
} }
@ -79,16 +79,16 @@ func (claim *ClaimHelper) ValidateClaimSignatureBytes(certificate *ClaimHelper,
return false, errors.New("invalid address") return false, errors.New("invalid address")
} }
serializedNoSig, err := claim.SerializedNoSignature() serializedNoSig, err := c.SerializedNoSignature()
if err != nil { if err != nil {
return false, errors.New("serialization error") return false, errors.New("serialization error")
} }
claimDigest := GetClaimSignatureDigest(claimAddress, certificateId, serializedNoSig) claimDigest := GetClaimSignatureDigest(claimAddress, certificateId, serializedNoSig)
return claim.VerifyDigest(certificate, signatureBytes, claimDigest), nil return c.VerifyDigest(certificate, signatureBytes, claimDigest), nil
} }
func (claim *ClaimHelper) ValidateClaimSignature(certificate *ClaimHelper, claimAddress string, certificateId string, blockchainName string) (bool, error) { func (c *ClaimHelper) ValidateClaimSignature(certificate *ClaimHelper, claimAddress string, certificateId string, blockchainName string) (bool, error) {
addressBytes, err := address.DecodeAddress(claimAddress, blockchainName) addressBytes, err := address.DecodeAddress(claimAddress, blockchainName)
if err != nil { if err != nil {
return false, err return false, err
@ -101,5 +101,5 @@ func (claim *ClaimHelper) ValidateClaimSignature(certificate *ClaimHelper, claim
for i := range certificateIdBytes { for i := range certificateIdBytes {
certificateIdBytes[i] = certificateIdSlice[i] certificateIdBytes[i] = certificateIdSlice[i]
} }
return claim.ValidateClaimSignatureBytes(certificate, addressBytes, certificateIdBytes, blockchainName) return c.ValidateClaimSignatureBytes(certificate, addressBytes, certificateIdBytes, blockchainName)
} }