ECDH в Голанге - эллиптический - PullRequest
1 голос
/ 09 октября 2019

К сожалению, в go нет встроенной поддержки мозгового пула, поэтому я пытаюсь заставить ECDH работать с помощью вилки из keybase.

Возможно, я делаю ошибку новичказдесь, но по коду падает первое препятствие (т. е. elliptic.Unmarshal возвращает ноль)?

package main

import (
 "fmt"
 "io/ioutil"
 "log"
"encoding/pem"
"crypto/ecdsa"
"crypto/rand"
"github.com/keybase/go-crypto/brainpool"
"crypto/elliptic"
"crypto/sha256"
)

func main() {
fmt.Println("Hello")
content, err := ioutil.ReadFile("/tmp/TEST.pem")
    if err != nil {
        log.Fatal(err)
    }
fmt.Printf("File contents: %s", content)

    block, _ := pem.Decode(content)
    if block == nil || block.Type != "PUBLIC KEY" {
        log.Fatal("failed to decode PEM")
    }

x,y := elliptic.Unmarshal(brainpool.P512r1(),block.Bytes)
if x == nil {
     log.Fatal("failed to unmarshal")
}
pubb := ecdsa.PublicKey {brainpool.P512r1(),x,y}


priva, _ := ecdsa.GenerateKey(brainpool.P512r1(), rand.Reader)
b, _ := pubb.Curve.ScalarMult(pubb.X, pubb.Y, priva.D.Bytes())

shared1 := sha256.Sum256(b.Bytes())

fmt.Printf("\nShared key %x\n",  shared1)

Обновление для отображения тестового ключа:

-----BEGIN PUBLIC KEY-----
MIGbMBQGByqGSM49AgEGCSskAwMCCAEBDQOBggAEM/zOLT7nMN374k902oTRZXnG
97DPzvqi8QQJaKXcq1BSrU/sNeUhOi6Y+hBcr7ZE+WZDYNoQkaMNrdhF+3x1XGx7
BTBFL3U1w2ENmkIPiDa2o0Q/wpSOLo/RFabdK5Q3/yvq0hoSdXlpKozE7UTre5cU
bJcUzjXvs9KDLEq54Fs=
-----END PUBLIC KEY-----
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...