code.gitea.io/gitea@v1.19.3/modules/util/keypair_test.go (about) 1 // Copyright 2021 The Gitea Authors. All rights reserved. 2 // SPDX-License-Identifier: MIT 3 4 package util 5 6 import ( 7 "crypto" 8 "crypto/rand" 9 "crypto/rsa" 10 "crypto/sha256" 11 "crypto/x509" 12 "encoding/pem" 13 "regexp" 14 "testing" 15 16 "github.com/stretchr/testify/assert" 17 ) 18 19 func TestKeygen(t *testing.T) { 20 priv, pub, err := GenerateKeyPair(2048) 21 assert.NoError(t, err) 22 23 assert.NotEmpty(t, priv) 24 assert.NotEmpty(t, pub) 25 26 assert.Regexp(t, regexp.MustCompile("^-----BEGIN RSA PRIVATE KEY-----.*"), priv) 27 assert.Regexp(t, regexp.MustCompile("^-----BEGIN PUBLIC KEY-----.*"), pub) 28 } 29 30 func TestSignUsingKeys(t *testing.T) { 31 priv, pub, err := GenerateKeyPair(2048) 32 assert.NoError(t, err) 33 34 privPem, _ := pem.Decode([]byte(priv)) 35 if privPem == nil || privPem.Type != "RSA PRIVATE KEY" { 36 t.Fatal("key is wrong type") 37 } 38 39 privParsed, err := x509.ParsePKCS1PrivateKey(privPem.Bytes) 40 assert.NoError(t, err) 41 42 pubPem, _ := pem.Decode([]byte(pub)) 43 if pubPem == nil || pubPem.Type != "PUBLIC KEY" { 44 t.Fatal("key failed to decode") 45 } 46 47 pubParsed, err := x509.ParsePKIXPublicKey(pubPem.Bytes) 48 assert.NoError(t, err) 49 50 // Sign 51 msg := "activity pub is great!" 52 h := sha256.New() 53 h.Write([]byte(msg)) 54 d := h.Sum(nil) 55 sig, err := rsa.SignPKCS1v15(rand.Reader, privParsed, crypto.SHA256, d) 56 assert.NoError(t, err) 57 58 // Verify 59 err = rsa.VerifyPKCS1v15(pubParsed.(*rsa.PublicKey), crypto.SHA256, d, sig) 60 assert.NoError(t, err) 61 }