gitech

Форк
0
/
keypair_test.go 
61 строка · 1.4 Кб
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
}
62

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.