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 [email protected].
For more options, visit https://groups.google.com/d/optout.