Skip to content

Commit

Permalink
convert pubkey comp to uncomp
Browse files Browse the repository at this point in the history
  • Loading branch information
youngjoon-lee committed Feb 24, 2023
1 parent 24e18b9 commit 28ed1b1
Show file tree
Hide file tree
Showing 3 changed files with 41 additions and 11 deletions.
4 changes: 2 additions & 2 deletions pkg/vc/command.go
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ func (f *Framework) SignCredential(credential []byte, privKey []byte, opts *Proo
func (f *Framework) VerifyCredential(vc []byte) error {
_, err := verifiable.ParseCredential(
vc,
verifiable.WithPublicKeyFetcher(f.resolver.PublicKeyFetcher()),
verifiable.WithPublicKeyFetcher(f.vdrKeyResolver.PublicKeyFetcher()),
verifiable.WithJSONLDDocumentLoader(f.loader),
)
if err != nil {
Expand Down Expand Up @@ -112,7 +112,7 @@ func (f *Framework) VerifyPresentation(vp []byte, opts ...VerificationOption) (*
// verify VP
presentation, err := verifiable.ParsePresentation(
vp,
verifiable.WithPresPublicKeyFetcher(f.resolver.PublicKeyFetcher()),
verifiable.WithPresPublicKeyFetcher(f.vdrKeyResolver.PublicKeyFetcher()),
verifiable.WithPresJSONLDDocumentLoader(f.loader),
)
if err != nil {
Expand Down
16 changes: 7 additions & 9 deletions pkg/vc/framework.go
Original file line number Diff line number Diff line change
@@ -1,22 +1,22 @@
package vc

import (
"net/http"

"github.com/hyperledger/aries-framework-go/component/storageutil/mem"
"github.com/hyperledger/aries-framework-go/pkg/doc/ld"
"github.com/hyperledger/aries-framework-go/pkg/doc/verifiable"
"github.com/hyperledger/aries-framework-go/pkg/framework/aries/api/vdr"
"github.com/hyperledger/aries-framework-go/pkg/framework/context"
ldstore "github.com/hyperledger/aries-framework-go/pkg/store/ld"
jsonld "github.com/piprate/json-gold/ld"
"net/http"
)

type Framework struct {
loader *ld.DocumentLoader
resolver *verifiable.VDRKeyResolver
loader *ld.DocumentLoader
vdrKeyResolver *verifiable.VDRKeyResolver
}

func NewFramework(vdr vdr.Registry) (*Framework, error) {
func NewFramework(vdrKeyResolver *verifiable.VDRKeyResolver) (*Framework, error) {
storeProvider := mem.NewProvider()
contextStore, err := ldstore.NewContextStore(storeProvider)
if err != nil {
Expand Down Expand Up @@ -44,10 +44,8 @@ func NewFramework(vdr vdr.Registry) (*Framework, error) {
return nil, err
}

resolver := verifiable.NewVDRKeyResolver(vdr)

return &Framework{
loader: loader,
resolver: resolver,
loader: loader,
vdrKeyResolver: vdrKeyResolver,
}, nil
}
32 changes: 32 additions & 0 deletions pkg/vdr/panacea_vdr.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,15 @@ package vdr
import (
"bytes"
"context"
"crypto/elliptic"
"errors"
"fmt"

"github.com/btcsuite/btcd/btcec"
"github.com/gogo/protobuf/jsonpb"
"github.com/hyperledger/aries-framework-go/pkg/doc/did"
"github.com/hyperledger/aries-framework-go/pkg/doc/signature/verifier"
"github.com/hyperledger/aries-framework-go/pkg/doc/verifiable"
"github.com/hyperledger/aries-framework-go/pkg/framework/aries/api/vdr"
didtypes "github.com/medibloc/panacea-core/v2/x/did/types"
)
Expand Down Expand Up @@ -64,3 +68,31 @@ func (r *PanaceaVDR) Deactivate(_ string, _ ...vdr.DIDMethodOption) error {
func (r *PanaceaVDR) Close() error {
return errors.New("not implemented")
}

type PanaceaVDRKeyResolver struct {
vdrKeyResolver *verifiable.VDRKeyResolver
}

func NewPanaceaVDRKeyResolver(vdr *PanaceaVDR) *PanaceaVDRKeyResolver {
return &PanaceaVDRKeyResolver{
vdrKeyResolver: verifiable.NewVDRKeyResolver(vdr),
}
}

func (r *PanaceaVDRKeyResolver) PublicKeyFetcher() verifiable.PublicKeyFetcher {
return func(issuerID, keyID string) (*verifier.PublicKey, error) {
pubKey, err := r.vdrKeyResolver.PublicKeyFetcher()(issuerID, keyID)
if err != nil {
return nil, err
}

if pubKey.Type == "Secp256k1VerificationKey2018" && pubKey.JWK == nil {
curve := btcec.S256()
x, y := elliptic.UnmarshalCompressed(curve, pubKey.Value)
if x != nil { // pubKey is compressed. so, convert it to uncompressed.
pubKey.Value = elliptic.Marshal(curve, x, y)
} // pubKey is uncompressed or invalid. so, do nothing
}
return pubKey, nil
}
}

0 comments on commit 28ed1b1

Please sign in to comment.