首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将Kyber.Point转换为Byte或使用Kyber.Point提取Byte

将Kyber.Point转换为Byte或使用Kyber.Point提取Byte
EN

Stack Overflow用户
提问于 2022-02-24 16:49:10
回答 1查看 107关注 0票数 -1

如何将Kyber.Point类型转换为字节或从Golang中提取字节?

我希望秘密密钥(ECDH)与HMAC有哈希密钥一起使用。

代码:

代码语言:javascript
复制
package main

import (
    "crypto/hmac"
    "crypto/rand"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
    "math/big"

    "go.dedis.ch/kyber/v3/group/edwards25519"
    "go.dedis.ch/kyber/v3/util/random"
)

var rng = random.New()

func GenerateRandomASCIIString(length int) (string, error) {
    result := ""
    for {
        if len(result) >= length {
            return result, nil
        }
        num, err := rand.Int(rand.Reader, big.NewInt(int64(127)))
        if err != nil {
            return "", err
        }
        n := num.Int64()
        if n > 32 && n < 127 {
            result += string(n)
        }
    }
}
func main() {

    suite := edwards25519.NewBlakeSHA256Ed25519()

    X := suite.Point().Pick(rng)
    Y := suite.Point().Pick(rng)
    a := suite.Scalar().Pick(suite.RandomStream())
    b := suite.Scalar().Pick(suite.RandomStream())

    fmt.Printf("Titik yang disepakati Alice dan Bob :\n X:\t%s\n Y:\t%s\n\n", X, Y)
    fmt.Printf("Kunci Private Alice:\n %s\n\n", a)
    fmt.Printf("Kunci Private Bob:\n %s\n\n", b)

    aX := suite.Point().Mul(a, X)
    aY := suite.Point().Mul(a, Y)

    bX := suite.Point().Mul(b, X)
    bY := suite.Point().Mul(b, Y)

    //Punya Alice
    abX := suite.Point().Mul(a, bX)
    abY := suite.Point().Mul(a, bY)

    //Punya Bob
    baX := suite.Point().Mul(b, aX)
    baY := suite.Point().Mul(b, aY)

    fmt.Printf("Kunci Rahasia Alice:\n abX : %s\n abY : %s\n\n", abX, abY)
    fmt.Printf("Kunci Rahasia Bob:\n baX : %s\n baY : %s\n", baX, baY)

    data := "data"

    h := hmac.New(sha256.New, abX)

    h.Write([]byte(data))

    sha := hex.EncodeToString(h.Sum(nil))

    fmt.Println("Hasil Hash Alice: " + sha)

    g := hmac.New(sha256.New, baY)

    g.Write([]byte(data))

    sha2 := hex.EncodeToString(g.Sum(nil))

    fmt.Println("Hasil Hash Bob: " + sha2)
}

在运行代码时,我会遇到以下错误:

代码语言:javascript
复制
./prog.go:77:15: cannot use abX (type kyber.Point) as type []byte in argument to hmac.New
./prog.go:90:15: cannot use baY (type kyber.Point) as type []byte in argument to hmac.New

我想要abX/abY和baX/baY到Byte类型。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-24 18:43:57

如果你指的是凯伯

该库的接口有一个返回嵌入式字节数据的Data方法。

方法签名:Data() ([]byte, error)

因为abXbaY都是Point类型,所以可以直接调用它上的Data方法来检索字节。

代码语言:javascript
复制
package main

import (
    "crypto/hmac"
    "crypto/rand"
    "crypto/sha256"
    "encoding/hex"
    "fmt"
    "math/big"

    "go.dedis.ch/kyber/v3/group/edwards25519"
    "go.dedis.ch/kyber/v3/util/random"
)

var rng = random.New()

func GenerateRandomASCIIString(length int) (string, error) {
    result := ""
    for {
        if len(result) >= length {
            return result, nil
        }
        num, err := rand.Int(rand.Reader, big.NewInt(int64(127)))
        if err != nil {
            return "", err
        }
        n := num.Int64()
        if n > 32 && n < 127 {
            result += string(n)
        }
    }
}
func main() {

    suite := edwards25519.NewBlakeSHA256Ed25519()

    X := suite.Point().Pick(rng)
    Y := suite.Point().Pick(rng)
    a := suite.Scalar().Pick(suite.RandomStream())
    b := suite.Scalar().Pick(suite.RandomStream())

    fmt.Printf("Titik yang disepakati Alice dan Bob :\n X:\t%s\n Y:\t%s\n\n", X, Y)
    fmt.Printf("Kunci Private Alice:\n %s\n\n", a)
    fmt.Printf("Kunci Private Bob:\n %s\n\n", b)

    aX := suite.Point().Mul(a, X)
    aY := suite.Point().Mul(a, Y)

    bX := suite.Point().Mul(b, X)
    bY := suite.Point().Mul(b, Y)

    //Punya Alice
    abX := suite.Point().Mul(a, bX)
    abY := suite.Point().Mul(a, bY)

    //Punya Bob
    baX := suite.Point().Mul(b, aX)
    baY := suite.Point().Mul(b, aY)

    fmt.Printf("Kunci Rahasia Alice:\n abX : %s\n abY : %s\n\n", abX, abY)
    fmt.Printf("Kunci Rahasia Bob:\n baX : %s\n baY : %s\n", baX, baY)

    data, err := abX.Data()
    if err != nil {
      fmt.Println("Someting went wrong while extracting bytes")
    }
    fmt.Printf("DATA: %+v", data);

    h := hmac.New(sha256.New, data)

    h.Write([]byte(data))

    sha := hex.EncodeToString(h.Sum(nil))

    fmt.Println("Hasil Hash Alice: " + sha)

    data, err = baY.Data()
    if err != nil {
      fmt.Println("Someting went wrong while extracting bytes")
    }
    fmt.Printf("DATA: %+v", data);

    g := hmac.New(sha256.New, data)

    g.Write([]byte(data))

    sha2 := hex.EncodeToString(g.Sum(nil))

    fmt.Println("Hasil Hash Bob: " + sha2)
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71255452

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档