63 lines
3.2 KiB
Go
63 lines
3.2 KiB
Go
package yggdrasil
|
|
|
|
import (
|
|
"crypto"
|
|
"crypto/rsa"
|
|
"crypto/sha1"
|
|
"crypto/x509"
|
|
"encoding/base64"
|
|
"encoding/pem"
|
|
"os"
|
|
"testing"
|
|
"time"
|
|
|
|
"github.com/samber/lo"
|
|
)
|
|
|
|
const (
|
|
publicKeySignatureV2Str = "sB+BdmutEFqkIoIDOSPOrle8tCQl+lv8pCKqviivreZ0Et8zNgUtFagR9jvWiGfhSbOtQXf1ooDZDQx/TO58KA9k1gSoKoB3IWvxUooW5fiAftH+VvFluO+c9bulWiZ/Lk28EOk/moaGtovgYzMtt6F4BIJYB/iZLSkuRp/MiJqsUJcDN5DWViizWSjBsuAkiV+6+/T1QW9Z6IKrOvlLfJqhm/HSXgTuxS4CbzzqxGWZL49TDdeZFs0q1O+NgK2k5zLeL1JjfFdS6hu5X13pa9ygmTLrFIwuml9rT65mlQV5KSXGkO7uajKVpKBfqoM8gZ42wc20kyItDiSVIw4afoEpdr5AtlOL4VIK+Qnphty3YS18sbZzIukIMxMN/s/i90QA9xuMy/U0a8RwOq0haFJ5OYES9EFIYJjqa7uZJ1+riSJvXWQZwbh4l09lQ5p4/TBCDIqa3cp+YH2kVM8JCxhsLNmkkoXlV9LSJQ2zyAe1ItkrIi/HYx2qLQ56CIel5qM4j60+kPpoGfmvgeEiHDERloH9lekHHUeRXawXV6RE1wwf41Qi9+3UycJQWGOi03qprE42YjsRMi3BUToEQqK1QOPJo8x2F/YfGVRJpLMBOS1g25uqw/kIOBAzMWfGRtQ5iKuPzFGhLx+rJjp58pyr0939KMvQtq/71ADQllM="
|
|
publicKeySignatureStr = "kxjk7pdzEyQ5Pj+OOza2hmMFFZ1RHSqAHv1DcHaF+um5ZLRBvuwRTmbmvwuq4IFafdPvwaGqohNF7U9EXv+/v2JrEkZQWRXTfhzx+WSpogfDFtIOe20QFKOfZ1kBgPYaqCjSx67idvgaCMxafjWZDmZEMfJLv5TL1rO2LHnyeMIlFdVRhVbRiwa8f7RSPcNhLL2I0zHl40EG7lryIW08bctd4Ksgd0eDYw/tJCfY79NV1PurKE+9YCr2fK1ErhSfirkdfmXptEQ9iEZ+YRwkgYZRI6bQiwwpMqMDFLNOL5STxuEZz6ynygRI2WL+n09FYt066Eci3RC9lRVt3VUrRO2TWx3stwzI8zktrIkplYUC1l/ECtt+RBgN4Fc7QU4RX1ZBirUPDykK2gObS5OtowTi0o3tTPOnl0Jy/a1vr+Nqc1TPlDomE6xOBDtCD61sMuPedNM8IoBl71OphR91t4oxDDe5mZMZBCc27J6apjy3rfzL4Xpi9g72047QKYrQEYNWpF9ddkX/Ed8roC/e7Zaa77ARhSDfBbKs9gRvILqFZ8eprMBGzn55K4QI23l8G1X7IS4squaWkRNi+LXRq8M936DqYRIZ9bloJa5W+XJPGn29dWGxPlto2ELzGLI/69vemqNiKLmoXocBRByVAi7TU/Tqr9ZiJU1RBjsdh2w="
|
|
publikKey = "-----BEGIN RSA PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvUP6vXby++vuXGONEve5grn9cu2Zv3KQ\nXimz2kdIlN8DZ3u4ZUHkS6b1vWpOhS/IWE5TIp2iA7HOVH6WOTK3uViBhMXaMZ5eFuqASfA/jPF8\nxaGmHiH4dBmGzbO7B+DRvL38PYLCTMzgwxp1qEuW7VVmcd6Glr0HG9q3YDB0rb9gjPhvj6seT6sf\ntoYC0wHX29qUe4Y89bgSsF9WDf0lQ+qdjLwlcP/Aqyc+VaCYLV67LiRDjQc8q2JmPoy4KEwxOYuD\nEfHSfHzu48xn2mfvVMJXRU09VDLvvXcteEt7KLF6a1QizNx51AXwUq8xre42dgQkPF4Dnv4JxysD\niMVHzwIDAQAB\n-----END RSA PUBLIC KEY-----\n"
|
|
expiresAt = "2023-09-17T03:06:05.251232611Z"
|
|
)
|
|
|
|
func Test_publicKeySignature(t *testing.T) {
|
|
b, err := os.ReadFile("yggdrasil_session_pubkey.der")
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
pub := lo.Must(x509.ParsePKIXPublicKey(b)).(*rsa.PublicKey)
|
|
pubByte, _ := pem.Decode([]byte(publikKey))
|
|
if pubByte == nil {
|
|
t.FailNow()
|
|
}
|
|
|
|
userPub := lo.Must(x509.ParsePKIXPublicKey(pubByte.Bytes)).(*rsa.PublicKey)
|
|
timeUinx := lo.Must(time.Parse(time.RFC3339Nano, expiresAt)).UnixMilli()
|
|
|
|
t.Run("publicKeySignatureV2", func(t *testing.T) {
|
|
signByte, err := publicKeySignatureV2(userPub, "9f51573a5ec545828c2b09f7f08497b1", timeUinx)
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
hashed := sha1.Sum(signByte)
|
|
|
|
err = rsa.VerifyPKCS1v15(pub, crypto.SHA1, hashed[:], lo.Must(base64.StdEncoding.DecodeString(publicKeySignatureV2Str)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
|
|
t.Run("publicKeySignature", func(t *testing.T) {
|
|
b := publicKeySignature(publikKey, timeUinx)
|
|
|
|
hashed := sha1.Sum(b)
|
|
|
|
err = rsa.VerifyPKCS1v15(pub, crypto.SHA1, hashed[:], lo.Must(base64.StdEncoding.DecodeString(publicKeySignatureStr)))
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
})
|
|
}
|