mirror of
https://github.com/storytold/irsa-manager.git
synced 2026-10-23 08:05:25 +00:00
create Key Pair
This commit is contained in:
@@ -1,43 +1,44 @@
|
||||
package selfhosted
|
||||
|
||||
import (
|
||||
"os"
|
||||
"crypto"
|
||||
"crypto/rand"
|
||||
"crypto/rsa"
|
||||
"crypto/sha256"
|
||||
"crypto/x509"
|
||||
"encoding/pem"
|
||||
"testing"
|
||||
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
const rsaKeyID = "JHJehTTTZlsspKHT-GaJxK7Kd1NQgZJu3fyK6K_QDYU"
|
||||
|
||||
|
||||
func TestReadKey(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
filename string
|
||||
expected string
|
||||
expectErr bool
|
||||
}{
|
||||
{
|
||||
name: "rsa",
|
||||
filename: "testdata/rsa.pub",
|
||||
expected: rsaKeyID,
|
||||
},
|
||||
{
|
||||
name: "rsa",
|
||||
filename: "testdata/ecdsa.pub",
|
||||
expectErr: true,
|
||||
},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
content, err := os.ReadFile(tt.filename)
|
||||
assert.NoError(t, err)
|
||||
actual, err := NewJWK(content)
|
||||
if tt.expectErr {
|
||||
assert.Error(t, err, "")
|
||||
} else {
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, tt.expected, actual.Keys[0].KeyID)
|
||||
}
|
||||
})
|
||||
}
|
||||
t.Run("key pair check", func(t *testing.T) {
|
||||
keyPair, err := createKeyPair()
|
||||
assert.NoError(t, err)
|
||||
|
||||
message := []byte("test message")
|
||||
hashed := sha256.Sum256(message)
|
||||
|
||||
block, _ := pem.Decode(keyPair.PrivateKey)
|
||||
assert.NotNil(t, block, "failed to decode private key to PEM")
|
||||
|
||||
privateKey, err := x509.ParsePKCS1PrivateKey(block.Bytes)
|
||||
assert.NoError(t, err, "failed to parse private key")
|
||||
|
||||
signature, err := rsa.SignPKCS1v15(rand.Reader, privateKey, crypto.SHA256, hashed[:])
|
||||
|
||||
assert.NoError(t, err, "failed to create signature")
|
||||
block, _ = pem.Decode(keyPair.PublicKey)
|
||||
assert.NotNil(t, block, "failed to decode public key to PEM")
|
||||
|
||||
pubKey, err := x509.ParsePKIXPublicKey(block.Bytes)
|
||||
assert.NoError(t, err, "failed to parse public key")
|
||||
|
||||
rsaPubKey, ok := pubKey.(*rsa.PublicKey)
|
||||
assert.Truef(t, ok, "public key is not RSA")
|
||||
|
||||
err = rsa.VerifyPKCS1v15(rsaPubKey, crypto.SHA256, hashed[:], signature)
|
||||
assert.NoError(t, err, "failed to check signature")
|
||||
})
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user