aboutsummaryrefslogtreecommitdiffstats
path: root/models/asymkey/gpg_key.go
diff options
context:
space:
mode:
authorwxiaoguang <wxiaoguang@gmail.com>2025-01-27 09:14:08 +0800
committerGitHub <noreply@github.com>2025-01-27 09:14:08 +0800
commit517a367abea52fc96a1a8002c87bc20b8528dcd3 (patch)
treecf4c325394667eacadd2bb4cce24f592498c355c /models/asymkey/gpg_key.go
parentfae69bc6d4cbe3c93db9d33dc25e52f0ef267ddb (diff)
downloadgitea-517a367abea52fc96a1a8002c87bc20b8528dcd3.tar.gz
gitea-517a367abea52fc96a1a8002c87bc20b8528dcd3.zip
Use ProtonMail/go-crypto to replace keybase/go-crypto (#33402)
Fix #33400 The keybase/go-crypto is no longer maintained and it generates malformed signatures, ProtonMail/go-crypto is the actively maintained fork.
Diffstat (limited to 'models/asymkey/gpg_key.go')
-rw-r--r--models/asymkey/gpg_key.go12
1 files changed, 8 insertions, 4 deletions
diff --git a/models/asymkey/gpg_key.go b/models/asymkey/gpg_key.go
index 5236b2d450..e921340730 100644
--- a/models/asymkey/gpg_key.go
+++ b/models/asymkey/gpg_key.go
@@ -13,8 +13,8 @@ import (
user_model "code.gitea.io/gitea/models/user"
"code.gitea.io/gitea/modules/timeutil"
- "github.com/keybase/go-crypto/openpgp"
- "github.com/keybase/go-crypto/openpgp/packet"
+ "github.com/ProtonMail/go-crypto/openpgp"
+ "github.com/ProtonMail/go-crypto/openpgp/packet"
"xorm.io/builder"
)
@@ -141,7 +141,11 @@ func parseGPGKey(ctx context.Context, ownerID int64, e *openpgp.Entity, verified
// Parse Subkeys
subkeys := make([]*GPGKey, len(e.Subkeys))
for i, k := range e.Subkeys {
- subs, err := parseSubGPGKey(ownerID, pubkey.KeyIdString(), k.PublicKey, expiry)
+ subkeyExpiry := expiry
+ if k.Sig.KeyLifetimeSecs != nil {
+ subkeyExpiry = k.PublicKey.CreationTime.Add(time.Duration(*k.Sig.KeyLifetimeSecs) * time.Second)
+ }
+ subs, err := parseSubGPGKey(ownerID, pubkey.KeyIdString(), k.PublicKey, subkeyExpiry)
if err != nil {
return nil, ErrGPGKeyParsing{ParseError: err}
}
@@ -156,7 +160,7 @@ func parseGPGKey(ctx context.Context, ownerID int64, e *openpgp.Entity, verified
emails := make([]*user_model.EmailAddress, 0, len(e.Identities))
for _, ident := range e.Identities {
- if ident.Revocation != nil {
+ if ident.Revoked(time.Now()) {
continue
}
email := strings.ToLower(strings.TrimSpace(ident.UserId.Email))