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.