2013-03-18 3 views
2

J'ai quelques problèmes avec la documentation.openpgp et golang

Voici mon programme:

package main 

import (
    "bytes" 
    "code.google.com/p/go.crypto/openpgp" 
    "encoding/base64" 
    "fmt" 
) 

func main() { 

    var entity *openpgp.Entity 
    entity, err := openpgp.NewEntity("bussiere", "test", "[email protected]", nil) 
    if err != nil { 

    } 

    var (
     buffer bytes.Buffer 
    ) 

    entity.SerializePrivate(&buffer, nil) 
    data := base64.StdEncoding.EncodeToString([]byte(buffer.String())) 

    fmt.Printf("%q\n", data) 

    entity.Serialize(&buffer) 
    data2 := base64.StdEncoding.EncodeToString([]byte(buffer.String())) 

    fmt.Printf("%q\n", data2) 

    entity.PrivateKey.Serialize(&buffer) 
    data3 := base64.StdEncoding.EncodeToString([]byte(buffer.String())) 

    fmt.Printf("%q\n", data3) 

    entity.PrimaryKey.Serialize(&buffer) 
    data4 := base64.StdEncoding.EncodeToString([]byte(buffer.String())) 

    fmt.Printf("%q\n", data4) 

    //fmt.Printf(buffer.String()) 

} 

Voici les données:

https://gist.github.com/bussiere/5159890 

ici est le code sur fond:

https://gist.github.com/bussiere/5159897 

Quelle est la clé publique?

Et comment l'utiliser?

Et comment faire plus grande clé?

+0

Un problème évident de votre sortie de script est que vous ne réinitialisez pas le tampon entre chaque appel 'Serialize', donc à la fin vous avez tous ces blobs de données concaténées. Je ne suis pas sûr des autres parties de votre question. –

+0

merci pour le tampon. Et je voudrais un exemple sur la façon d'utiliser la clé que j'ai généré merci. – user462794

Répondre

4

MISE À JOUR: Ce problème a été résolu: see here

la solution Fils/description ci-dessous n'est plus approprié.

réponse héritage commence ci-dessous -------------------- ----------------

concering votre question de Comment construire des clés d'une autre taille: c'est impossible.

Je suis tombé sur exactement le même problème, consultez: le code source pour le NewEntityFunction:

383 const defaultRSAKeyBits = 2048 
384 
385 // NewEntity returns an Entity that contains a fresh RSA/RSA keypair with a 
386 // single identity composed of the given full name, comment and email, any of 
387 // which may be empty but must not contain any of "()<>\x00". 
388 // If config is nil, sensible defaults will be used. 
389 func NewEntity(name, comment, email string, config *packet.Config) (*Entity, error) { 
390  currentTime := config.Now() 
391 
392  uid := packet.NewUserId(name, comment, email) 
393  if uid == nil { 
394   return nil, errors.InvalidArgumentError("user id field contained invalid characters") 
395  } 
396  signingPriv, err := rsa.GenerateKey(config.Random(), defaultRSAKeyBits) 
397  if err != nil { 
398   return nil, err 
399  } 
400  encryptingPriv, err := rsa.GenerateKey(config.Random(), defaultRSAKeyBits) 
401  if err != nil { 
402   return nil, err 
403  } 

defaultRSAKeyBits est un pkg à niveau constant désexporter. Donc aucune chance de modifier ce beheavior.

J'ai fini par copier toute la fonction, en ajoutant un paramètre pour les keybits et en le gardant dans mon code de base, si quelqu'un a une meilleure solution, je serais heureux de l'entendre.

+1

Cette réponse est correcte. Nous le réparons dans Go: https://github.com/golang/go/issues/6693 –