You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

keypair_test.go 1.4KB

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