Как мне проверить подпись ED25519 длиной 128 символов?

У меня возникла проблема с пакетом Go crypto/ed25519. Я пытаюсь проверить подпись сообщения, но подпись и открытый ключ, которые мне нужно проверить, длиннее, чем поддерживает crypto/ed25519.

В пакете crypto/ed25519 есть ограничения на длину ключей и поддерживаемых подписей:

const (
    // PublicKeySize is the size, in bytes, of public keys as used in this package.
    PublicKeySize = 32
    // PrivateKeySize is the size, in bytes, of private keys as used in this package.
    PrivateKeySize = 64
    // SignatureSize is the size, in bytes, of signatures generated and verified by this package.
    SignatureSize = 64
    // SeedSize is the size, in bytes, of private key seeds. These are the private key representations used by RFC 8032.
    SeedSize = 32
)

Но ключ, который я должен использовать для проверки сообщения, длиннее этого:

SignatureSize = 128
PublicKeySize = 64

Когда я пытаюсь использовать функцию Verify(...), она возвращает false из-за размера моей подписи и открытого ключа. Что я могу сделать, чтобы проверить мою подпись в ее текущей длине?


person Maia    schedule 10.12.2020    source источник
comment
Либо у вас есть учетные данные в неправильном формате (например, в шестнадцатеричной кодировке или в кодировке base64), либо у вас нет ключа Ed25519. Открытый ключ определен как 32 байта. Подпись определена как 64 байта. См.: ed25519.cr.yp.to.   -  person John    schedule 10.12.2020
comment
слишком много неопределенности в этом вопросе. Я хотел бы увидеть, как были сгенерированы эти ключи и подписи, или, по крайней мере, как они выглядят.   -  person mh-cbon    schedule 11.12.2020


Ответы (1)


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

Попробуйте сначала расшифровать их:

    const s = "48656c6c6f20476f7068657221"
    decoded, err := hex.DecodeString(s)
    if err != nil {
        log.Fatal(err)
    }

    fmt.Println(len(decoded))
person TehSphinX    schedule 10.12.2020