Hi everyone,

I'm trying to import ECDSA public keys such as:


> -----BEGIN PUBLIC KEY-----
> MIIBEzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////wAAAAEAAAAA
> AAAAAAAAAAD///////////////8wRAQg/////wAAAAEAAAAAAAAAAAAAAAD/////
> //////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n0mBLBEEEaxfR
> 8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84z
> V2sxXs7LtkBoN79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVR
> AgEBAyIAAj0NucrmLWG5ntF/9dsjrnslEem0kgpWv0ficRJ4o50F
> -----END PUBLIC KEY-----


Using "openssl ec -pubin -noout -text -in pubkey" shows:

read EC key
> pub:
>     02:3d:0d:b9:ca:e6:2d:61:b9:9e:d1:7f:f5:db:23:
>     ae:7b:25:11:e9:b4:92:0a:56:bf:47:e2:71:12:78:
>     a3:9d:05
> Field Type: prime-field
> Prime:
>     00:ff:ff:ff:ff:00:00:00:01:00:00:00:00:00:00:
>     00:00:00:00:00:00:ff:ff:ff:ff:ff:ff:ff:ff:ff:
>     ff:ff:ff
> A:
>     00:ff:ff:ff:ff:00:00:00:01:00:00:00:00:00:00:
>     00:00:00:00:00:00:ff:ff:ff:ff:ff:ff:ff:ff:ff:
>     ff:ff:fc
> B:
>     5a:c6:35:d8:aa:3a:93:e7:b3:eb:bd:55:76:98:86:
>     bc:65:1d:06:b0:cc:53:b0:f6:3b:ce:3c:3e:27:d2:
>     60:4b
> Generator (uncompressed):
>     04:6b:17:d1:f2:e1:2c:42:47:f8:bc:e6:e5:63:a4:
>     40:f2:77:03:7d:81:2d:eb:33:a0:f4:a1:39:45:d8:
>     98:c2:96:4f:e3:42:e2:fe:1a:7f:9b:8e:e7:eb:4a:
>     7c:0f:9e:16:2b:ce:33:57:6b:31:5e:ce:cb:b6:40:
>     68:37:bf:51:f5
> Order:
>     00:ff:ff:ff:ff:00:00:00:00:ff:ff:ff:ff:ff:ff:
>     ff:ff:bc:e6:fa:ad:a7:17:9e:84:f3:b9:ca:c2:fc:
>     63:25:51
> Cofactor:  1 (0x1)



Now I'm trying to import this same key using go:

package main
> import (
> "crypto/dsa"
> "crypto/ecdsa"
> "crypto/rsa"
> "crypto/x509"
> "encoding/pem"
> "fmt"
> )
> func main() {
> const pubPEM = `
>   -----BEGIN PUBLIC KEY-----
>   MIIBEzCB7AYHKoZIzj0CATCB4AIBATAsBgcqhkjOPQEBAiEA/////wAAAAEAAAAA
>   AAAAAAAAAAD///////////////8wRAQg/////wAAAAEAAAAAAAAAAAAAAAD/////
>   //////////wEIFrGNdiqOpPns+u9VXaYhrxlHQawzFOw9jvOPD4n0mBLBEEEaxfR
>   8uEsQkf4vOblY6RA8ncDfYEt6zOg9KE5RdiYwpZP40Li/hp/m47n60p8D54WK84z
>   V2sxXs7LtkBoN79R9QIhAP////8AAAAA//////////+85vqtpxeehPO5ysL8YyVR
>   AgEBAyIAAj0NucrmLWG5ntF/9dsjrnslEem0kgpWv0ficRJ4o50F
>   -----END PUBLIC KEY-----`
> block, _ := pem.Decode([]byte(pubPEM))
> if block == nil {
> panic("Pem decode failed")
> }
> pub, err := x509.ParsePKIXPublicKey(block.Bytes)
> if err != nil {
> fmt.Println("Load key failed: ", err)
> }
> switch pub := pub.(type) {
> case *rsa.PublicKey:
> fmt.Println("pub is of type RSA:", pub)
> case *dsa.PublicKey:
> fmt.Println("pub is of type DSA:", pub)
> case *ecdsa.PublicKey:
> fmt.Println("pub is of type ECDSA:", pub)
> default:
> panic("unknown type of public key")
> }
> }


This code fails to PEM decode the public key.
I've tried several other options switching from "PEM decode failure" to 
"panic: failed to parse DER encoded public key: asn1: structure error: tags 
don't match (6 vs {class:0 tag:16 length:224 isCompound:true}) 
{optional:false explicit:false application:false defaultValue:<nil> 
tag:<nil> stringType:0 timeType:0 set:false omitEmpty:false} 
ObjectIdentifier @3" ...

What am I doing wrong ?

Thanks for your help !

  Benoit

-- 
You received this message because you are subscribed to the Google Groups 
"golang-nuts" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to golang-nuts+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to