опенпгп и голанг

У меня есть некоторые проблемы с документацией.

Вот моя программа:

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())

}

Вот данные:

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

вот код по сути:

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

Что такое открытый ключ?

И как его использовать?

А как сделать больший ключ?


person Bussiere    schedule 18.03.2013    source источник
comment
Одна проблема, очевидная из вывода вашего скрипта, заключается в том, что вы не сбрасываете буфер между каждым вызовом Serialize, поэтому к концу у вас есть конкатенация всех этих блоков данных. Не уверен в других частях вашего вопроса.   -  person James Henstridge    schedule 20.03.2013
comment
спасибо за буфер. И я хотел бы пример того, как использовать ключ, который я сгенерировал, спасибо.   -  person Bussiere    schedule 21.03.2013


Ответы (1)


ОБНОВЛЕНИЕ. Эта проблема исправлена: см. здесь

Решение/описание ниже больше не подходит.

---------------- устаревший ответ начинается ниже --------------------

По вашему вопросу Как построить ключи другого размера: это невозможно.

Я столкнулся с точно такой же проблемой, посмотрите: исходный код 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 — это неэкспортируемая константа уровня пакета. Так что нет шансов изменить это поведение.

В итоге я скопировал всю функцию, добавил параметр для ключевых битов и сохранил его в своей кодовой базе, если у кого-то есть лучшее решение, я был бы рад его услышать.

person tike    schedule 24.05.2013
comment
Этот ответ правильный. Мы исправляем это в Go: github.com/golang/go/issues/6693. - person Jeff Allen; 21.07.2015