@@ -4665,63 +4665,57 @@ func UnmarshalUniID(rpcID *unirpc.ID) (universe.Identifier, error) {
46654665 return universe.Identifier {}, fmt .Errorf ("unable to unmarshal " +
46664666 "proof type: %w" , err )
46674667 }
4668+
4669+ var (
4670+ assetIDBytes []byte
4671+ groupKeyBytes []byte
4672+ )
4673+
46684674 switch {
46694675 case rpcID .GetAssetId () != nil :
4670- rpcAssetID : = rpcID .GetAssetId ()
4671- if len (rpcAssetID ) != sha256 .Size {
4676+ assetIDBytes = rpcID .GetAssetId ()
4677+ if len (assetIDBytes ) != sha256 .Size {
46724678 return universe.Identifier {}, fmt .Errorf ("asset ID " +
46734679 "must be 32 bytes" )
46744680 }
46754681
4676- var assetID asset.ID
4677- copy (assetID [:], rpcAssetID )
4678-
4679- return universe.Identifier {
4680- AssetID : assetID ,
4681- ProofType : proofType ,
4682- }, nil
4683-
46844682 case rpcID .GetAssetIdStr () != "" :
46854683 rpcAssetIDStr := rpcID .GetAssetIdStr ()
46864684 if len (rpcAssetIDStr ) != sha256 .Size * 2 {
4687- return universe.Identifier {}, fmt .Errorf ("asset ID string " +
4688- "must be 64 bytes " )
4685+ return universe.Identifier {}, fmt .Errorf ("asset ID " +
4686+ "string must be 64 chars " )
46894687 }
46904688
4691- assetIDBytes , err : = hex .DecodeString (rpcAssetIDStr )
4689+ assetIDBytes , err = hex .DecodeString (rpcAssetIDStr )
46924690 if err != nil {
46934691 return universe.Identifier {}, err
46944692 }
46954693
4696- // TODO(roasbeef): reuse with above
4697-
4698- var assetID asset.ID
4699- copy (assetID [:], assetIDBytes )
4700-
4701- return universe.Identifier {
4702- AssetID : assetID ,
4703- ProofType : proofType ,
4704- }, nil
4705-
47064694 case rpcID .GetGroupKey () != nil :
4707- groupKey , err := parseUserKey (rpcID .GetGroupKey ())
4695+ groupKeyBytes = rpcID .GetGroupKey ()
4696+
4697+ case rpcID .GetGroupKeyStr () != "" :
4698+ rpcGroupKeyStr := rpcID .GetGroupKeyStr ()
4699+ groupKeyBytes , err = hex .DecodeString (rpcGroupKeyStr )
47084700 if err != nil {
47094701 return universe.Identifier {}, err
47104702 }
47114703
4704+ default :
4705+ return universe.Identifier {}, fmt .Errorf ("no id set" )
4706+ }
4707+
4708+ switch {
4709+ case len (assetIDBytes ) != 0 :
4710+ var assetID asset.ID
4711+ copy (assetID [:], assetIDBytes )
4712+
47124713 return universe.Identifier {
4713- GroupKey : groupKey ,
4714+ AssetID : assetID ,
47144715 ProofType : proofType ,
47154716 }, nil
47164717
4717- case rpcID .GetGroupKeyStr () != "" :
4718- groupKeyBytes , err := hex .DecodeString (rpcID .GetGroupKeyStr ())
4719- if err != nil {
4720- return universe.Identifier {}, err
4721- }
4722-
4723- // TODO(roasbeef): reuse with above
4724-
4718+ case len (groupKeyBytes ) != 0 :
47254719 groupKey , err := parseUserKey (groupKeyBytes )
47264720 if err != nil {
47274721 return universe.Identifier {}, err
@@ -4733,7 +4727,7 @@ func UnmarshalUniID(rpcID *unirpc.ID) (universe.Identifier, error) {
47334727 }, nil
47344728
47354729 default :
4736- return universe.Identifier {}, fmt .Errorf ("no id set " )
4730+ return universe.Identifier {}, fmt .Errorf ("malformed id" )
47374731 }
47384732}
47394733
@@ -5338,6 +5332,10 @@ func unmarshalUniverseKey(key *unirpc.UniverseKey) (universe.Identifier,
53385332
53395333// unmarshalAssetLeaf unmarshals an asset leaf from the RPC form.
53405334func unmarshalAssetLeaf (leaf * unirpc.AssetLeaf ) (* universe.Leaf , error ) {
5335+ if leaf == nil {
5336+ return nil , fmt .Errorf ("missing asset leaf" )
5337+ }
5338+
53415339 // We'll just pull the asset details from the serialized issuance proof
53425340 // itself.
53435341 var proofAsset asset.Asset
@@ -5368,6 +5366,10 @@ func unmarshalAssetLeaf(leaf *unirpc.AssetLeaf) (*universe.Leaf, error) {
53685366func (r * rpcServer ) InsertProof (ctx context.Context ,
53695367 req * unirpc.AssetProof ) (* unirpc.AssetProofResponse , error ) {
53705368
5369+ if req == nil {
5370+ return nil , fmt .Errorf ("missing proof and universe key" )
5371+ }
5372+
53715373 universeID , leafKey , err := unmarshalUniverseKey (req .Key )
53725374 if err != nil {
53735375 return nil , err
@@ -6193,64 +6195,71 @@ func unmarshalAssetSpecifier(req *rfqrpc.AssetSpecifier) (*asset.ID,
61936195 // give precedence to the asset ID due to its higher level of
61946196 // specificity.
61956197 var (
6196- assetID * asset. ID
6197-
6198+ assetIDBytes [] byte
6199+ assetID * asset. ID
61986200 groupKeyBytes []byte
61996201 groupKey * btcec.PublicKey
6200-
6201- err error
6202+ err error
62026203 )
62036204
62046205 switch {
62056206 // Parse the asset ID if it's set.
62066207 case len (req .GetAssetId ()) > 0 :
6207- var assetIdBytes [ 32 ] byte
6208- copy ( assetIdBytes [:], req . GetAssetId ())
6209- id := asset . ID ( assetIdBytes )
6210- assetID = & id
6208+ assetIDBytes = req . GetAssetId ()
6209+ if len ( assetIDBytes ) != sha256 . Size {
6210+ return nil , nil , fmt . Errorf ( "asset ID must be 32 bytes" )
6211+ }
62116212
62126213 case len (req .GetAssetIdStr ()) > 0 :
6213- assetIDBytes , err := hex .DecodeString (req .GetAssetIdStr ())
6214+ reqAssetIDStr := req .GetAssetIdStr ()
6215+ if len (reqAssetIDStr ) != sha256 .Size * 2 {
6216+ return nil , nil , fmt .Errorf ("asset ID string must be " +
6217+ "64 chars" )
6218+ }
6219+
6220+ assetIDBytes , err = hex .DecodeString (reqAssetIDStr )
62146221 if err != nil {
62156222 return nil , nil , fmt .Errorf ("error decoding asset " +
62166223 "ID: %w" , err )
62176224 }
62186225
6219- var id asset.ID
6220- copy (id [:], assetIDBytes )
6221- assetID = & id
6222-
62236226 // Parse the group key if it's set.
62246227 case len (req .GetGroupKey ()) > 0 :
62256228 groupKeyBytes = req .GetGroupKey ()
6226- groupKey , err = btcec .ParsePubKey (groupKeyBytes )
6227- if err != nil {
6228- return nil , nil , fmt .Errorf ("error parsing group " +
6229- "key: %w" , err )
6230- }
62316229
62326230 case len (req .GetGroupKeyStr ()) > 0 :
6233- groupKeyBytes , err : = hex .DecodeString (
6231+ groupKeyBytes , err = hex .DecodeString (
62346232 req .GetGroupKeyStr (),
62356233 )
62366234 if err != nil {
62376235 return nil , nil , fmt .Errorf ("error decoding group " +
62386236 "key: %w" , err )
62396237 }
62406238
6241- groupKey , err = btcec .ParsePubKey (groupKeyBytes )
6242- if err != nil {
6243- return nil , nil , fmt .Errorf ("error parsing group " +
6244- "key: %w" , err )
6245- }
6246-
62476239 default :
62486240 // At this point, we know that neither the asset ID nor the
62496241 // group key are specified. Return an error.
62506242 return nil , nil , fmt .Errorf ("either asset ID or asset group " +
62516243 "key must be specified" )
62526244 }
62536245
6246+ switch {
6247+ case len (assetIDBytes ) != 0 :
6248+ var id asset.ID
6249+ copy (id [:], assetIDBytes )
6250+ assetID = & id
6251+
6252+ case len (groupKeyBytes ) != 0 :
6253+ groupKey , err = parseUserKey (groupKeyBytes )
6254+ if err != nil {
6255+ return nil , nil , fmt .Errorf ("error parsing group " +
6256+ "key: group key: %w" , err )
6257+ }
6258+
6259+ default :
6260+ return nil , nil , fmt .Errorf ("malformed asset specifier" )
6261+ }
6262+
62546263 return assetID , groupKey , nil
62556264}
62566265
0 commit comments