2021-09-28 22:19:22 +03:00
// Copyright 2021 The Gitea Authors. All rights reserved.
2022-11-27 21:20:29 +03:00
// SPDX-License-Identifier: MIT
2021-09-28 22:19:22 +03:00
2023-02-06 04:49:21 +03:00
package util
2021-09-28 22:19:22 +03:00
import (
"crypto"
"crypto/rand"
"crypto/rsa"
"crypto/x509"
"encoding/pem"
"regexp"
"testing"
2023-02-22 22:21:46 +03:00
"github.com/minio/sha256-simd"
2021-09-28 22:19:22 +03:00
"github.com/stretchr/testify/assert"
)
func TestKeygen ( t * testing . T ) {
2023-02-06 04:49:21 +03:00
priv , pub , err := GenerateKeyPair ( 2048 )
2021-09-28 22:19:22 +03:00
assert . NoError ( t , err )
assert . NotEmpty ( t , priv )
assert . NotEmpty ( t , pub )
assert . Regexp ( t , regexp . MustCompile ( "^-----BEGIN RSA PRIVATE KEY-----.*" ) , priv )
assert . Regexp ( t , regexp . MustCompile ( "^-----BEGIN PUBLIC KEY-----.*" ) , pub )
}
func TestSignUsingKeys ( t * testing . T ) {
2023-02-06 04:49:21 +03:00
priv , pub , err := GenerateKeyPair ( 2048 )
2021-09-28 22:19:22 +03:00
assert . NoError ( t , err )
privPem , _ := pem . Decode ( [ ] byte ( priv ) )
if privPem == nil || privPem . Type != "RSA PRIVATE KEY" {
t . Fatal ( "key is wrong type" )
}
privParsed , err := x509 . ParsePKCS1PrivateKey ( privPem . Bytes )
assert . NoError ( t , err )
pubPem , _ := pem . Decode ( [ ] byte ( pub ) )
if pubPem == nil || pubPem . Type != "PUBLIC KEY" {
t . Fatal ( "key failed to decode" )
}
pubParsed , err := x509 . ParsePKIXPublicKey ( pubPem . Bytes )
assert . NoError ( t , err )
// Sign
msg := "activity pub is great!"
h := sha256 . New ( )
h . Write ( [ ] byte ( msg ) )
d := h . Sum ( nil )
sig , err := rsa . SignPKCS1v15 ( rand . Reader , privParsed , crypto . SHA256 , d )
assert . NoError ( t , err )
// Verify
err = rsa . VerifyPKCS1v15 ( pubParsed . ( * rsa . PublicKey ) , crypto . SHA256 , d , sig )
assert . NoError ( t , err )
}