Remove manual X.509 public key encoding
This commit is contained in:
parent
2d69a3c42f
commit
9f189d913b
3 changed files with 7 additions and 71 deletions
|
@ -5,6 +5,7 @@ import (
|
|||
"crypto/elliptic"
|
||||
"crypto/rand"
|
||||
"crypto/sha256"
|
||||
"crypto/x509"
|
||||
"encoding/base64"
|
||||
"fmt"
|
||||
"math/big"
|
||||
|
@ -64,12 +65,12 @@ func (t *JWK) GetPublicKey() (*ecdsa.PublicKey, error) {
|
|||
return pubKey, nil
|
||||
}
|
||||
|
||||
func (t *JWK) MarshalPubKey() ([]byte, error) {
|
||||
func (t *JWK) MarshalX509PublicKey() ([]byte, error) {
|
||||
pubKey, err := t.GetPublicKey()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return elliptic.Marshal(pubKey.Curve, pubKey.X, pubKey.Y), nil
|
||||
return x509.MarshalPKIXPublicKey(pubKey)
|
||||
}
|
||||
|
||||
func (t *JWK) SignRequest(requestID string, timestamp int64) ([]byte, error) {
|
||||
|
|
|
@ -1,45 +0,0 @@
|
|||
package crypto
|
||||
|
||||
var SequenceOne = []int{1, 2, 840, 10045, 2, 1}
|
||||
var SequenceTwo = []int{1, 2, 840, 10045, 3, 1, 7}
|
||||
|
||||
func EncodeValues(a *[]byte, b []int) {
|
||||
*a = append(*a, 6)
|
||||
idx := len(*a)
|
||||
*a = append(*a, 0)
|
||||
*a = append(*a, byte(40*b[0]+b[1]))
|
||||
for i := 2; i < len(b); i++ {
|
||||
d := b[i]
|
||||
e := make([]byte, 0)
|
||||
if d > 128 {
|
||||
e = append(e, byte(d/128)+128)
|
||||
}
|
||||
e = append(e, byte(d%128))
|
||||
*a = append(*a, e...)
|
||||
}
|
||||
(*a)[idx] = byte(len(*a) - idx - 1)
|
||||
}
|
||||
|
||||
func AppendBytes(a []byte, b []byte) []byte {
|
||||
newA := make([]byte, len(a))
|
||||
copy(newA, a)
|
||||
|
||||
newA = HelperAppendBytes(newA, 48)
|
||||
newA = HelperAppendBytes(newA, byte(len(b)))
|
||||
for _, value := range b {
|
||||
newA = HelperAppendBytes(newA, value)
|
||||
}
|
||||
return newA
|
||||
}
|
||||
|
||||
func HelperAppendBytes(a []byte, b byte) []byte {
|
||||
return append(a, b)
|
||||
}
|
||||
|
||||
func AppendByteSequence(byteArr1 []byte, byteArr2 []byte, uncompressedPublicKey []byte) []byte {
|
||||
copiedByteArray := AppendBytes(byteArr1, byteArr2)
|
||||
copiedByteArray = HelperAppendBytes(copiedByteArray, 3)
|
||||
copiedByteArray = HelperAppendBytes(copiedByteArray, uint8(len(uncompressedPublicKey)+1))
|
||||
copiedByteArray = HelperAppendBytes(copiedByteArray, 0)
|
||||
return copiedByteArray
|
||||
}
|
|
@ -11,9 +11,9 @@ import (
|
|||
func RegisterPhoneRelay(jwk *crypto.JWK) ([]byte, *binary.AuthenticationContainer, error) {
|
||||
id := util.RandomUUIDv4()
|
||||
|
||||
encryptedKeys, encryptErr := uncompressKey(jwk)
|
||||
if encryptErr != nil {
|
||||
return nil, nil, encryptErr
|
||||
key, err := jwk.MarshalX509PublicKey()
|
||||
if err != nil {
|
||||
return nil, nil, err
|
||||
}
|
||||
|
||||
payloadData := &binary.AuthenticationContainer{
|
||||
|
@ -27,7 +27,7 @@ func RegisterPhoneRelay(jwk *crypto.JWK) ([]byte, *binary.AuthenticationContaine
|
|||
KeyData: &binary.KeyData{
|
||||
EcdsaKeys: &binary.ECDSAKeys{
|
||||
Field1: 2,
|
||||
EncryptedKeys: encryptedKeys,
|
||||
EncryptedKeys: key,
|
||||
},
|
||||
},
|
||||
},
|
||||
|
@ -38,23 +38,3 @@ func RegisterPhoneRelay(jwk *crypto.JWK) ([]byte, *binary.AuthenticationContaine
|
|||
}
|
||||
return encoded, payloadData, nil
|
||||
}
|
||||
|
||||
func uncompressKey(jwk *crypto.JWK) ([]byte, error) {
|
||||
uncompressedPublicKey, err3 := jwk.MarshalPubKey()
|
||||
if err3 != nil {
|
||||
return nil, err3
|
||||
}
|
||||
var emptyByteArray []byte
|
||||
crypto.EncodeValues(&emptyByteArray, crypto.SequenceOne)
|
||||
crypto.EncodeValues(&emptyByteArray, crypto.SequenceTwo)
|
||||
|
||||
var copiedByteArray []byte
|
||||
copiedByteArray = crypto.AppendByteSequence(copiedByteArray, emptyByteArray, uncompressedPublicKey)
|
||||
for _, value := range uncompressedPublicKey {
|
||||
copiedByteArray = crypto.HelperAppendBytes(copiedByteArray, value)
|
||||
}
|
||||
|
||||
var encryptedKeys []byte
|
||||
encryptedKeys = crypto.AppendBytes(encryptedKeys, copiedByteArray[0:])
|
||||
return encryptedKeys, nil
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue