gitea源码

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/sha256"
  9. "crypto/x509"
  10. "encoding/pem"
  11. "testing"
  12. "github.com/stretchr/testify/assert"
  13. )
  14. func TestKeygen(t *testing.T) {
  15. priv, pub, err := GenerateKeyPair(2048)
  16. assert.NoError(t, err)
  17. assert.NotEmpty(t, priv)
  18. assert.NotEmpty(t, pub)
  19. assert.Regexp(t, "^-----BEGIN RSA PRIVATE KEY-----.*", priv)
  20. assert.Regexp(t, "^-----BEGIN PUBLIC KEY-----.*", pub)
  21. }
  22. func TestSignUsingKeys(t *testing.T) {
  23. priv, pub, err := GenerateKeyPair(2048)
  24. assert.NoError(t, err)
  25. privPem, _ := pem.Decode([]byte(priv))
  26. if privPem == nil || privPem.Type != "RSA PRIVATE KEY" {
  27. t.Fatal("key is wrong type")
  28. }
  29. privParsed, err := x509.ParsePKCS1PrivateKey(privPem.Bytes)
  30. assert.NoError(t, err)
  31. pubPem, _ := pem.Decode([]byte(pub))
  32. if pubPem == nil || pubPem.Type != "PUBLIC KEY" {
  33. t.Fatal("key failed to decode")
  34. }
  35. pubParsed, err := x509.ParsePKIXPublicKey(pubPem.Bytes)
  36. assert.NoError(t, err)
  37. // Sign
  38. msg := "activity pub is great!"
  39. h := sha256.New()
  40. h.Write([]byte(msg))
  41. d := h.Sum(nil)
  42. sig, err := rsa.SignPKCS1v15(rand.Reader, privParsed, crypto.SHA256, d)
  43. assert.NoError(t, err)
  44. // Verify
  45. err = rsa.VerifyPKCS1v15(pubParsed.(*rsa.PublicKey), crypto.SHA256, d, sig)
  46. assert.NoError(t, err)
  47. }